Javaweb要实现一个较为完整的程序,要有前台页面、后台和数据库数据。
我们在写注册与登录界面之前先了解一下Javaweb中比较重要的MVC模式
MVC本来是存在于Desktop程序中的,M(Model)是指数据模型,V(View)是指用户界面,C(Control)是控制器。
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
了解完MVC模式之后就可以开始对我们要实现的登录和注册功能进行分析了。
在进行分析时,通常是从显示层(视图层)开始从上往下分析。
首先我们应编写好登录与注册页面,接着实现登录与注册以及其他相关功能的方法,然后调用方法,最后连接数据库并将前台数据传入数据库。
分析好后开始正式实现功能,实现功能时通常是从数据库开始从下往上实现
【字符集设为utf8】
建立一个file文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_user
user=root
password=123456
package com.xinhua.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 使用普通java类读取外部资源文件
*
*/
public class ReadFile {
public static Properties readFile(String Path){
//利用类加载器读取文件
InputStream in = ReadFile.class.getClassLoader().getResourceAsStream(Path);
Properties p = new Properties();
try {
p.load(in);
String url = (String) p.get("url");
System.out.println(url);
} catch (IOException e) {
e.printStackTrace();
}
return p;
}
}
import java.sql.*;
import java.util.Properties;
/**
* 封装对数据库的连接等
*/
public class DButils {
public static Connection getConnection(){
Properties properties = ReadFile.readFile("File/db.properties");
String driver = (String)properties.get("driver");
String url = (String)properties.get("url");
String user = (String)properties.get("user");
String password = (String)properties.get("password");
try {
Class.forName(driver);
Connection connection=DriverManager.getConnection(url,user,password);
return connection;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//关闭数据库连接
public static void closeDB(Connection conn, PreparedStatement ps, ResultSet rs){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
import com.xinhua.domain.User;
import com.xinhua.utils.DButils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DaoUser {
//用户登录
public boolean findUserByUsernameAndPassword(String username,String password){
Connection connection =null;
String sql =null;
PreparedStatement ps =null;
ResultSet rs =null;
Boolean flag=false;
try{
connection = DButils.getConnection();
sql = "SELECT id FROM USER WHERE username=? AND password=?";
ps = connection.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs = ps.executeQuery();
while (rs.next()){
if (rs.getInt(1)>0){
flag=true;
}
}
}catch (SQLException e){
e.printStackTrace();
}
DButils.closeDB(connection,ps,rs);
return flag;
}
//查询用户
public static Boolean foundUserByUsername(String username){
Connection connection =null;
String sql =null;
PreparedStatement ps =null;
ResultSet rs =null;
Boolean flag=false;
try {
connection = DButils.getConnection();
sql = "SELECT id FROM USER WHERE username=?";
ps = connection.prepareStatement(sql);
ps.setString(1,username);
rs = ps.executeQuery();
while (rs.next()){
if (rs.getInt(1)>0){
flag=true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
DButils.closeDB(connection,ps,rs);
return flag;
}
public static int addUser(User user){
//添加用户
Connection conn = null;
String sql = null;
int i =0;
PreparedStatement ps =null;
try {
conn = DButils.getConnection();
sql="insert into user(username,password,gender,age,hobbies,remark) values(?,?,?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1,user.getUsername());
ps.setString(2,user.getPassword());
ps.setString(3,user.getGender());
ps.setInt(4,user.getAge());
ps.setString(5,user.getHobbies());
ps.setString(6,user.getRemark());
i = ps.executeUpdate();
return i;
} catch (SQLException e) {
e.printStackTrace();
}
DButils.closeDB(conn,ps,null);
return i;
}
}
import com.xinhua.dao.DaoUser;
import com.xinhua.domain.User;
public class UserService {
/**
* 用户登录
*/
public boolean login(String username,String password){
DaoUser daoUser = new DaoUser();
boolean flag = daoUser.findUserByUsernameAndPassword(username,password);
return flag;
}
/**
* 注册用户
* 处理User对象的相关业务
*/
public int register(User user){
/**
* 注册用户
* 0(表示没有注册成功),1(表示注册成功),2(表示该用户一存在)。
*/
DaoUser daoUser = new DaoUser();
boolean flag = DaoUser.foundUserByUsername(user.getUsername());
int state=0;
if (flag){
state=2;
}else {
int i = DaoUser.addUser(user);
if (i>0){
state=1;
}else {
state=0;
}
}
return state;
}
}
import com.xinhua.domain.User;
import java.util.HashMap;
import java.util.Map;
/**
* 用户注册验证
*/
public class ValidateDome {
public static Map validateUser(User user){
Map error = new HashMap<>();
System.out.println(user.getUsername()+"11111");
System.out.println(user.getUsername()==null||"".equals(user.getUsername().trim()));
if (user.getUsername()==null||"".equals(user.getUsername().trim())){
error.put("username","用户名不能为空");
}else if (!(user.getUsername().matches("\\w{6,18}"))){
error.put("username","用户名不合法");
}
if (user.getPassword()==null||"".equals(user.getPassword().trim())){
error.put("password","密码不能为空");
}else if (!(user.getPassword().matches("[a-zA-Z0-9]{6,18}"))){
error.put("password","密码不合法");
}
return error;
}
}
/**
* 数组转字符串工具类
*/
public class ArrayToString {
public static String arrayToString(String[] arr) {
String arrayString = "";
for (int i = 0; i
import java.util.Date;
/**
* 封装User对象
*/
public class User {
private String username;
private String password;
private String gender;
private String hobbies;
private String remark;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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 getGender() {
return gender;
}
public String getHobbies() {
return hobbies;
}
public void setHobbies(String hobbies) {
this.hobbies = hobbies;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getHobby() {
return hobbies;
}
public void setHobby(String hobbies) {
this.hobbies = hobbies;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", hobbies='" + hobbies + '\'' +
", remark='" + remark + '\'' +
", age=" + age +
'}';
}
}
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%--
Created by IntelliJ IDEA.
User: jinyj
Date: 2023/9/21
Time: 11:47
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%--
String registerfail = request.getParameter("registerfail");
--%>
<%
HashMap error = ((HashMap)request. getAttribute("error"));
String registerfail = request.getParameter("registerfail");
%>
<%=registerfail==null?"":registerfail%>
<%--
Created by IntelliJ IDEA.
User: jinyj
Date: 2023/9/21
Time: 15:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
注册失败
请返回重新注册
<%--
Created by IntelliJ IDEA.
User: jinyj
Date: 2023/9/21
Time: 15:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
注册成功
点击登录
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: jinyj
Date: 2023/9/27
Time: 10:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
HashMap error = ((HashMap)request. getAttribute("error"));
String fail = (String) request.getParameter("fail");
%>
<%--
Created by IntelliJ IDEA.
User: jinyj
Date: 2023/9/19
Time: 10:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%=request. getParameter("username")%>登录成功! Welcome to javaweb!
import com.xinhua.domain.User;
import com.xinhua.service.UserService;
import com.xinhua.utils.ArrayToString;
import com.xinhua.validate.ValidateDome;
import org.apache.commons.beanutils.BeanUtils;
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.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/UserController")
public class UserController extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("userAction");
//处理中文乱码
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
//登录
if ("login".equals(action)){
User user = new User();
try {
BeanUtils.populate(user,req.getParameterMap());
Map error = ValidateDome.validateUser(user);
if (error.isEmpty()){
UserService userService = new UserService();
boolean flag = userService.login(user.getUsername(),user.getPassword());
if (flag){
resp.sendRedirect("index01.jsp?username="+ URLEncoder. encode(user.getUsername(),"utf-8"));
}else {
req.setAttribute("fail","登录失败");
req.getRequestDispatcher("login2.jsp").forward(req,resp);
}
}else {
req. setAttribute( "error", error);
req.getRequestDispatcher( "login2.jsp").forward(req,resp);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
//注册
if ("register".equals(action)){
User user = new User();
try {
BeanUtils.populate(user,req.getParameterMap());
user.setHobbies(ArrayToString.arrayToString(req.getParameterValues("hobbies")));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
Map error = new HashMap<>();
if (error.isEmpty()){
//调用service
UserService userService = new UserService();
int state = userService.register(user);
if (state==0){
resp.sendRedirect("registerfail.jsp");
}
if (state==1){
resp.sendRedirect("success.jsp");
}
if (state==2){
resp.sendRedirect("register.jsp?registerfail="+ URLEncoder. encode( "该用户已经存在!", "utf-8"));
}
}else {
req. setAttribute( "error", error);
req.getRequestDispatcher( "/register.jsp").forward(req, resp);
}
}
}
}
最后给大家附上部分结果截图,谢谢观看