带新手玩转MVC——不讲道理就是干(下)

Posted zyx110

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带新手玩转MVC——不讲道理就是干(下)相关的知识,希望对你有一定的参考价值。

带新手玩转MVC——不讲道理就是干(下)

前言:废话不多说,直接开干

 

完整案例演示

 技术图片

技术图片

技术图片

 

 

 

 

 

案例代码

LoginServlet

package servlet;

import domain.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/*
* 用户登录的Servlet
* */
@WebServlet("/login")
public class LoginServlet extends HttpServlet 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        //接收数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //从ServletContext域中获得保存用户信息集合
        List<User> list = (List<User>) this.getServletContext().getAttribute("list");
        for (User user:list)
            //判断用户名是否正确
            if (username.equals(user.getUsername()))
                //判断密码是否正确
                if (password.equals(user.getPassword()))
                    //用户名密码都正确
                    //登录成功
                    //判断记住用户名复选框是否勾选
                    String remember = req.getParameter("remember");
                    if ("true".equals(remember))
                        //完成记住用户名的功能
                        Cookie cookie = new Cookie("username",username);
                        //设置有效路径
                        cookie.setPath("/login.jsp");
                        //设置有效时间
                        cookie.setMaxAge(60*60*24);
                        //将cookie回写到浏览器
                        resp.addCookie(cookie);
                    
                    //将用户的信息保存到Session中
                    req.getSession().setAttribute("user",user);
                    resp.sendRedirect("/success.jsp");
                    return;
                
            
        
        //登录失败
        req.setAttribute("msg","用户名或密码错误!");
        req.getRequestDispatcher("/login.jsp").forward(req,resp);

    

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        doGet(req, resp);
    

  

 

 

CookieUtils

package utils;



import javax.servlet.http.Cookie;



public class CookieUtils 

    public static Cookie findCookie(Cookie[] cookies,String name)

        if (cookies==null)

            //说明客户端没有携带Cookie

            return null;

        else 

            //说明客户端携带Cookie

            for (Cookie cookie:cookies)

                if (name.equals(cookie.getName()))

                    return cookie;

                

            

            return null;

        

    


  

 

 

 

success.jsp

<%@page import="domain.User"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>登录成功</title>

<link rel="stylesheet" href="./css/login.css">

</head>

<body>

   <%

      if(session.getAttribute("user")!=null)

         User user = (User)session.getAttribute("user");

         System.out.println(user.getPath());

         // 获得绝对路径最后一个\\的位置

         int idx = user.getPath().lastIndexOf("\\\\");

         // 获得文件上传的唯一文件名:

         String fileName = user.getPath().substring(idx+1);

   %>

   <div class="login">

      <div class="header">

         <h1>登录成功</h1>

      </div>

      <div class="content">

         <table align="center">

            <tr>

               <td align="center"><img src="/img/<%= fileName %>" /></td>

            </tr>

            <tr>

               <td align="center">欢迎<%= user.getNickname() %>,登录成功!</td>

            </tr>

         </table>



      </div>

   </div> 

   <%       

      else

   %>

   <div class="login">

      <div class="header">

         <h1>您还没有登录!请先去<a href="/login.jsp">登录</a>!</h1>

      </div>

   </div>

   <%    

      

   %>





</body>

</html>

  

 

 

 

特别说明

如果有朋友是按照上篇的代码一路敲过来的,这里有个问题,就是启动服务器后你必须先访问/initServlet去执行init()方法,否则你注册的信息将无法存储。

 

在这再给你教另外一种方法,就是在Web.xml中配置InitServlet,当服务器一启动,init()方法就立刻被执行,不用你再去手动访问了,操作过程如下:

第一步:找到web.xml,配置如下图所示的信息

 

 技术图片

 

 

<!DOCTYPEweb-appPUBLIC

 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

 "http://java.sun.com/dtd/web-app_2_3.dtd" >



<web-app>

    <servlet>

        <servlet-name>initServlet</servlet-name>

        <servlet-class>servlet.InitServlet</servlet-class>

        <load-on-startup>2</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>initServlet</servlet-name>

        <url-pattern>/initServlet</url-pattern>

    </servlet-mapping>

</web-app>

  

 

        

第二步:去掉@WebServlet(“/initServlet”)注解

 

 技术图片

 

 

好了,这样就完成了,现在已开启服务器,就可以直接访问注册页面进行注册了。

 

 

案例总结

 

写到这案例算是结束了,这里面用了MVC的设计模式,运用了JSP,Servlet里面的知识,有Web四大域对象的使用,参数的请求和接收,转发和重定向,集合的使用,还有Cookie和Session的使用,表单数据的接收,文件的上传,涉及的方面多,但不超纲,都是JavaSE中学过的部分,在这做个系统性的应用,个人认为此案例适合于初学者练手,希望能帮助到一些真正需要的朋友。

 

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

转载请说明出处

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,期待我们都有美好的明天!

支持我的朋友们记得点波推荐哦,您的肯定就是我进步的动力。

 

以上是关于带新手玩转MVC——不讲道理就是干(下)的主要内容,如果未能解决你的问题,请参考以下文章

爬取网站时请求被拒绝?scrapy轻松解决请求头设置!就是不讲道理

地图搜租房小程序不讲道理Hotfix...

和的时候一样,没有人可以赢我两次

怎样体面地讲道理?

卧槽!还讲不讲道理?刚入职,就劝我离职?

讲道理 凭什么打开就要去Microsoft Store查应用?