Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA和InnoDB,以及JSP/JSTL问题_Java_Jsp_Jpa_Jstl - Fatal编程技术网

Java JPA和InnoDB,以及JSP/JSTL问题

Java JPA和InnoDB,以及JSP/JSTL问题,java,jsp,jpa,jstl,Java,Jsp,Jpa,Jstl,有几个问题: 如果我已经用注释CascadeType.ALL映射了一个客户的I-var列表订单,那么我是否也应该在删除CASCADE的MySQL InnoDB中设置关系?还是这些会干扰 是否有必要在每个JSP文件中都说?我可以在web.xml中将其设置为配置参数吗 是否可以让编译器检查servlet映射url和JSP中的url,或者以某种方式强制它们同步?示例:在web.xml/login和login.jsp:(注意额外的n) 和${value}之间的区别是什么?两者似乎都能工作(除非您需要默认

有几个问题:

  • 如果我已经用注释CascadeType.ALL映射了一个客户的I-var
    列表订单
    ,那么我是否也应该在删除CASCADE的MySQL InnoDB
    中设置关系
    ?还是这些会干扰

  • 是否有必要在每个JSP文件中都说
    ?我可以在web.xml中将其设置为配置参数吗

  • 是否可以让编译器检查servlet映射url和JSP中的url,或者以某种方式强制它们同步?示例:在web.xml
    /login
    和login.jsp:
    (注意额外的n)

  • 和${value}之间的区别是什么?两者似乎都能工作(除非您需要默认值)?我什么时候应该用哪个

  • 是否有更好的方法验证servlet中的输入参数(来自表单):

    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框架?

    1。不,你不必这样做。级联由JPA提供商管理


    5.没有。您可以编写自己的实用程序类或验证框架,也可以使用现有的实用程序类或验证框架。

    1。不,您不必这样做。级联由JPA提供商管理

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

    4)
    执行XML转义,
    ${value}
    不执行XML转义,
    ${value}

    4)
    执行XML转义,
    ${value}
    不执行XML转义

  • 要有一个合适的数据模型,是的,您应该

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

  • 不,这不是编译器的责任

  • c:out
    将转义HTML实体,而EL-in模板文本则不会。要重新显示用户控制的输入,应使用
    c:out
    。否则,简单的EL就足够了。例如:

    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! -->
    
    String input=“警报('XSS');”;
    

    ${input}

  • 当然,还有更好的办法。但是,由于您不想使用框架,所以到此为止。我至少可以说,关键是。最小化和重构代码重复。还要尽量使其抽象化,以便易于扩展和重用。以下是一些提示:

    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;
    }
    
    stringusername=view.getField(“username”,必需,MINLENGTH(3));
    字符串email=view.getField(“email”,必填,email);
    整数年龄=view.getField(“年龄”,Integer.class,NUMBER);
    // ...
    公共字符串getField(字符串名称、验证程序…验证程序){
    返回getField(名称、String.class、验证器);
    }
    公共T getField(字符串名称、类类型、验证器…验证器){
    字符串值=request.getParameter(名称);
    返回validateAndConvert(名称、值、类型、验证器);
    }
    私有T验证数据转换
    (字符串名称、字符串值、类类型、验证器…验证器)
    {
    value=(value!=null&&!value.trim().isEmpty())?value.trim():null;
    试一试{
    for(验证器验证器:验证器){
    validator.validate(值);
    }
    }捕获(异常验证程序){
    setError(名称,例如getMessage());
    }
    返回(值!=null)?转换器。转换(值,类型):null;
    }
    
  • 要有一个合适的数据模型,是的,您应该

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

  • 不,这不是编译器的责任

  • c:out
    将转义HTML实体,而EL-in模板文本则不会。要重新显示用户控制的输入,应使用
    c:out
    。否则,简单的EL就足够了。例如:

    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! -->
    
    String input=“警报('XSS');”;
    

    ${input}

  • 当然,还有更好的办法。但是,由于您不想使用框架,所以到此为止。我至少可以说,关键是。最小化和重构代码重复。还要尽量使其抽象化,以便易于扩展和重用。以下是一些提示:

    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;
    }
    
    stringusername=view.getField(“username”,必需,MINLENGTH(3));
    字符串email=view.getField(“email”,必填,email);
    整数年龄=view.getField(“年龄”,Integer.class,NUMBER);
    // ...
    公共字符串getField(字符串名称、验证程序…验证程序){
    返回getField(名称、String.class、验证器);
    }
    公共T getField(字符串名称、类类型、验证器…验证器){
    字符串值=request.getParameter(名称);
    返回validateAndConvert(名称、值、类型、验证器);
    }
    私有T验证数据转换
    (字符串名称、字符串值、类类型、验证器…验证器)
    {
    value=(value!=null&&!value.trim().isEmpty())?value.trim():null;
    试一试{
    for(验证器验证器:验证器){
    validator.validate(值);
    }
    }捕获(异常验证程序){
    setError(名称,例如getMessage());
    }
    返回(值!=null)?转换器。转换(值,类型):null;
    }