Java 应为IllegalStateException,但正在从servlet容器获取答复

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

我正在尝试实践servlet的概念。我已经编写了一个示例代码,据我所知,它应该抛出一个非法状态异常。但是,我从servlet容器(ApacheTomcat7)得到了回复。有人能解释发生了什么事吗

提前谢谢

编辑:

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页。不用担心,很高兴我能帮上忙。我没有那本书,但我想知道这是否是版本控制问题?