【问题标题】:Not able to pass value from servlet to JSP无法将值从 servlet 传递到 JSP
【发布时间】:2011-03-26 08:28:28
【问题描述】:

使用 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 页面上得到任何输出。帮忙?

【问题讨论】:

    标签: java jsp servlets javabeans


    【解决方案1】:

    表单的值如何进入您的 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 的 Web 框架。如果是这样,那么您可能需要查阅框架的配置和使用文档,以确保您已正确设置并正确使用它。

    编辑:

    另外,请不要这样做:

    &lt;% request.getSession().getAttribute("name1");%&gt;

    改用这个:

    ${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。所以像:

    &lt;FORM METHOD=POST ACTION="name/submit"&gt;

    【讨论】:

    • 我试过你修改的代码没有用。我也删除了构造函数,然后尝试了,但这也没有用。这不是网络框架。只是我们设计并试图坚持这种结构的网络应用程序的总体轮廓。
    • @Anurag - 那么你也可以发布你的web.xml 文件吗?假设一切都正确连接,上面的代码应该可以工作。
    • @Anurag - 这解释了它,你还没有部署你的servlet。您需要为您的 servlet 添加一个配置部分,例如:&lt;servlet&gt; &lt;servlet-name&gt;nameServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;user.NewServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;nameServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/name/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt;,然后将您的 action 设置为 ACTION="name/submit" 之类的东西,然后您就可以开始了。
    • @aroth 我更新了 web.xml 并添加了适当的配置。我还在这里更新了 web.xml。同样在 index.jsp 中我已经修改:&lt;FORM METHOD=POST ACTION="servlet/NewServlet"&gt; 但仍然在 Result.jsp 页面上没有输出:|我现在哪里错了?
    • @Anurag - 很难说。您是否尝试在您的 servlet 中添加一些 System.out.println() 调用来验证它是否被调用?如果是,那么也许可以尝试使用request.getRequestDispatcher("../Result.jsp").include(request, response); 看看是否会有所作为。
    【解决方案2】:

    看起来,就像范围有问题。修复它的最简单方法是替换

    request.setAttribute("name1", name1);
    

    request.getSession().setAttribute("name1", name1);
    

    【讨论】:

    • 我尝试使用会话更改请求调用,但没有成功。
    • 我尝试了这里指出的所有内容。但是又没有输出。我也在这里更新了代码。
    • @Anurag - 尝试包含而不是转发。
    • @stas 我删除了 bean 和 result.jsp 页面,并直接从 index.php 获取参数并从 servlet 处理和打印。现在它正在工作。无论如何感谢您的帮助。
    • @Stas index.jsp 我的错 :|我的意思是最初的 JSP 表单
    【解决方案3】:

    使用 RequestDispatcher 类...

    【讨论】:

    • 阅读问题,他就是这么做的:request.getRequestDispatcher("../Result.jsp").forward(request, response);
    • 与请求调度程序一起,我们可以将值传递到下一页。这就是他想要的..
    • 如果您认为是这样,那您为什么不在答案中解释呢?
    猜你喜欢
    • 2013-11-25
    • 2012-05-03
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多