在将值从 Servlet 发送到客户端 JSP 时获取 null [重复]
Posted
技术标签:
【中文标题】在将值从 Servlet 发送到客户端 JSP 时获取 null [重复]【英文标题】:Getting null on sending values from Servlet to Client-side JSP [duplicate] 【发布时间】:2019-01-17 18:48:40 【问题描述】:我正在尝试一个简单的示例,将值从 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>
【问题讨论】:
您正在设置属性并获取参数。尝试在你的 jsp 中获取属性。 我什至尝试过,但它再次显示为 null @DanielBarbarian 所以您使用的是request.getAttribute("myname")
,但这仍然为空?您是否正在向您的 servlet 发出 post 请求?
您确定您正在向该 servlet 发出 POST 请求,而不是直接进入浏览器中的 jsp 页面?
试试localhost:8080/mypro/server1
。哦,将 servlet 代码中的 doPost
更改为 doGet
。
【参考方案1】:
你做的不好。
首先你要混合属性和参数。它们是不同的动物。参数来自客户端,由 servlet 容器设置一次。属性是协作元素(过滤器、servlet 和 JSP 页面)用于传递数据的对象。
所以你至少应该阅读JSP中的属性:
<% String (String) s=request.getAttribute("myname");%>
您必须将该属性强制转换为 String
,因为 getAttribute
返回一个 Object
。
但这还不是全部。 Scriptlet 已被弃用数十年,仅应用于非常特殊的用例(如果有)。在这里,假设您有一个不错的 servlet 容器,您可以简单地使用 $
JSTL 自动属性:
<body>
Hello friends $myname
</body>
它更短、更简洁、更不容易出错。
在您的 cmets 之后,还有另一个可能的问题。仅当常见请求(除非您从表单发布)是 GET 请求并在 doGet
中处理时,才在您的 servlet 代码中显示对 doPost
的覆盖。如果您使用 GET 请求并且仅在 doPost
中设置属性,您的 JSP 将找不到它...
【讨论】:
现在它没有显示 null 但也没有显示该字符串的值。 成功了!我在 doGet 中编写了代码,更改为 getAttribute 并感谢其他提示 但它只显示在服务器页面上我想要它在客户端页面上。我该怎么办? @RahulChoubey:很抱歉,我听不懂。客户页面是什么意思? JSP 由服务器容器翻译成真正的 servlet,因此它只能存在于服务器端 Web 应用程序中【参考方案2】:"myname" 你设置为 request.setAttribute
所以,你可以检索如下:
<% String s=(String) request.getAttribute("myname");%>
【讨论】:
仍然为空以上是关于在将值从 Servlet 发送到客户端 JSP 时获取 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 <a href> 将值从 jsp 传递到 servlet