有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在JSP中验证参数的最佳实践是什么?

我正在实现一个JSP,它需要在运行JSP之前验证一些参数

  1. 建议:使用 标记库
  2. 建议:预分析筛选器中的参数

你觉得怎么样

编辑

谢谢你的回答,但我想知道如果你提供的是像google chart API这样的服务,你不能期望参数在发送前通过表单检查,那么最好的做法是什么。 例子: https://chart.googleapis.com/chart?cht=&;冠心病=&;chs=&;。。。其他参数


共 (2) 个答案

  1. # 1 楼答案

    使用MVC框架(Spring MVC、Stripes、Struts 2等)并验证控制器类中的参数。每一个MVC框架都支持参数验证,并且可以清晰地分离关注点

    示例:Spring MVC自动注册JSR-303样式的参数验证(如果类路径上有JSR-303提供程序,例如Hibernate Validator)when using ^{}

  2. # 2 楼答案

    两者都不是好办法。控制器/业务逻辑不属于JSP(标记)。过滤器几乎不错,但不够具体。这项工作应该由servlet完成。您将表单提交到servlet进行后处理,对吗?听起来你还没有这么做,否则答案会很简单

    our servlets tag wiki page中,您可以找到一个hello world示例,它是使用JSP和Servlet对表单提交进行后处理的好方法。以下是相关内容的摘录:

    <input id="name" name="name" value="${fn:escapeXml(param.name)}">
    <span class="error">${messages.name}</span>
    

    String name = request.getParameter("name");
    if (name == null || name.trim().isEmpty()) {
        messages.put("name", "Please enter name");
    }
    
    // ...
    
    request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response);
    

    此外,还有一些MVC框架删除了此类用例的所有样板(重复/重复)servlet代码,例如JSF、Spring MVC、Wicket、Stripes、Struts2等。例如JSF它看起来就像这样:

    <h:inputText id="name" value="#{bean.name}" required="true" requiredMessage="Please enter name" />
    <h:message for="name" />
    

    就这些。JSF的FacesServlet控制器servlet将验证是否已填充,并在给定位置显示(可配置)消息,而不需要任何自定义Java代码。您甚至可以将其移动到模型中,JSF还对JSR303 bean验证提供了透明的支持。例如

    <h:inputText id="name" value="#{bean.name}" />
    <h:message for="name" />
    

    @NotNull(message="Please enter name")
    private String name;
    

    根据您的编辑更新

    Thank you for the good answers, but I was wondering what would be the best practice in case you are offering a service like google chart API where you can't expect that the parameters are checked by a form before they are sent. example: https://chart.googleapis.com/chart?cht=&chd=&chs=&...additional_parameters...

    用同样的方法使用servlet。唯一的区别是,您必须在doGet()而不是doPost()中实现作业,如果有必要,在出现错误时返回HTTP 400:)再次检查our servlets tag wiki page以更好地理解它们的用途。或者更进一步,改用webservice框架,比如JAX-WS或JAX-RS,它们透明地完成这项工作,就像MVC框架对HTML页面所做的那样