Java学习中,对登陆的总结。

来源:互联网 发布:手机淘宝如何上传视频 编辑:程序博客网 时间:2024/06/10 05:51


在浏览器上登录到学生系统,实现记住用户和密码,再一次的登录时,可以不用输入,自动的登录。

  实现这个用到了,Filter过滤器,使用Filter时会需要对配置文件做配置。Cookie一次会话的记录账户和密码的东西。

  首先,登录页面login.jsp

  因为需要提交数据,交给后台处理操作,所以使用了form表单。




Form表单的action=”/StuMan/LoginServlet”是登录时提交的数据的给的服务器,服务器LoginServlet对数据进行获取和响应的处理操作,LoginServlet前的是项目工程名。Method=”post”是提交的时的保密方式提交。


自动登录的输入标签需要注意:


<input type=”checkbox” name=”auto” value=”auto”/>自动登录<br/>


需要注意,Loginservlet在通过request.getParameter(“auto”)这括号里的auto要和<imput>里的name=”auto”一样。


 


其次,是LoginServlet,创建这个类是用fileàNewàservlet



   //设置浏览器请求的信息编码

 request.setCharacterEncoding("utf-8");

//设置服务器响应给浏览器的信息编码

 response.setContentType("text/html;charset=utf-8");


 


   //获取login.jspform提交的信息

   Stringname =request.getParameter("studentName");

   Stringpassword =request.getParameter("password");

   Stringauto =request.getParameter("auto");


 


//将获得的request数据放到cookie

   Cookiecookie =new Cookie("student",name+"&"+password);

  cookie.setPath(request.getContextPath());


//获取数据库的学生名和密码.

   StudentDaostuDaoImp=new StudentDaoImp();

   Studentstu=stuDaoImp.findOne(name,password);


注:New Cookie(key,value); value是值,namepassword作为值存放给cookie对象,key是键,这个名字可以自己任取,可看作对值个一个标识统称。当要取出值时,就可以通过key来得到相应的value


Cookie[] cookie=request.getCookies();是得到多个的cookiekey用数组存放,然后在遍历去得值。


得到数据库里的学生和密码,用来和在浏览器上得到的学生名和密码,相比较判断,如果用户在浏览器上输入的信息在数据库是存在的,就可以登录,否则不可以登录。


 


   if(auto!=null) {

     cookie.setMaxAge(60);

   }else {

     cookie.setMaxAge(0);

   }

   response.addCookie(cookie);

判断auto是否有值,有的话设置cookie对象保存的时间60秒,否则立即销毁。addCookie(cookie);将登录成功,将用户名,密码给cookie添加保存。


 


//判断获得的表单内容

   intflag=0;//标志,使用标志为后面的选择switch做准备

   

   if(stu!=null) {

     flag=0;

   }else {

     flag=1;

   }

//对上面登录时情况的处理

   switch(flag){

   case 0:     request.getSession().setAttribute("stuName",name);

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

  break;

case 1:

        //提示账户和密码错误,3秒后返回到登陆

     response.getWriter().write("账户和密码输入错误3秒后跳回到登陆页面");

     response.setHeader("refresh","3;url=/StuMan/login.jsp");

     break;

     

   }


 


再是,过滤器的使用,创建àfileàNewàFilteràLoginFilter过滤器就可创建了。


要使用过滤器还得在web.xml配置它。


  1. web.xml配置


<filter>

 <filter-name>auto</filter-name>

 <filter-class>com.filter.servlet.LoginFilter</filter-class>

 </filter>

 <filter-mapping>

 <filter-name>auto</filter-name>

 <url-pattern>/login.jsp</url-pattern>

 </filter-mapping>


注:<filter-name>上下两个需要一样。


<filter-class>LoginFilter在项目下的路径。


<url-pattern>是需要过滤的页面。注意login.jsp前有/


b.LoginFilter


publicvoid doFilter(ServletRequestarg0, ServletResponsearg1, FilterChainchain)throws IOException, ServletException {

   

   

   HttpServletRequestrequest =(HttpServletRequest)arg0;

   HttpServletResponseresponse=(HttpServletResponse)arg1;

   Cookie[]cookie=request.getCookies();

 

   

   if(cookie!=null) {

     for (Cookiecookie2 :cookie) {

        Stringname=cookie2.getName();

//判断之前存的student的名和这次获得的name值是否一样。一样就进一步的获取cookievalue值,否则,就拦截,让他去先登录。

        if("student".equals(name)) {

          Stringvalue=cookie2.getValue();

//因有多个值,所以用数组存放,按之前和多个用户值的“&”的连接,现在就以”&”分割。

          String[]arr=value.split("&");

          

          //获取数据库的学生名和密码.

          StudentDaostuDaoImp=new StudentDaoImp();

//根据得到的学生名和密码去数据库查学生是否存在。不存在就拦截,让他去登录页面登陆。

          Studentstu=stuDaoImp.findOne(arr[0],arr[1]);

          //判断学生名字和密码是否正确

          if(stu!=null) {

        //将名字存放在共享域,方便其他地方用到。  request.getSession().setAttribute("stuName",arr[0]);

//          request.getSession().setAttribute("password", arg1);

   //放行登录页面login.jsp直接重定向到了成功登陆的页面loginSuccess.jsp     response.sendRedirect(request.getContextPath()+"/loginSuccess.jsp");

          }else {

            chain.doFilter(arg0,arg1);

          }

        }else {

          chain.doFilter(arg0,arg1);

        }

     }

     

   }else {

     chain.doFilter(arg0,arg1);

   }

 }


注:HttpServletRequestrequest =(HttpServletRequest) arg0;


  HttpServletResponse response=(HttpServletResponse)arg1;


强制转化类型。


Cookie[]cookie=request.getCookies();


获取这次的cookie




原创粉丝点击