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