Я новичок в J2EE и застрял в управлении сеансами. Согласно спецификациям, метод isNew() HttpSession возвращает true, если ранее не было создано идентификатор сеанса от клиента, хранящегося на сервере. Я выполнил следующий код, и метод isNew() не возвращает true даже при первом выполнении. До сих пор я пробовал следующие вещи:Обнаружение нового HttpSession
- Удалена история моего браузера (все .. Я пользуюсь Firefox).
- Создайте и запустите мое веб-приложение из Netbeans 7.3.1. В этом случае генерируется новый идентификатор сеанса, но метод isNew(), безусловно, не возвращает true.
- Перезагрузил компьютер (хотя и был глупым).
Мой вопрос: что мне делать, чтобы выполнить if (session.isNew()) {} блок в коде сервлета (включая любые настройки с браузером и что-то еще)? И что не так с моим кодом?
Вот мой код ниже ..
код для исходного вида :: index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Welcome to color selection page</h1>
<form method="POST"
action="NewPattern">
Select beer characteristics<br>
Color:
<select name="color" size="1">
<option value="light">light</option>
<option value="amber">amber</option>
<option value="brown">brown</option>
</select>
<br>
<input type="SUBMIT">
</form>
</body>
</html>
код для сервлета ::
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class NewServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
try {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NewServlet</title>");
out.println("</head>");
out.println("<body>");
if (session.isNew())
out.println("It is a new session. Session ID: " + request.getSession());
else
out.println("It is not a new session. Session ID: " + request.getSession());
out.println("<h1>Got your chosen color " + request.getParameter("color") + "</h1>");
out.println("</body>");
out.println("</html>");
}
finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
Код для DD: :
<?xml ...>
<web-app ...>
<servlet>
<servlet-name>ServletNew</servlet-name>
<servlet-class>NewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletNew</servlet-name>
<url-pattern>/NewPattern</url-pattern>
</servlet-mapping>
</web-app>
В основном вы используете неправильное решение для функционального требования, которое вы имели в виду. Вы не должны проверять, создан ли сеанс в текущем запросе. Вместо этого проверьте, установлен ли атрибут, а если нет, то он считается «новым» и затем устанавливает атрибут * this *, чтобы последующие запросы могли перехватывать его. – BalusC