Сервлет в JSP всегда с нулевым значением - PullRequest
0 голосов
/ 28 мая 2018

Я только начал использовать JSP и Servlet, поэтому столкнулся с очень простой проблемой.Я пытаюсь сделать запрос от JSP к сервлету, где я устанавливаю параметр и затем перенаправляю ответ из сервлета обратно в jsp.Вот код из моего JSP:

<% String s = (String)request.getAttribute("name");
   out.println(s);
%>

Вот мой код из сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    try (PrintWriter out = response.getWriter()) {
        request.setAttribute("name", new String("aa"));
        this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
    }
}

Итак, в конце сервлет имеет значение, а мой jsp - нет,

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Попробуйте без писателя, вам не нужны два контекста записи для одного ответа.Вы также не используете его:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setAttribute("name", new String("aa"));
    this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
}
0 голосов
/ 28 мая 2018

Здесь вы уже объявили тип String, но вы также приведете его к типу String, это избыточно.

<% String s = (String)request.getAttribute("name");
   out.println(s);
%>

Также есть разница между <%= %> и <% %>.Если вы хотите вывести переменную в ваш jsp, используйте ту, которая равна (<%= %>).Вторая строка вашего кода скриптлета также выдаст ошибку.Код, который вы пишете в своем сервлете, не просто продолжается в JSP, это не то, как он работает.

если вы хотите вывести атрибут name, просто сделайте следующее:

<%= request.getAttribute("name") %>

Однако, начиная с 2010 года, скриптлеты не приветствуются (устаревшая технология). Вместо этого мы используем EL и JSTL.Вы должны иметь возможность просто вывести переменную следующим образом:

${name}

В вашем сервлете все, что вам нужно сделать, это:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  String name = "Jane"; //create a string
  request.setAttribute("name", name); //set it to the request

  RequestDispatcher rs = request.getRequestDispatcher("index.jsp"); //the page you want to send your value
  rs.forward(request,response); //forward it

}

РЕДАКТИРОВАТЬ

Вы спросили,

Есть ли способ вызвать сервлет, скажем, одним нажатием кнопки или что-то в этом роде?

Да, естьЕсть несколько способов сделать это, и это действительно зависит от того, как вы хотите его настроить.Вот простой способ запуска сервлета по нажатию кнопки.* (Предполагается, что сервлет сопоставлен с /Testing):

<a href="/Testing">Trigger Servlet<a>

Другой способ может быть с формой:

<form action="Testing" method="get">
<input type="hidden" name="someParameterName" value="you can send values like this">
<button type="submit">Do some magic</button>
</form>

Существует также AJAX (который включает в себя javascript).Но это довольно сложный процесс, и я не рекомендую делать это, пока вы не ознакомитесь с нормальным синхронным http поведением.

0 голосов
/ 28 мая 2018

Я думаю, вы должны вызвать метод диспетчера запросов, используя объект запроса.Вот как вы это делаете:

RequestDispatcher rs = request.getRequestDispatcher("index.jsp");
rs.forward(request,response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...