关于在servlet中创建了cookie,但在jsp中无法读取到该cookie的问题(已解决)

//servlet中的代码
Cookie c=new Cookie(“userlogin”, ul.toString());//ul是一个实体类的实例,我重写了该类的toString()方法返回的将是”用户名,密码”的字符串
c.setMaxAge(60);
response.addCookie(c);
request.getRequestDispatcher(“../shopPage.jsp”).forward(request, response);//转发方式跳转至shopPage.jsp

//jsp中的代码
if(cookies!=null&& cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals(“userlogin”)){
userlogin=c.getValue();
String[] uLogin=userlogin.split(“,”);
username=uLogin[0];
password=uLogin[1];
}
====问题1====
在jsp中我想获取servlet中设置的cookie完成自动登录的功能,但是发现得不到name是”userlogin”的cookie,最后原因是:
在servlet中设置的cookie只在该servlet所在的目录及其子目录下有效,而很不幸要获取cookie的那个.jsp文件所在的目录不在其中,所以根本获取不到
解决方法:
在servlet中设置cookie时多加一句 c.setPath(“/”),这样这个cookie的有效范围就可以扩充到整个项目了(”/”代表项目根目录)
====问题2====
但是在给cookie设置了path后,页面转发到shopPage.jsp中还是没有得到cookie,不过第二次进入shopPage.jsp页面cookie就获取到了,这个是因为:
我在servlet中使用的是转发的方式来跳转到shopPage.jsp页面,转发是服务端的行为(即服务端向服务端发送请求),而对cookie的赋值只有等下一次客户端向服务端请求时才能生效,所以第一次使用request.getCookies();时servlet中设置的cookie还没生效,而第二次便可以获取到了
解决方法:
在servlet中使用重定向的方式跳转到shopPage.jsp页面
即:response.sendRedirect(“../shopPage.jsp”);//重定向是客户端行为哦!

最后代码:
//servlet中的代码
Cookie c=new Cookie(“userlogin”, ul.toString());
c.setMaxAge(60);
c.setPath(“/”);//此处添加了一句
response.addCookie(c);
response.sendRedirect(“../shopPage.jsp”);//此处改为重定向方式跳转至shopPage.jsp页面

//jsp中的代码
if(cookies!=null&& cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals(“userlogin”)){
userlogin=c.getValue();
String[] uLogin=userlogin.split(“,”);
username=uLogin[0];
password=uLogin[1];
}

参考资料:
1、http://blog.csdn.net/z69183787/article/details/17396227
2、http://bbs.csdn.net/topics/390067857 (看二楼和三楼的解析)

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
首先,需要在项目的src目录下创建一个application.properties文件,并在文件添加如下内容: ``` college=计算机学院 class=计算机科学与技术1班 ``` 然后,创建一个ReadPropertyServlet类,继承HttpServlet类,实现读取application.properties文件学院和班级信息的功能。代码如下: ``` import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ReadPropertyServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext(); InputStream is = context.getResourceAsStream("/WEB-INF/classes/application.properties"); Properties prop = new Properties(); prop.load(is); String college = prop.getProperty("college"); String clazz = prop.getProperty("class"); System.out.println("学院:" + college + ", 班级:" + clazz); } } ``` 接下来,需要实现利用cookie技术显示上次登录时间的功能。我们可以在登录成功后,在response设置一个名为“lastLoginTime”的cookie,值为当前时间。然后,在下次登录时可以从request获取这个cookie,并显示上次登录时间。代码如下: ``` import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if (username.equals("admin") && password.equals("admin")) { // 登录成功,设置cookie Cookie cookie = new Cookie("lastLoginTime", String.valueOf(System.currentTimeMillis())); response.addCookie(cookie); response.sendRedirect("index.jsp"); } else { // 登录失败,返回登录页面 response.sendRedirect("login.jsp"); } } } import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class IndexServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上次登录时间的cookie Cookie[] cookies = request.getCookies(); String lastLoginTime = null; if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("lastLoginTime")) { lastLoginTime = cookie.getValue(); break; } } } // 输出上次登录时间 if (lastLoginTime != null) { System.out.println("上次登录时间:" + lastLoginTime); } else { System.out.println("第一次登录"); } } } ``` 以上就是利用servletContext对象读取application.properties的学院与班级信息,并利用cookie技术显示上次登录时间的完整代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值