我对servlet很新,目前我在努力添加cookie。我相信这是我采用的模块化方法的结果,我构建了一个头实用程序类,它只是将所有头信息插入到servlet中,所以我想采用相同的方法添加cookie。
我还有一个信用验证器类,除了用户名和密码,验证它,然后返回有效/无效的响应。我认为这就是问题所在。在将用户名和密码传递给凭证验证器的登录表单中,我将表单操作指向凭证servlet,将表单方法作为帖子。
如果我想将表单中的值发送到另一个servlet,或者这样做,那么这样做会产生问题吗?
对于学校来说,这个项目的目标是严格使用servlet创建一个简单的网站,然后我们可以使用JSP来减轻痛苦。
我应该考虑另一种方法吗?当使用表单操作和方法时,是否可以使这些类在表单上执行各种功能?
感谢您提供任何帮助和指导。
最佳ë
答案 0 :(得分:13)
您可以向servlet发送请求,然后在需要时将请求转发给另一个servlet。
在您的情况下,验证后,您可以将结果存储在属性中,然后将控制权转移到另一个servlet。 (如果那是你想做的事)
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/urlToServlet");
dispatcher.forward(request, response);
这就是如何处理cookies。
创建和发送Cookie
Cookie userCookie = new Cookie("name", "value");
userCookie.setMaxAge(60*60*24*365); //Store cookie for 1 year
response.addCookie(userCookie);
从客户端读取Cookie
String cookieName = "somecookie";
Cookie[] cookies = request.getCookies();
if (cookies != null)
{
for(int i=0; i<cookies.length; i++)
{
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName()))
{
doSomethingWith(cookie.getValue());
}
}
}
else
{
//do something else for firsttime visitors
}
您是否使用Cookie进行会话跟踪?
如果是,请使用HttpSession
。使用HttpSession,不需要直接使用cookie进行会话跟踪。
例如,在一个简单的登录页面中,这就是你要做的事情
HttpSession session = request.getSession();
session.setAttribute("username",username);
In other pages,
if(session.getAttribute("username")==null)
{
//forward to login page.
}
答案 1 :(得分:2)
您需要在HttpServletResponse中使用addCookie。我建议将java文档交给你,以便你可以看到servlet可用的内容。 http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#addCookie(javax.servlet.http.Cookie)