我正在学习 Servlet 和 cookie,但我有一个误解。是否可以在不使用“new Cookie”的情况下创建 cookie?
我知道 cookie 是通过以下语句创建的:
Cookie ck = new Cookie("username",name);
下面的语句用于在客户端浏览器发送cookie:
response.addCookie(ck);
但是我找到了一个应用程序,它没有上面的语句,它在我的浏览器中创建了一个 cookie。如果我在代码中不使用“new Cookie”,那么当我创建新 session 时是否会创建 cookie?
这是代码:
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="Validate">
User: <input type="text" name="user" /><br/>
Password: <input type="password" name="pass" ><br/>
<input type="submit" value="submit">
</form>
</body>
</html>
验证.java
package servlet.httpses;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Validate
*/
@WebServlet("/Validate")
public class Validate extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Validate() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String name = request.getParameter("user");
String pass = request.getParameter("pass");
if(pass.equals("1234")) {
//creating a session
HttpSession session = request.getSession();
session.setAttribute("user", name);
response.sendRedirect("Welcome");
}
}
}
欢迎.java
package servlet.httpses;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Welcome
*/
@WebServlet("/Welcome")
public class Welcome extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Welcome() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String user = (String) session.getAttribute("user");
out.println("Hello " + user);
out.println("<br>Session ID in Request is from a Cookie: "
+ request.isRequestedSessionIdFromCookie());
out.println("<br> Session ID: " + session.getId());
out.println("<br> Creation Time: " + new Date(session.getCreationTime()));
out.println("<br>Last Accessed Time: " + new Date(session.getLastAccessedTime()));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
在这种情况下,cookie 是何时创建的?是否可以在不使用“new cookie”的情况下创建 cookie?
提前致谢!
最佳答案
您可以通过两种方式创建 cookie。
在服务器上创建 cookie 并将其发送到客户端
在客户端创建 cookie
当你使用new Cookie时,java创建一个cookie对象并发送给客户端,客户端保存cookie。
另一方面,您可以在 JavaScript 的帮助下使用一些数据创建 cookie。
关于java - Servlet 中的 cookie 是什么时候创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50888563/