web实现登录注册功能视频

web实现登录注册功能视频

public class InitServlet extends HttpServlet {


@Override

public void init() throws ServletException {

//创建一个集合,用户保存用户注册信息

List<User> list = new ArrayList<User>();

//将list保存到ServletContext作用域中

this.getServletContext().setAttribute("list", list);

}

老师,上面代码中:this.getServletContext().setAttribute("list", list);可以换成request.request.getSession().setAttribute("list", list);吗?请问session与ServletContext的区别,特别是作用域方面

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
提问者 慕圣2241928 2018-09-26 16:28:53

package com.imooc.servlet;


import java.io.IOException;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.imooc.domain.User;


/**

 *用户登录的Servlet

 */

public class LoginServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//接收数据

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

String username = request.getParameter("username");

String password = request.getParameter("password");

//校验用户是否正确

List<User> users = (List<User>) this.getServletContext().getAttribute("list");

for (User user : users) {

if(user.getName().equals(username)){

//用户名正确

if(user.getPassword().equals(password)){

//密码正确

//登录成功

//判断复选框是否勾选

String remember = request.getParameter("remember");

if("true".equals(remember)){

//完成记住用户名功能

Cookie cookie = new Cookie("username", user.getName());

//设置路径和有效时间

cookie.setPath("/reg_login_mvc");

//设置有效时间

cookie.setMaxAge(60*60*24);//保存24小时

//将cookie写回浏览器

response.addCookie(cookie);

}

//将用农户信息保存到session中

request.getSession().setAttribute("user", user);

response.sendRedirect(request.getContextPath()+"/success.jsp");

return;

}

else {

request.setAttribute("err", "密码错误");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

}else {

request.setAttribute("msg", "用户名不存在");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

}

}



protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

doGet(request, response);

}


}


老师,发了

  • 同学只在其中一个重定向加了return呀,其他的转发后边也要加哦。你的代码是放在for循环里的,如果不加return,就会再次执行转发或重定向,就会报错了。要把这三个重定向和转发后边都写上return。
    2018-09-26 16:52:43
  • 提问者 慕圣2241928 回复 好帮手慕阿莹 #2
    老师,这原理是为啥呀,不能连续转发或者重定向吗?,还有就是我为啥不可以用break跳出循环呢?当时我把return改为break也报这个错呀,那么请问老师这是为啥呀
    2018-09-27 21:44:15
  • 好帮手慕阿莹 回复 提问者 慕圣2241928 #3
    不能连续转发或重定向的。建议同学使用return,使用return,执行到后会跳出该方法,以避免再次执行到转发或重定向报错。
    2018-09-28 09:26:00
提问者 慕圣2241928 2018-09-20 17:36:13

老师,我在第二次注册,然后登录新注册的账号时出现错误如下:

http://img1.sycdn.imooc.com//climg/5ba3692000018c9709770183.jpg

登录代码如下:

http://img1.sycdn.imooc.com//climg/5ba369750001801f10320574.jpg

http://img1.sycdn.imooc.com//climg/5ba369850001ce3a08270294.jpg

在网上百度了一下,说是在提交之前我改变了response,可是看了一下,好像没有呀,老师,您看看这是为啥吧

  • 这个错误有可能是之前你执行过重定向,现在又接着执行引起的,在你的重定向和转发代码后都写一下return看看是否能解决这个问题。祝学习愉快!
    2018-09-21 09:22:06
  • 提问者 慕圣2241928 回复 好帮手慕珊 #2
    老师,加了return没有用呀
    2018-09-25 11:17:50
  • 好帮手慕阿莹 回复 提问者 慕圣2241928 #3
    同学是在哪里加的的return呢?建议同学把 转发和重定向等代码,放到for循环的外边。
    2018-09-25 13:45:54
好帮手慕阿莹 2018-09-20 14:12:26

这里的this.getServletContext().setAttribute("list", list); 不可以被换成request.getSession().setAttribute("list", list);

这里是想保存注册的所有用户,如果用request.getSession().setAttribute("list", list); 去存的话,当这个用户退出的时候, 存进去的list就没有了。之前所有注册的信息就会丢失了

可以理解为,session 的作用域是一个用户从登陆到退出所有的信息可以存在这个session里

ServletContext 的作用域是从服务器启动到结束所有的信息可以存在这个里边。

而这里我们要存的是所有注册的用户的信息。所以我们要存在ServletContext 域里。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕圣2241928 #1
    老师,还是不大懂,用户退出指的是将工程移出tomcat吗?如果是这样的话,ServletContext中的信息也会丢失吧,还有就是session,前面老师不是说session是所有页面都可以访问的空间吗,那这样不是可以用了呀
    2018-09-20 15:11:30
  • 提问者 慕圣2241928 #2
    老师,您说的退出具体指的是啥呀,刚刚我试了一下,发现只要我在eclipse里面重新开始tomcat,之前存的用户注册信息都没了呀,感觉和session作用域一样呀
    2018-09-20 15:15:24
  • 提问者 慕圣2241928 #3
    老师,在登录成后为了将用户名显示在success.jsp页面上,在LoginServlet中的代码如下: request.getSession().setAttribute("user", user); response.sendRedirect(request.getContextPath()+"/success.jsp"); 这里用的是session呀,所以我认为this.getServletContext().setAttribute("list", list);可以换成request.request.getSession().setAttribute("list", list);呀,而且感觉两者的作用域没啥区别呀,求老师解惑
    2018-09-20 15:26:27
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师