代码之家  ›  专栏  ›  技术社区  ›  Mads Mobæk

JPA和InnoDB,以及JSP/JSTL问题

  •  1
  • Mads Mobæk  · 技术社区  · 15 年前

    有几个问题:

    1. 如果我已将客户映射到I-var List<Order> orders 对于annotation CascadeType.ALL,我是否也应该在MySQL InnoDB中设置关系 ON DELETE CASCADE ? 还是这些会干扰?

    2. 有必要说吗 <%@page contentType="text/html" pageEncoding="UTF-8"%> 在每个JSP文件中?我可以在web.xml中将其设置为配置参数吗?

    3. 是否可以让编译器检查servlet映射url和JSP中的url,或者以某种方式强制它们同步?示例:在web.xml中 <url-pattern>/login</url-pattern> ,并在login.jsp中: <c:url value="/loginn" />

    4. <c:out value="${value}" /> 而且只有${value},两者似乎都能工作(除非您需要默认值)?我什么时候应该用哪个?

    5. String possibleUserID = request.getParameter("userid");
      if(possibleUserID == null){
          errors.add("User-ID must be exist");
      } else {
          if(possibleUserID.trim().length() == 0){
              errors.add("User-ID must be filled in");
          }
          // etc
      }
      

    没有某种web框架?

    3 回复  |  直到 15 年前
        1
  •  2
  •   skaffman    15 年前

    4) <c:out value="${value}" /> 执行XML转义, ${value}

        2
  •  2
  •   BalusC    15 年前
    1. 您最终可以使用一个过滤器,它可以 HttpServeletResponse#setCharacterEncoding() #setContentType() ,但对于普通JSP页面,我更喜欢 @page 除此之外。如有必要,只需在IDE中JSP模板的顶部添加额外的行,这样您就不必每次都输入它。

    2. 不,这不是编译器的责任。

    3. c:out c:出去

      String input = "<script>alert('XSS');</script>";
      
      <p><c:out value="${input}" /></p> <!-- works fine, no alert, just escaped. -->
      <p>${input}</p> <!-- JS get interpreted and executed! XSS! -->
      
    4. 当然,还有更好的办法。但是,由于您不想使用框架,所以到此为止。我至少可以说关键是 DRY . 最小化和重构代码重复。还要尽量使其抽象化,以便易于扩展和重用。以下是一些提示:

      String username = view.getField("username", REQUIRED, MINLENGTH(3));
      String email = view.getField("email", REQUIRED, EMAIL);
      Integer age = view.getField("age", Integer.class, NUMBER);
      
      // ...
      
      public String getField(String name, Validator... validators) {
          return getField(name, String.class, validators);
      }
      
      public <T extends Object> T getField(String name, Class<T> type, Validator... validators) {
          String value = request.getParameter(name);
          return validateAndConvert(name, value, type, validators);
      }
      
      private <T extends Object> T validateAndConvert
          (String name, String value, Class<T> type, Validator... validators)
      {
          value = (value != null && !value.trim().isEmpty()) ? value.trim() : null;
          try {
              for (Validator validator : validators) {
                  validator.validate(value);
              }
          } catch (ValidatorException e) {
              setError(name, e.getMessage());
          }
          return (value != null) ? Converter.convert(value, type) : null;
      }
      
        3
  •  2
  •   Bozho    15 年前

    1.不,你不必。级联由JPA提供商管理。

    5.没有。要么编写自己的实用程序类或验证框架,要么使用现有的实用程序类或验证框架。