在将值从 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java ajax 将值从 jsp 传递到 servlet

使用 <a href> 将值从 jsp 传递到 servlet

使用 <a href> 将值从 jsp 传递到 servlet

Java:如何将值从类/bean传递给servlet

如何在不刷新页面的情况下将值从 jsp 页面发送到数据库

JSP 将值从表传递到表单