我有以下servlet
:
@WebServlet(name = "Placeholder",urlPatterns = {"/foo"})
public class Placeholder extends HttpServlet {
public static int numbers=5;
HttpSession session;
public void doGet (HttpServletRequest _req, HttpServletResponse _res) throws ServletException, IOException {
/* Refresh session attributes */
session = _req.getSession();
session.setAttribute("wee","ok");
}
}
使用以下JSP
:
<%@page language="java" contentType="text/html"%>
<%@page import="java.util.*, java.io.*"%>
<%@page import="main.java.Placeholder.*" %>
<html>
<body>
<b><% out.println("wee, printing from java");%></b>
<% out.println("<br/>Your IP address is " + request.getRemoteAddr());
String value = (String) session.getAttribute("wee");
out.println(value);%>
</body>
</html>
在第一次加载页面时,由于属性wee
被解析为null
,我确实错过了某处。如果我转到/foo
,我会清空一个页面,在我返回并重新加载servlet
的根页后,wee
实际上获得了它的值。
我的目标是简单地将servlet
中的变量打印到视图中,无需路由。不确定这里是否需要urlPatterns
,但如果没有这个小黑客,它现在不起作用。
UPD。好的,所以我发现无论我输入什么路线,我都需要在浏览器中添加一些字符,然后重新加载页面。
所以,根是0.0.0.0:8080/webapp
我需要访问,比如0.0.0.0:8080/webapp/qwerty
,请回到/webapp
并刷新页面。
如何通过访问/ webapp来实例化会话?
为什么我没有404或500访问一些随机的未来路由/webapp/randomstuff
?
答案 0 :(得分:1)
首先在web.xml
中将servlet配置为欢迎文件。如果web.xml
不存在,则在WEB-INF文件夹中手动创建它,并将内容放在其中。
<welcome-file-list>
<welcome-file>foo</welcome-file>
</welcome-file-list>
比你的servlet调度请求你的jsp让我们说你的jsp名称是index.jsp
而不是你的servlet代码:
@WebServlet(name = "Placeholder",urlPatterns = {"/foo"})
public class Placeholder extends HttpServlet {
public static int numbers=5;
public void doGet (HttpServletRequest _req, HttpServletResponse _res) throws ServletException, IOException {
HttpSession session = _req.getSession();
session.setAttribute("wee","ok");
_res.sendRedirect("index.jsp");
}
}
现在运行你的servlet,你会看到输出。 希望这能解决你的问题!