Java Web项目案例之---登录和注册(精华版)

摘要:
登录注册(精华版)(一)实现功能1。使用cookie记录成功登录的用户名,如果用户选择记住用户名,则当用户再次登录时将自动显示用户名2。文件上传功能的实现3。上传图像的名称不能重复,将使用随机生成的字符串4。实现图像显示功能,用户信息将通过会话5中存储的地址信息显示在页面上。使用会话来存储用户信息,您可以在整个会话中调用会话中的信息(II)页面显示(III)代码实现web.xml(configuration)˂!
登录和注册(精华版)
(一)实现功能

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

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

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

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

(二)页面显示

 Java Web项目案例之---登录和注册(精华版)第1张

Java Web项目案例之---登录和注册(精华版)第2张

Java Web项目案例之---登录和注册(精华版)第3张

(三)代码实现

 Java Web项目案例之---登录和注册(精华版)第4张

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>
 

免责声明:文章转载自《Java Web项目案例之---登录和注册(精华版)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇请求地址中含有特殊字符#时如何有效处理量化学习 | Tushare 基本面选股 (二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django【十七】权限管理与路径导航

1、url权限管理 设计表 1、设计表 系统一共有多少个路径; 有哪些用户使用; 用户在公司的角色; 对角色进行权限分配(什么样的角色可以访问什么样的路径); 2、往表中添加数据,分配角色权限 3、登录成功,设置session,并将该用户可以访问的url从表中取出保存在session中, 4、设置中间件rocess_re...

Jquery面试题整合

一、Jquery测试题 下面哪种不是jquery的选择器?(单选) A、基本选择器 B、后代选择器 C、类选择器 D、进一步选择器 考点:jquery的选择器 (C) 当DOM加载完成后要执行的函数,下面哪个是正确的?(单选) jQuery(expression, [context]) B、jQuery(html,[ownerDocument]) C、jQ...

C#编程总结(十)字符转码

C#编程总结(十)字符转码 为了适应某种特殊需要,字符需要根据规则进行转码,便于传输、展现以及其他操作等。 看看下面的转码,就知道他的用处了。 1、字符串转码 根据原编码格式与目标编码格式,完成转换。不过可能出现乱码哦。上一章已经介绍过了。 代码: /// <summary> /// 字符串编码转换...

Linux系统终端session保持服务工具-Tmux

Tmux是非常流行的终端复用软件,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机。相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。对于Tmux的使用,可以参考:Tmux终端复用详解 Tmux 可用于在一个终端窗口中运行多个终端会话...

springsession生成sessionid不一致问题解决

不废话,本人遇到的问题主要是两个不同的springboot版本,需要共享sessionid。 1.配置application #cookie作用域server.servlet.session.cookie.path=/server.servlet.session.cookie.max-age=-1server.servlet.session.cookie....

Django(一):从socket到MVC

一、socket的http套路 web应用本质上是一个socket服务端,用户的浏览器是一个socket客户端。socket处在应用层与传输层之间,是操作系统中I/O系统的延伸部分(接口),负责系统进程和应用之间的通信。 HTTP协议又称超文本传输协议。 1 //浏览器发送一个HTTP请求; 2 //服务器收到请求,根据请求信息,进行函数处理,生成一个H...