Web 实现登录注册功能

用户实体的创建---创建User
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.imooc.domain;

public class User {
    private String username;
    private String password;
    private String nickname;
    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 getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    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;
    }


}
初始化集合---new InitServlet
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 <servlet>
    <description></description>
    <display-name>InitServlet</display-name>
    <servlet-name>InitServlet</servlet-name>
    <servlet-class>com.imooc.servlet.InitServet</servlet-class>
    <load-on-startup>2</load-on-startup><!-- 在服务器启动的时候创建Servlet实例 -->
  </servlet>
  <servlet-mapping>
    <servlet-name>InitServlet</servlet-name>
    <url-pattern>/InitServlet</url-pattern>
  </servlet-mapping>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.imooc.servlet;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

import com.imooc.domain.User;

/**
 * 用户注册的初始化的Servlet类
 */
@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);
    }

}
表单当中的文件上传---知识点
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<!-- 
        文件上传的条件
        * 表单必须是post提交方式(get有大小的限制)
        * 表单中必须有文件上传项,文件上传项必须有name属性和值
            <tr>
                <td class="td1">上传头像</td>
                <td><input type="file" id="photo" name="upload"></td>
            </tr>
        * 表单的enctype属性必须设置为multipart/form-data
            <form action="/reg_login/RegistServlet" method="post" enctype="multipart/form-data">
     -->
1
2
3
4
    表单文件的上传需要用到的jar包
    (/reg_login/WebContent/WEB-INF/lib/commons-fileupload-1.2.1.jar
    /reg_login/WebContent/WEB-INF/lib/commons-io-1.4.jar):
     https://share.weiyun.com/5VAFwpj
RegistServlet
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.imooc.servlet;

import java.io.IOException;
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 org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * 用户注册的Servlet
 */
@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //数据的接收enctype接收方式要变化"apache"
        //文件上传的基本操作:
        //1.创建一个磁盘文件项工厂对象(fileupload组件当中的)
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        //2.创建一个核心解析类(解析从浏览器发送过来的请求)---和传统方式不一样(需要解析一下)
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);//就是上面创建的磁盘文件项工厂对象
        //3.解析request请求 从表单当中的标签name当中获取--->fileitem对象(upload里封装的对象),返回的是list集合
        //  List集合当中存放的是FileItem对象(每一个FileItem代表的就是页面当中的每一个表单项)
        //  username password nickname sex ... 都是一个
        servletFileUpload.parseRequest(request);//用这个核心类去解析request
        //4.遍历集合,获得每个FileItem,判断是表单项还是文件上传项

    }


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

}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.imooc.servlet;

import java.io.IOException;
import java.util.List;

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 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;

/**
 * 用户注册的Servlet---存在文件上传,使用fileupload组件
 */
@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //数据的接收enctype接收方式要变化"apache"
        //文件上传的基本操作:

        try {
            //1.创建一个磁盘文件项工厂对象(fileupload组件当中的)
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            //2.创建一个核心解析类(解析从浏览器发送过来的请求)---和传统方式不一样(需要解析一下)
            ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);//就是上面创建的磁盘文件项工厂对象
            //3.解析request请求 从表单当中的标签name当中获取--->fileitem对象(upload里封装的对象),返回的是list集合
            //  List集合当中存放的是FileItem对象(每一个FileItem代表的就是页面当中的每一个表单项)
            //  username password nickname sex ... 都是一个
            List<FileItem> list = servletFileUpload.parseRequest(request);
            //4.遍历集合,获得每个FileItem---判断是表单项还是文件上传项
            for (FileItem fileItem : list) {
                //判断是表单项还是文件上传项
                if (fileItem.isFormField()) {
                    //普通表单项
                    //接收表单项的参数的值
                    String name = fileItem.getFieldName();//获得表单项的name属性的值
//                  <tr>
//                      <td class="td1">用户名</td>
//                      <td><input type="text" class="input1" name="username"></td>
//                  </tr>
                    String value = fileItem.getString("UTF-8");//获得表单项的值---解决中文乱码的问题
                    System.out.println(name + "   " + value);
                }else {
                    //文件上传项
                    //文件上传的功能
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//用这个核心类去解析request


    }


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

}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.imooc.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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 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;

/**
 * 用户注册的Servlet---存在文件上传,使用fileupload组件
 */
@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //数据的接收enctype接收方式要变化"apache"
        //文件上传的基本操作:

        try {
            //1.创建一个磁盘文件项工厂对象(fileupload组件当中的)
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            //2.创建一个核心解析类(解析从浏览器发送过来的请求)---和传统方式不一样(需要解析一下)
            ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);//就是上面创建的磁盘文件项工厂对象
            //3.解析request请求 从表单当中的标签name当中获取--->fileitem对象(upload里封装的对象),返回的是list集合
            //  List集合当中存放的是FileItem对象(每一个FileItem代表的就是页面当中的每一个表单项)
            //  username password nickname sex ... 都是一个
            List<FileItem> list = servletFileUpload.parseRequest(request);
            //定义一个list集合,保存兴趣爱好数据
            List<String> hobbylist = new ArrayList<String>();
            //4.遍历集合,获得每个FileItem---判断是表单项还是文件上传项
            for (FileItem fileItem : list) {
                //判断是表单项还是文件上传项
                if (fileItem.isFormField()) {
                    //普通表单项
                    //接收表单项的参数的值
                    String name = fileItem.getFieldName();//获得表单项的name属性的值
//                  <tr>
//                      <td class="td1">用户名</td>
//                      <td><input type="text" class="input1" name="username"></td>
//                  </tr>
                    String value = fileItem.getString("UTF-8");//获得表单项的值---解决中文乱码的问题
                    System.out.println(name + "   " + value);
                    //接收复选框的数据
//                  <tr>
//                      <td class="td1">兴趣爱好</td>
//                      <td><label> 
//                          <input type="checkbox" name="hobby" value="篮球">篮球
//                          <input type="checkbox" name="hobby" value="足球">足球
//                          <input type="checkbox" name="hobby" value="排球">排球 
//                          <input type="checkbox" name="hobby" value="羽毛球">羽毛球
//                      </label></td>
//                  </tr>
                    if ("hobby".equals(name)) {//String name = fileItem.getFieldName();
                        String hobbyValue = fileItem.getString("UTF-8");
                        hobbylist.add(hobbyValue);
                        hobbyValue = hobbylist.toString().substring(1, hobbylist.toString().length() - 1);// [xxx,yyy] --> xxx,yyy
                        System.out.println(name + "  " + hobbylist);//打印ArryList
                    }
                }else {
                    //文件上传项
                    //文件上传的功能
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//用这个核心类去解析request


    }


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

}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
   /**
 * 用户注册的Servlet---存在文件上传,使用fileupload组件
 */
@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //数据的接收enctype接收方式要变化"apache"
        //文件上传的基本操作:

        try {
            //定义一个Map集合用于保存接收到的数据
            Map<String, String> map = new HashMap<String,String>();
            //1.创建一个磁盘文件项工厂对象(fileupload组件当中的)
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            //2.创建一个核心解析类(解析从浏览器发送过来的请求)---和传统方式不一样(需要解析一下)
            ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);//就是上面创建的磁盘文件项工厂对象
            //3.解析request请求 从表单当中的标签name当中获取--->fileitem对象(upload里封装的对象),返回的是list集合
            //  List集合当中存放的是FileItem对象(每一个FileItem代表的就是页面当中的每一个表单项)
            //  username password nickname sex ... 都是一个
            List<FileItem> list = servletFileUpload.parseRequest(request);
            //定义一个list集合,保存兴趣爱好数据
            List<String> hobbylist = new ArrayList<String>();
            //4.遍历集合,获得每个FileItem---判断是表单项还是文件上传项
            for (FileItem fileItem : list) {
                //判断是表单项还是文件上传项
                if (fileItem.isFormField()) {
                    //普通表单项
                    //接收表单项的参数的值
                    String name = fileItem.getFieldName();//获得表单项的name属性的值
//                  <tr>
//                      <td class="td1">用户名</td>
//                      <td><input type="text" class="input1" name="username"></td>
//                  </tr>
                    String value = fileItem.getString("UTF-8");//获得表单项的值---解决中文乱码的问题
                    System.out.println(name + "   " + value);
                    //接收复选框的数据
//                  <tr>
//                      <td class="td1">兴趣爱好</td>
//                      <td><label> 
//                          <input type="checkbox" name="hobby" value="篮球">篮球
//                          <input type="checkbox" name="hobby" value="足球">足球
//                          <input type="checkbox" name="hobby" value="排球">排球 
//                          <input type="checkbox" name="hobby" value="羽毛球">羽毛球
//                      </label></td>
//                  </tr>
                    if ("hobby".equals(name)) {//String name = fileItem.getFieldName();
                        String hobbyValue = fileItem.getString("UTF-8");
                        hobbylist.add(hobbyValue);
                        hobbyValue = hobbylist.toString().substring(1, hobbylist.toString().length() - 1);// [xxx,yyy] --> xxx,yyy
                        System.out.println(name + "  " + hobbylist);//打印ArryList
                        //将爱好的数据存入到Map集合当中
                        map.put(name, hobbyValue);
                    }else {
                        //非复选框的放入到Map集合当中
                        map.put(name, value);
                    }
                }else {
                    //文件上传项
                    //文件上传的功能
                }
            }
            System.out.println(map);
            //封装数据到User当中
            User user = new User();
            user.setUsername(map.get("username"));
            user.setPassword(map.get("password"));
            user.setNickname(map.get("nickname"));
            user.setSex(map.get("sex"));
            user.setHobby(map.get("password"));
            //将注册用户的信息存入到List集合当中:
            //将获得的ServletContext对象:先取出来集合,往里面添加user后,再放进去---再到InitServlet.java当中refactor toString
            List<User> userlist = (List<User>) this.getServletContext().getAttribute("list");
            userlist.add(user);
            for (User u : userlist) {
                System.out.println(u);
            }
            this.getServletContext().setAttribute("list", userlist);
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//用这个核心类去解析request


    }


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

}
文件上传名称不可以重复
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package com.imooc.utils;

import java.util.UUID;

public class UploadUtils {
    /*
     * 生成唯一的文件名;
     */
    public static String getUUIDFileName(String fileName) {

        return ;
    }

    public static void main(String[] args) {
        System.out.println(UUID.randomUUID());//7e7e6ff9-578e-499e-92ff-39d199d06092

    }

}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.imooc.utils;

import java.util.UUID;

public class UploadUtils {
    /*
     * 生成唯一的文件名;
     */
    public static String getUUIDFileName(String fileName) {
        // 将文件名的前面部分进行截取:xx.jpg  -->   .jpg
        int idx = fileName.lastIndexOf(".");//返回一个指定的字符串值最后出现的位置
        String extension = fileName.substring(idx);//拓展名
        String uuidFileName = UUID.randomUUID().toString().replaceAll("-", "") + extension;//
        return uuidFileName;
    }

    public static void main(String[] args) {
        System.out.println(getUUIDFileName("1.jpg"));//777b455a815b4eee87771f0568b29500.jpg

    }

}