使用web.xml和Servlet配置更新代码
我正在尝试将一些值从我的servlet转发到JSP,但是当我尝试将该值访问到JSP时,没有输出。
这是我的表格:
<HTML>
<BODY>
<FORM METHOD=POST ACTION="servlet/NewServlet">
Enter Name: <Input type="text" name="name"/><br>
<P><INPUT TYPE=SUBMIT>
</FORM>
这是我用于setter和getter方法的Bean:
package user;
public class CompileClass {
public String name;
public void setName(String n){
name=n;
}
public String getName(){
return name;
}
}
这是我的servlet:
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页面上获得任何输出。帮助
答案 0 :(得分: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
虽然从您的代码结构来看,您似乎可能正在使用某些Web框架,您希望使用请求中的数据自动填充Bean。如果是这样,那么您可能需要查阅框架的配置和使用文档,以确保正确设置它并正确使用它。
编辑:
另外,请不要做以下事情:
<% request.getSession().getAttribute("name1");%>
请改用:
${name1}
编辑2:
您没有在web.xml
部署您的servlet。您需要通过添加以下内容来配置它:
<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,以便表单发布到servlet而不是直接发布到JSP。如下所示:
<FORM METHOD=POST ACTION="name/submit">
答案 1 :(得分:0)
看来,就像范围问题一样。最简单的解决方法是替换
request.setAttribute("name1", name1);
到
request.getSession().setAttribute("name1", name1);
答案 2 :(得分:-2)
使用RequestDispatcher类...