Не удалось передать значение из сервлета в JSP

Код обновлен с помощью web.xml и конфигурации сервлета

Я пытаюсь переслать какое-то значение из моего сервлета в JSP, но когда я пытаюсь получить доступ к этому значению в JSP, выходных данных нет.

Вот моя форма:

<HTML>
<BODY>
<FORM METHOD=POST ACTION="servlet/NewServlet">
Enter Name: <Input type="text" name="name"/><br>
<P><INPUT TYPE=SUBMIT>
</FORM>

Вот мой Bean, который я использую для методов установки и получения:

package user;

    public class CompileClass {
    public String name;

    public void setName(String n){
            name=n;
        }

    public String getName(){
            return name;
        }
    }

Вот мой сервлет:

import java.io.*;
import javax.servlet.*;  
import javax.servlet.http.*;

import user.CompileClass;

public class NewServlet extends HttpServlet{

    public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String name1;

CompileClass c=new CompileClass();
name1=c.getName();
request.getSession().setAttribute("name1", name1);

request.getRequestDispatcher("../Result.jsp").forward(request, response);

    }
    }

И, наконец, вот моя страница JSP:

<%@ page import="java.net.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="java.util.ArrayList"%>

<jsp:useBean id="user" scope="request" class="user.CompileClass" />
<jsp:setProperty property="*" name="user"/>
<html>

  <body>

Name:
<br/>

<% request.getSession().getAttribute("name1");%>


  </body>
</html>

Это мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>NewServlet</servlet-name>
    <servlet-class>NewServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>NewServlet</servlet-name>
    <url-pattern>/servlet/NewServlet</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Мне все кажется хорошо. Но все же я не получаю никакого вывода на своей странице JSP. Помощь?


person Anurag    schedule 26.03.2011    source источник


Ответы (3)


Как значение из формы попадает в ваш Bean? Ты делаешь:

CompileClass c=new CompileClass();      //creates a new, empty instance
name1=c.getName();                      //gets the name from the empty 
                                        //instance (will be null)
request.setAttribute("name1", name1);   //sets 'name1' to null in the request

Возможно, вам повезет больше, если вы сделаете:

CompileClass c=new CompileClass();      //creates a new, empty instance
c.setName(request.getParameter("name"));//get the param and set it in the bean
name1=c.getName();                      //gets the name from the bean
request.setAttribute("name1", name1);   //sets 'name1' in the request

Хотя из структуры вашего кода кажется, что вы, вероятно, используете какую-то веб-инфраструктуру, которая, как вы ожидаете, автоматически заполнит Bean данными из запроса. Если это так, то вы можете обратиться к документации по конфигурации и использованию для вашего фреймворка, чтобы убедиться, что вы правильно его настроили и правильно используете.

Редактировать:

Также, пожалуйста, не делайте таких вещей, как:

<% request.getSession().getAttribute("name1");%>

Используйте это вместо этого:

${name1}

Редактировать 2:

Вы не развертываете свой сервлет в web.xml. Вам нужно настроить его, добавив что-то вроде:

<servlet>
  <servlet-name>newServlet</servlet-name>
  <servlet-class>user.NewServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>newServlet</servlet-name>
  <url-pattern>/name/*</url-pattern>
</servlet-mapping>

Затем вам нужно обновить HTML-код формы, чтобы форма отправлялась в сервлет, а не напрямую в JSP. Итак, что-то вроде:

<FORM METHOD=POST ACTION="name/submit">

person aroth    schedule 26.03.2011
comment
Я пробовал ваш модифицированный код, не работает. Также я удалил конструктор, а затем попытался, но это тоже не сработало. Это не веб-фреймворк. Просто общий план нашего веб-приложения, который мы разработали и пытаемся придерживаться этой структуры. - person Anurag; 26.03.2011
comment
@Anurag - Тогда вы также можете опубликовать свой файл web.xml? Предполагая, что все подключено правильно, приведенный выше код должен работать. - person aroth; 26.03.2011
comment
@Anurag - тогда это объясняет, что вы не развернули свой сервлет. Вам нужно добавить раздел конфигурации для вашего сервлета, например: <servlet> <servlet-name>nameServlet</servlet-name> <servlet-class>user.NewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>nameServlet</servlet-name> <url-pattern>/name/*</url-pattern> </servlet-mapping>, а затем установить action на вашем что-то вроде ACTION="name/submit", и тогда все будет хорошо. - person aroth; 26.03.2011
comment
@aroth Я обновил web.xml и добавил соответствующую конфигурацию. Я также обновил web.xml здесь. Также в index.jsp я изменил: <FORM METHOD=POST ACTION="servlet/NewServlet"> Но все равно на странице Result.jsp нет вывода :| Где я сейчас не прав? - person Anurag; 26.03.2011
comment
@Анураг - Трудно сказать. Пробовали ли вы добавить несколько вызовов System.out.println() в свой сервлет, чтобы убедиться, что он вызывается? Если это так, то, возможно, попробуйте использовать request.getRequestDispatcher("../Result.jsp").include(request, response); и посмотрите, будет ли это иметь значение. - person aroth; 27.03.2011
comment
@aroth Я удалил bean-компонент и страницу result.jsp и напрямую взял параметры из index.php, а также обработал и распечатал из сервлета. Теперь это работает. Спасибо за помощь. - person Anurag; 27.03.2011

Похоже, с прицелами беда. Самый простой способ исправить это заменить

request.setAttribute("name1", name1);

to

request.getSession().setAttribute("name1", name1);
person Stan Kurilin    schedule 26.03.2011
comment
Я попытался изменить вызов запроса с помощью сеанса, но это не сработало. - person Anurag; 26.03.2011
comment
Я попробовал все, что здесь указано. Но опять без выхода. Также я обновил код здесь. - person Anurag; 26.03.2011
comment
@Anurag - попробуйте включить вместо пересылки. - person Stan Kurilin; 27.03.2011
comment
@stas Я удалил bean-компонент и страницу result.jsp и напрямую взял параметры из index.php, а также обработал и распечатал из сервлета. Теперь это работает. Спасибо за помощь в любом случае. - person Anurag; 27.03.2011
comment
@Стас index.jsp мой плохой :| Я имел в виду начальную форму JSP - person Anurag; 27.03.2011

используйте класс RequestDispatcher...

person Mazhar    schedule 20.03.2014
comment
Прочитай вопрос, вот что он сделал: request.getRequestDispatcher("../Result.jsp").forward(request, response); - person Erwin Bolwidt; 20.03.2014
comment
вместе с диспетчером запросов мы можем передавать значения только на следующую страницу. то что он хочет.. - person Mazhar; 21.03.2014
comment
Если вы считали, что это так, то почему вы не объяснили это в своем ответе? - person Erwin Bolwidt; 21.03.2014