Java 应为IllegalStateException,但正在从servlet容器获取答复
我正在尝试实践servlet的概念。我已经编写了一个示例代码,据我所知,它应该抛出一个非法状态异常。但是,我从servlet容器(ApacheTomcat7)得到了回复。有人能解释发生了什么事吗 提前谢谢 编辑:Java 应为IllegalStateException,但正在从servlet容器获取答复,java,servlets,Java,Servlets,我正在尝试实践servlet的概念。我已经编写了一个示例代码,据我所知,它应该抛出一个非法状态异常。但是,我从servlet容器(ApacheTomcat7)得到了回复。有人能解释发生了什么事吗 提前谢谢 编辑: import java.io.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; @WebServlet
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/SessionTest3")
public class SessionTest3 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("foo", "42");
session.setMaxInactiveInterval(0); //Invalidate session immediately.
String foo = (String) session.getAttribute("foo");
if (session.isNew()) { //should cause a runtime exception.
out.println("This is a new Session.");
} else {
out.println("Welcome back!");
}
out.println("Foo = " + foo);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这是HeadFirstServlets中给出的一个示例。我想,这是书中的一个错误,第249页。根据API,该方法永远不会使会话无效。这是不一致API的另一个例子
代码片段:
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/SessionTest3")
public class SessionTest3 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("foo", "42");
session.setMaxInactiveInterval(0); //Invalidate session immediately.
String foo = (String) session.getAttribute("foo");
if (session.isNew()) { //should cause a runtime exception.
out.println("This is a new Session.");
} else {
out.println("Welcome back!");
}
out.println("Foo = " + foo);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
以下是tomcat的API:
void setMaxInactiveInterval(int interval)
Specifies the time, in seconds, between client requests before the servlet
container will invalidate this session. A zero or negative time indicates
that the session should never timeout.
Parameters:
interval - An integer specifying the number of seconds
你现在明白为什么了吗?谢谢你的回复。它实际上是“返回值为零或更少表示会话将永远不会超时”。此方法没有返回值?对不起。我看到了getMaxInactiveInterval()的API。谢谢。这一定是HeadFirstServlets手册的勘误表,第249页。不用担心,很高兴我能帮上忙。我没有那本书,但我想知道这是否是版本控制问题?