Java 从Servlet向客户端JSP发送值时获取null
我正在尝试一个简单的示例,将值从servletJava 从Servlet向客户端JSP发送值时获取null,java,jsp,servlets,Java,Jsp,Servlets,我正在尝试一个简单的示例,将值从servletServlet1.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") pub
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页面中尝试以下代码
String s=(String) request.getServletContext().getAttribute("myname");
在jsp页面中尝试以下代码
String s=(String) request.getServletContext().getAttribute("myname");
您正在将“myname”设置为request.setAttribute
因此,您可以按如下方式检索:
<% String s=(String) request.getAttribute("myname");%>
您正在将“myname”设置为request.setAttribute
因此,您可以按如下方式检索:
<% String s=(String) request.getAttribute("myname");%>
你做的是坏事
首先,混合属性和参数。他们是不同的动物。参数来自客户端,由servlet容器设置一次。属性是协作元素(过滤器、servlet和JSP页面)用于传递数据的对象
因此,您至少应该阅读JSP中的属性:
<% String (String) s=request.getAttribute("myname");%>
它更短、更干净、更不容易出错
在您的评论之后,还有另一个可能的问题。当常见请求(除非您从表单发布)是GET请求并且在doGet
中处理时,您仅在servlet代码中显示对doPost
的覆盖。如果使用GET请求并仅在doPost
中设置属性,JSP将找不到它…您所做的是错误的
首先,混合属性和参数。他们是不同的动物。参数来自客户端,由servlet容器设置一次。属性是协作元素(过滤器、servlet和JSP页面)用于传递数据的对象
因此,您至少应该阅读JSP中的属性:
<% String (String) s=request.getAttribute("myname");%>
它更短、更干净、更不容易出错
在您的评论之后,还有另一个可能的问题。当常见请求(除非您从表单发布)是GET请求并且在
doGet
中处理时,您仅在servlet代码中显示对doPost
的覆盖。如果使用GET请求并仅在doPost
中设置属性,JSP将找不到它…您正在设置属性并获取参数。尝试在jsp中获取属性。我甚至尝试过,但它再次显示null@danielbararianso您使用的是request.getAttribute(“myname”)
,但仍然是null?您是否正在向servlet发出post请求?并且您确定正在向该servlet发出post请求,而不是直接进入浏览器中的jsp页面?请尝试localhost:8080/mypro/server1
。哦,然后将servlet代码中的doPost
更改为doGet
。您正在设置一个属性并获取一个参数。尝试在jsp中获取属性。我甚至尝试过,但它再次显示null@danielbararianso您使用的是request.getAttribute(“myname”)
,但仍然是null?您是否正在向servlet发出post请求?并且您确定正在向该servlet发出post请求,而不是直接进入浏览器中的jsp页面?请尝试localhost:8080/mypro/server1
。哦,然后将servlet代码中的doPost
更改为doGet
。再次获取null:(没有这两个选项都能工作。无论如何,感谢您获取null:(这两种方法都不起作用。不管怎样,谢谢直到得到null仍然得到null现在它没有显示null,但也没有显示该字符串的值。它起作用了!我用doGet编写代码,改为getAttribute,并感谢其他提示,但它只显示在服务器页面上,我想在客户端页面上显示它。我该怎么办?@RahulChoubey:对不起,b我不明白。你说的客户端页面是什么意思?JSP是由真正的servlet中的服务器容器翻译的,因此它只能存在于服务器端web应用程序中。现在它没有显示null,但也没有显示该字符串的值。它起作用了!我用doGet编写代码,改为getAttribute,并感谢其他提示它只显示在服务器页面上,我希望它显示在客户端页面上。我该怎么办?@RahulChoubey:对不起,我不明白。客户端页面是什么意思?JSP是由真正的servlet中的服务器容器翻译的,所以它只能存在于服务器端web应用程序中