我正在尝试一个简单的示例,将值从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>
答案 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");