从Servlet向客户端JSP发送值时获取null

时间:2018-08-10 07:54:05

标签: java jsp servlets

我正在尝试一个简单的示例,将值从servlet Servlet1.java发送到客户端JSP页面client1.jsp

但是我变得空了 这是代码Server1.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.util.*;


@WebServlet("/server1")
public class Server1 extends HttpServlet {
private static final long serialVersionUID = 1L;

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

    String name="Rahul";
    request.setAttribute("myname",name);

    //Servlet JSP communication
    RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher("/client1.jsp");
    reqDispatcher.forward(request,response);

}
}

client1.jsp的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <% String s=request.getParameter("myname");%>
    Hello friends <%=s%>
</body>
</html>

3 个答案:

答案 0 :(得分:2)

你做的不好。

首先,您要混合属性参数。他们是不同的动物。参数是来自客户端的,由servlet容器设置一次。属性是协作元素(过滤器,Servlet和JSP页面)用于传递数据的对象。

因此,您至少应该阅读JSP中的属性:

<% String (String) s=request.getAttribute("myname");%>

您必须将属性强制转换为String,因为getAttribute返回Object

但这还不是全部。小脚本已弃用了数十年,仅应用于非常特殊的用例(如果有)。在这里,假设您有一个不错的servlet容器,则可以简单地使用${} JSTL自动属性:

<body>
    Hello friends ${myname}
</body>

它更短,更干净且更不易出错。

发表评论后,还有另一个可能的问题。当常见请求(除非从表单中发布)是GET请求并在doPost中处理时,才在servlet代码中显示doGet的替代。如果您使用GET请求,而仅在doPost中设置属性,则JSP将找不到它...

答案 1 :(得分:1)

您要设置为request.setAttribute的“ myname”

因此,您可以按以下方式进行检索:

<% String s=(String) request.getAttribute("myname");%>

答案 2 :(得分:-1)

在jsp页面中尝试以下代码

String s=(String) request.getServletContext().getAttribute("myname");