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>
Java Web项目案例之---登录和注册(精华版)的更多相关文章
- Java Web项目案例之---登录注册和增删改查(jsp+servlet)
登录注册和增删改查(jsp+servlet) (一)功能介绍 1.用户输入正确的密码进行登录 2.新用户可以进行注册 3.登录后显示学生的信息表 4.可以添加学生 5.可以修改学生已有信息 6.可以删 ...
- [Java.web]MVC 案例-开发用户模块(注册)
代码下载 生成后的 user.xml 路径在 X:\day09_user\WebRoot\WEB-INF\classes\users.xml 使用测试 在 day09 项目上右键 -> Run ...
- JAVA WEB项目开发案例精粹
http://www.blogjava.net/zongbao/archive/2012/07/24/383884.htmlJAVA WEB项目开发案例精粹.pdf main Alt + / => ...
- 使用MyEclipse搭建java Web项目开发
转自:http://blog.csdn.net/jiuqiyuliang/article/details/36875217 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成 ...
- Java web项目综合练习(Estore)
Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...
- 将Java Web项目部署到远程主机上
这里讲的是Java Web项目 第一步:购买主机,如果是大学生可以购买学生机,一个月9.9元,阿里云ECS服务器,自己选择不同的操作系统和镜像 ,我的选择 得到用户名和密码,可以进行ssh远程登录,登 ...
- 关于Maven打包Java Web项目以及热部署插件Jrebel的使用
Java Web/Eclipse/Maven/Tomcat 最近有个新项目是java web项目,记录一下,可能比较乱.虽然没接触过Java,但是eclipse还是用过的 初识项目 同事说,项目是ma ...
- 新手小白Linux(Centos6.5)部署java web项目(总)
一.准备 1.linux centos版本的相关命令操作,千万别找ubuntu的,好多命令都不一样,新手小白我傻傻不知道硬是浪费了一天的时间……(百度百科linux版本了解一下) 2.远程登录: P ...
- 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)
概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...
随机推荐
- 利用Maven, 搭建最简单的SpringMVC框架
本文介绍使用maven搭建SpringMVC最简单的框架程序过程,适合初学者上手. 文章下载
- Angular4.0从入门到实战打造在线竞拍网站学习笔记之二--路由
Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 路由 简介 接下来学习路由的相关知识 本来是不准备写下 ...
- 多线程与高并发(三)synchronized关键字
上一篇中学习了线程安全相关的知识,知道了线程安全问题主要来自JMM的设计,集中在主内存和线程的工作内存而导致的内存可见性问题,及重排序导致的问题.上一篇也提到共享数据会出现可见性和竞争现象,如果多线程 ...
- 【设计模式】行为型10中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern) 这里笔者完全参考了:http://www.runoob.com/design-pattern/mediator-pattern.html,案例精 ...
- 【朝花夕拾】Android自定义View篇之(一)View绘制流程
前言 转载请申明转自[https://www.cnblogs.com/andy-songwei/p/10955062.html]谢谢! 自定义View.多线程.网络,被认为是Android开发者必须牢 ...
- SSH不能连接并提示REMOTE HOST IDENTIFICATION HAS CHANGED
ssh连接报错: 解决: vi /root/.ssh/known_hosts 找到要连接的主机的ip,把它的那行所有信息删除(就是一行)
- 线性模型之LDA和PCA推导
线性模型之LDA和PCA 线性判别分析LDA LDA是一种无监督学习的降维技术. 思想:投影后类内方差最小,类间方差最大,即期望同类实例投影后的协方差尽可能小,异类实例的投影后的类中心距离尽量大. 二 ...
- 阿里巴巴 -- MySQL DBA 面试题
1.MySQL的复制原理以及流程 (1).先问基本原理流程,3个线程以及之间的关联: (2).再问一致性延时性,数据恢复: (3).再问各种工作遇到的复制bug的解决方法. 2.MySQL中myisa ...
- Hive入门(二)分区
1 基本概念 1.1 什么是分区 Hive查询中一般会扫描整个表内容,会消耗很多时间.有时候只需要查询表中的一部分数据,因此建表时引入了partition(分区)概念. 表中的一个 Partition ...
- Codeforces 760B:Frodo and pillows(二分)
http://codeforces.com/problemset/problem/760/B 题意:有n张床m个枕头,每张床可以有多个枕头,但是相邻的床的枕头数相差不能超过1,问第k张床最多能拥有的枕 ...