zoukankan      html  css  js  c++  java
  • Java Web项目案例之---登录和注册(精华版)

    登录和注册(精华版)

    (一)实现功能

    1.使用cookie记录登录成功的用户名,用户选择记住用户名,则用户再次登录时用户名自动显示

    2.实现文件上传功能(上传文件的表单上传于普通的表单上传不同,必须是post,必须有value,enctype必须是multipart/form-data
    3.图片上传后的名称不能重复,使用随机生成的字符串(UUID)

    4.实现图片显示功能(使用相对路径),通过session存放的地址信息,显示在页面中

    5.使用session存放用户信息,在整个会话中都可以调用session中的信息

    (二)页面显示

     

    (三)代码实现

     

    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>
    
      <display-name>Archetype Created Web Application</display-name>
    
    
    
      <servlet>
    
        <servlet-name>ts</servlet-name>
    
        <servlet-class>servlet.InitServlet</servlet-class>
    
        <load-on-startup>1</load-on-startup>
    
      </servlet>
    
      <servlet-mapping>
    
        <servlet-name>ts</servlet-name>
    
        <url-pattern>/y</url-pattern>
    
      </servlet-mapping>
    
    
    
    </web-app>

    pom.xml(配置)

    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    
    <dependency>
    
      <groupId>commons-fileupload</groupId>
    
      <artifactId>commons-fileupload</artifactId>
    
      <version>1.3.1</version>
    
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    
    <dependency>
    
      <groupId>javax.servlet</groupId>
    
      <artifactId>javax.servlet-api</artifactId>
    
      <version>3.1.0</version>
    
      <scope>provided</scope>
    
    </dependency>

    User.java

    package entity;
    
    
    
    public class User {
    
        private String username;
    
        private String password;
    
        private String sex;
    
        private String hobby;
    
        private String path;
    
    
    
        public String getUsername() {
    
            return username;
    
        }
    
    
    
        public void setUsername(String username) {
    
            this.username = username;
    
        }
    
    
    
        public String getPassword() {
    
            return password;
    
        }
    
    
    
        public void setPassword(String password) {
    
            this.password = password;
    
        }
    
    
    
        public String getSex() {
    
            return sex;
    
        }
    
    
    
        public void setSex(String sex) {
    
            this.sex = sex;
    
        }
    
    
    
        public String getHobby() {
    
            return hobby;
    
        }
    
    
    
        public void setHobby(String hobby) {
    
            this.hobby = hobby;
    
        }
    
    
    
        public String getPath() {
    
            return path;
    
        }
    
    
    
        public void setPath(String path) {
    
            this.path = path;
    
        }
    
    }

    InitServlet.java

    package servlet;
    
    
    
    import entity.User;
    
    
    
    import javax.servlet.ServletContext;
    
    import javax.servlet.ServletException;
    
    import javax.servlet.annotation.WebServlet;
    
    import javax.servlet.http.HttpServlet;
    
    import java.util.ArrayList;
    
    import java.util.List;
    
    
    
    @WebServlet("/InitServlet")
    
    public class InitServlet extends HttpServlet {
    
        @Override
    
        public void init() throws ServletException {
    
            //创建一个List集合用于存放用户信息
    
            List<User> list=new ArrayList<User>();
    
            //将List集合中的信息保存到ServletContext中
    
            this.getServletContext().setAttribute("list",list);
    
        }
    
    }

    LoginServlet.java

    package servlet;
    
    
    
    import entity.User;
    
    import org.apache.commons.fileupload.FileItem;
    
    import org.apache.commons.fileupload.FileUploadException;
    
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    import util.UploadUtil;
    
    
    
    import javax.servlet.ServletContext;
    
    import javax.servlet.ServletException;
    
    import javax.servlet.annotation.WebServlet;
    
    import javax.servlet.http.HttpServlet;
    
    import javax.servlet.http.HttpServletRequest;
    
    import javax.servlet.http.HttpServletResponse;
    
    import java.io.FileOutputStream;
    
    import java.io.IOException;
    
    import java.io.InputStream;
    
    import java.io.OutputStream;
    
    import java.util.ArrayList;
    
    import java.util.HashMap;
    
    import java.util.List;
    
    import java.util.Map;
    
    
    
    @WebServlet("/LoginServlet")
    
    public class LoginServlet extends HttpServlet {
    
        @Override
    
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            //数据的接收
    
            //文件上传基本操作
    
            try {
    
                //定义一个Map集合存放接收到的数据
    
                Map<String,String> map=new HashMap<String,String>();
    
                //1.创建一个磁盘文件项工厂对象
    
                DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
    
                //2.创建一个核心解析类
    
                ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory);
    
                //3.解析request请求
    
                List<FileItem> list=servletFileUpload.parseRequest(req);
    
                //定义一个List集合,用于保存复选框中的值
    
                List<String> hobbyList=new ArrayList<String>();
    
                //4.遍历集合,获得每个FileItem,判断是表单项还是文件上传项
    
                String url=null;
    
                for(FileItem fileItem:list){
    
                    //判断是否是普通表单项
    
                    if(fileItem.isFormField()){
    
                        //接收表单项参数的值
    
                        String name=fileItem.getFieldName();
    
                        String value=fileItem.getString("UTF-8");
    
                        if("hobby".equals(name)){
    
                            //接收复选框的值
    
                            String hobbyvalue=fileItem.getString("UTF-8");
    
                            //将值存入hobbyList集合中
    
                            hobbyList.add(hobbyvalue);
    
                            hobbyvalue=hobbyList.toString().substring(1,hobbyList.toString().length()-1);
    
                            map.put(name,hobbyvalue);
    
                        }else{
    
                            map.put(name,value);
    
                        }
    
                    }else{
    
                        //文件上传项
    
                        //文件上传功能
    
                        //获得文件上传的名称
    
                        String fileName=fileItem.getName();
    
                        //通过工具获得唯一文件名
    
                        String uuidFileName= UploadUtil.getUUIDFileName(fileName);
    
                        //获得文件上传数据    输入流
    
                        InputStream is=fileItem.getInputStream();
    
                        //获得文件上传相对路径
    
                        String path=this.getServletContext().getRealPath("/upload");
    
                        //将输入流对接到输出流
    
                        url=path+"//"+uuidFileName;
    
                        OutputStream os=new FileOutputStream(url);
    
                        int len=0;
    
                        byte[] b=new byte[1024];
    
                        while((len=is.read(b))!=-1){
    
                            os.write(b,0,len);
    
                        }
    
                        is.close();
    
                        os.close();
    
                    }
    
                }
    
                User user=new User();
    
                user.setUsername(map.get("username"));
    
                user.setPassword(map.get("password"));
    
                user.setSex(map.get("sex"));
    
                user.setHobby(map.get("hobby"));
    
                user.setPath(url);
    
                List<User> userlist=(List<User>)this.getServletContext().getAttribute("list");
    
                userlist.add(user);
    
                System.out.println(user.getUsername()+","+user.getPassword()+","+user.getSex()+","+user.getHobby()+","+user.getPath());
    
                resp.sendRedirect("login.jsp");
    
            } catch (FileUploadException e) {
    
                e.printStackTrace();
    
            }
    
        }
    
    
    
        @Override
    
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            doPost(req, resp);
    
        }
    
    }

    LogonServlet.java

    package servlet;
    
    
    
    import entity.User;
    
    
    
    import javax.servlet.ServletException;
    
    import javax.servlet.annotation.WebServlet;
    
    import javax.servlet.http.*;
    
    import java.io.IOException;
    
    import java.util.List;
    
    
    
    @WebServlet("/LogonServlet")
    
    public class LogonServlet extends HttpServlet {
    
        @Override
    
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            doPost(req, resp);
    
        }
    
    
    
        @Override
    
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            String user=req.getParameter("user");
    
            String password=req.getParameter("password");
    
            String baocun=req.getParameter("baocun");
    
            List<User> list=(List<User>)this.getServletContext().getAttribute("list");
    
            for(User us:list){
    
                if(us.getUsername().equals(user)&&us.getPassword().equals(password)){
    
                    //判断是否记住用户名
    
                    if("true".equals(baocun)){
    
                        //是,则将用户名存入cookie中
    
                        Cookie cookie=new Cookie("user",user);
    
                        //在response中存入cookie
    
                        resp.addCookie(cookie);
    
                    }
    
                    //在session中存入用户信息
    
                    HttpSession session=req.getSession();
    
                    session.setAttribute("user",us);
    
                    req.getRequestDispatcher("/success.jsp").forward(req,resp);
    
                }
    
                else{
    
                    req.getRequestDispatcher("error.jsp").forward(req,resp);
    
                }
    
            }
    
    
    
        }
    
    }

    UploadUtil.java

    package util;
    
    
    
    import java.util.UUID;
    
    
    
    public class UploadUtil {
    
        //生成唯一的文件名
    
        public static String getUUIDFileName(String fileName){
    
            int idx=fileName.lastIndexOf(".");
    
            String extention=fileName.substring(idx);
    
            //生成随机字符串,避免文件名重复
    
            String uuidFileName= UUID.randomUUID().toString().replace("-","")+extention;
    
            return uuidFileName;
    
        }
    
    }

    index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <html>
    
    <head>
    
        <title>Title</title>
    
    </head>
    
    <body>
    
    <h2>注册</h2><a href="login.jsp">登录</a>
    
    <form action="LoginServlet" method="post" enctype="multipart/form-data">
    
    用户名:<input type="text" name="username"><br>
    
    密码:<input type="password" name="password"><br>
    
    性别:<input type="radio" name="sex" value="男"><input type="radio" name="sex" value="女"><br>
    
    爱好:<input type="checkbox" name="hobby" value="足球">
    
    <input type="checkbox" name="hobby"  value="篮球">
    
    <input type="checkbox" name="hobby"  value="武术">
    
    <input type="checkbox" name="hobby"  value="羽毛球"><br>
    
    上传头像:<input type="file" name="photo">
    
        <input type="submit" value="注册">
    
    </form>
    
    </body>
    
    </html>

    login.jsp

    <%--
    
      Created by IntelliJ IDEA.
    
      User: Administrator
    
      Date: 2019/7/25 0025
    
      Time: 下午 4:09
    
      To change this template use File | Settings | File Templates.
    
    --%>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <html>
    
    <head>
    
        <title>Title</title>
    
    </head>
    
    <body>
    
    <%!
    
        String uname;
    
    %>
    
    <%
    
        Cookie[] cookies=request.getCookies();
    
        for(Cookie cookie:cookies){
    
            if(cookie.getName().equals("user")){
    
                uname=cookie.getValue();
    
            }else{
    
                uname="";
    
            }
    
        }
    
    %>
    
    <h2>登录</h2><a href="index.jsp">注册</a>
    
    <form action="LogonServlet" method="post">
    
        用户名:<input type="text" name="user" value="<%=uname%>"><br>
    
        密码:<input type="text" name="password" ><br>
    
        <input type="checkbox" name="baocun" value="true">记住用户</input><br>
    
        <input type="submit" value="登录">
    
    </form>
    
    </body>
    
    </html>

    success.jsp

    <%@ page import="entity.User" %><%--
    
      Created by IntelliJ IDEA.
    
      User: Administrator
    
      Date: 2019/7/27 0027
    
      Time: 上午 10:40
    
      To change this template use File | Settings | File Templates.
    
    --%>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <html>
    
    <head>
    
        <title>Title</title>
    
    </head>
    
    <body>
    
    登录成功!
    
    <%
    
        //得到session中存放的user
    
        User user=(User)session.getAttribute("user");
    
        //得到文件名字
    
        int idx=user.getPath().lastIndexOf("//");
    
        String filename=user.getPath().substring(idx+1);
    
        System.out.println(filename);
    
    %>
    
    <img src="/upload/<%=filename%>">
    
    </body>
    
    </html>

    error.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <html>
    
    <head>
    
        <title>Title</title>
    
    </head>
    
    <body>
    
    登录失败!
    
    </body>
    
    </html>
     
  • 相关阅读:
    O365(世纪互联)SharePoint 之调查列表简单介绍
    O365(世纪互联)SharePoint 之使用列表库发布新闻
    O365(世纪互联)SharePoint 之使用Designer报错
    SharePoint 2016 配置向导报错
    sharePoint 2016 弃用和删除的功能
    O365(世纪互联)SharePoint 之站点个性化
    数据分析与数据挖掘概述
    scrapy框架系列 (5) Spider类
    scrapy框架系列 (4) Scrapy Shell
    scrapy框架系列 (3) Item Pipline
  • 原文地址:https://www.cnblogs.com/dyddzhp/p/11255685.html
Copyright © 2011-2022 走看看