JPA и InnoDB, а также JSP / JSTL вопросы - PullRequest
1 голос
/ 01 декабря 2009

Пара вопросов:

  1. Если я сопоставил клиента с i-var List<Order> orders с аннотацией CascadeType.ALL, я должен также установить отношение в MySQL InnoDB ON DELETE CASCADE? Или они будут мешать?

  2. Нужно ли говорить <%@page contentType="text/html" pageEncoding="UTF-8"%> в каждом файле JSP? Могу ли я установить это как параметр конфигурации в web.xml как-нибудь вместо этого?

  3. Возможно ли, чтобы компилятор проверил для вас URL-адреса отображения сервлета и URL-адреса в JSP, или каким-то образом принудительно обеспечил их синхронизацию? Пример: в web.xml <url-pattern>/login</url-pattern> и в login.jsp: <c:url value="/loginn" /> (обратите внимание на дополнительные n).

  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
    }
    

без какого-либо веб-фреймворка?

Ответы [ 3 ]

2 голосов
/ 01 декабря 2009

4) <c:out value="${value}" /> выполняет экранирование XML, ${value} не

2 голосов
/ 01 декабря 2009
  1. Чтобы иметь правильную модель данных, да, вы должны.

  2. В конечном итоге вы можете использовать фильтр, который работает с HttpServeletResponse#setCharacterEncoding() и #setContentType(), но для простых страниц JSP я бы предпочел @page выше этого. При необходимости просто добавьте дополнительную строку в начало шаблона JSP в вашей IDE, чтобы вам не приходилось вводить его каждый раз.

  3. Нет. Это не ответственность компилятора.

  4. c:out экранирует сущности HTML, а EL в тексте шаблона - нет. Вам следует использовать 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! -->
    
  5. Конечно, есть лучший способ. Но так как вы не хотите использовать фреймворк, на этом все заканчивается. Я могу по крайней мере предположить, что ключ является 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;
    }
    
2 голосов
/ 01 декабря 2009

1. Нет, вам не нужно. Каскады управляются вашим провайдером JPA.

5.No. Либо напишите свои собственные служебные классы или структуру проверки, либо используйте существующий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...