我在映射到我的servlet的浏览器链接中打开,并期望显示传递的值。 但我所看到的是“无效”
的Servlet
public class TestServlet extends HttpServlet {
public TestServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("var", "a");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
JSP:
<%
String s1 = (String) session.getAttribute("var");
%>
<%= s1 %>
答案 0 :(得分:1)
问题是您在请求范围中设置属性,但是正在从会话范围中读取它。尝试替换此行:
request.setAttribute("var", "a");
这一个:
request.getSession().setAttribute("var", "a");
这样你就可以在两个地方引用会话范围。或者,您可以在JSP中使用request.getAttribute()
在两个位置使用请求范围。
答案 1 :(得分:0)
您可以直接更改
,而不是通过jsp页面中的会话范围访问该属性String s1 = (String) session.getAttribute("var");
到
String s1 = request.getAttribute("var");
或者如果您仍想通过会话范围访问它,您可以在servlet的会话范围中设置变量,例如:
Http session = request.getSession();
session.setAttribute("var","a");
那么你可以像在JSP页面中那样访问它,或者你可以简单地做David所说的:
request.getSession().setAttribute("var", "a");
无论哪种方式都可行。
答案 2 :(得分:0)
SERVLET部分:
String str = request.getParameter("str1");
request.setAttribute("str1", "hello, welcome!! how are you??");
getServletContext().getRequestDispatcher("/Demo.jsp").forward(request,response);
JSP部分(将包含在任何标记段落或文本框中等)
$ {STR}