我正在学习java并尝试将一些变量从servlet传递到jsp页面。这是来自servlet页面的代码
@WebServlet("/Welcome")
public class WelcomeServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
HttpSession session = request.getSession();
session.setAttribute("MyAttribute", "test value");
// response.sendRedirect("index.jsp");
RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
dispatcher.forward(request, response);
}
}
简单的jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My Index page</title>
</head>
<body>
Index page
<br />
<%
Object sss = request.getAttribute("MyAttribute");
String a = "22";
%>
<%= request.getAttribute("MyAttribute"); %>
</body>
</html>
无论我在jsp上做什么都是空的。
这个简单的代码出了什么问题?
答案 0 :(得分:8)
如果请求不是会话,你就会得到。
应该是
session.getAttribute("MyAttribute")
我建议您使用JavaServer Pages Standard Tag Library或Expression Language代替Scriplet
,这样更易于使用且不易出错。
${sessionScope.MyAttribute}
或
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:out value="${sessionScope.MyAttribute}" />
您也可以尝试${MyAttribute}
,${sessionScope['MyAttribute']}
。
了解更多
答案 1 :(得分:3)
您在会话中设置了一个属性。您必须从会话中检索它:
Object sss = session.getAttribute("MyAttribute");
由于您正在分派请求,因此您实际上不需要会话。您可以在servlet中的请求对象中设置该属性:
request.setAttribute("MyAttribute", "test value");
然后阅读它,因为你已经在JSP中做了。
答案 2 :(得分:3)
你应该避免使用scriptlet,因为它们是HTML中的java代码,它们破坏了MVC模式,它们很丑,很奇怪并且已被弃用。
简单地替换:
<%
Object sss = request.getAttribute("MyAttribute");
String a = "22";
%>
只需使用 EL ${MyAttribute}
但是如果你想坚持使用scriptlet,你应该从适当的范围中获取属性session
。