基于MVC设计模式实现简单的Javaweb-注册登录功能
首先,对于MVC设计模式千万不要想的太过复杂,不然真的很坑的。
简单的理解就是:
1.View-视图层 用户从视图层提交请求到Controller-控制层 。
2.然后控制层接受到用户的请求会调用Model-模型层里面的方法访问数据库并且将返回的结果返回到控制层。
3.控制层接受到模型层从数据库中访问的结果并处理,之后根据处理结果跳转当相应的视图层页面。
这就是MVC 设计思想,目的就是解决之前代码之间的耦合,提高代码的复用。
废话不多说,下面咱们实现一个简单的小例子-注册登录。
咱们的开发环境就是eclipse 、Tomcat 7.0 、mysql (servlet 选择是3.0 创建你的项目是选择 如下图位置 )
servlet 2.5 与 servlet 3.0或者以上版本 的区别这里就不多少了,想了解的自己度娘吧
一. 项目目录结构(先看一下目录)
1). 第一步 咱们先创建数据库db_jsp以及数据库表t_user 表的设计如下图所示:
2) .第二步我们创建视图层 jsp页面 (webContent目录下)
1. login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登录页面</title>
</head>
<body>
<form action="loginServlet" method="post">
用户名: <input type="text" name="username" placeholder="用户名">
<br><br>
密 码: <input type="password" name="password" placeholder="密码">
<br> <br>
<input type="submit" value="登录">
<a href="register.jsp">注册 </a>
</form>
</body>
</html>
2.register.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>注册页面</title>
</head>
<body>
<form action="registerServlet" method="post">
<input type="text" name="username" placeholder="用户名"> <input
type="password" name="password" placeholder="密码"> <input
type="submit" value="注册">
</form>
</body>
</html>
3. main.jsp和success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>主界面</title>
</head>
<body>
<h1>登录成功!</h1>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>注册成功!</h1>
</body>
</html>
目前我们就这四个页面,因为只是注册登录功能嘛····
3).第三步我们创建模型层 User.java 用户实体类 和 数据库访问类 loginDao.java类、
package org.web.eneity;
/**
* 用户实体类
*
* @author Administrator
*
*/
public class User {
private int id;
private String username; //用户名
private String password; //密码
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
package org.web.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.web.eneity.User;
import com.web.util.JDBCUtil;
public class loginDao {
static Connection conn = null;
static PreparedStatement prst = null;
static ResultSet rs = null;
private User user = new User();
// 用户登录
public static int login(User user) throws Exception {
int result = -1;
conn = JDBCUtil.getCon(); // 获取一个数据库连接
String sql = "select * from t_user where username=? and password=?"; // 编写sql语句
prst = conn.prepareStatement(sql); // 对ssql语句进行预处理
prst.setString(1, user.getUsername());
prst.setString(2, user.getPassword());
rs = prst.executeQuery(); // 执行sql语句, 并返回结果集
if (rs.next())
result = rs.getInt(1);
if (result > 0)
return 1;
else
return 0;
}
// 用户注册
public static boolean register(User user) throws Exception {
conn = JDBCUtil.getCon(); // 获取数据库连接
String sql = "insert into t_user(username,password) values(?,?)"; // 编写sql语句
prst = conn.prepareStatement(sql); // 对sql语句进行预处理
prst.setString(1, user.getUsername());
prst.setString(2, user.getPassword());
boolean result = prst.executeUpdate() > 0; // 执行sql语句
return result;
}
}
4.第四步我们创建控制层servlet ,loginServlet.java和registerServlet.java(注意 你直接创建Servlet ,而不是Class)
package org.web.servlect;
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.web.dao.loginDao;
import org.web.eneity.User;
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User user=new User(username,password);
try {
int result=loginDao.login(user);
if(result>0)
request.getRequestDispatcher("main.jsp").forward(request, response);
else
request.getRequestDispatcher("login.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package org.web.servlect;
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.web.dao.loginDao;
import org.web.eneity.User;
@WebServlet("/registerServlet")
public class registerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User user=new User(username,password);
try {
boolean result=loginDao.register(user);
if(result==true) {
System.out.println("注册成功!");
request.getRequestDispatcher("success.jsp").forward(request, response);
}else {
request.getRequestDispatcher("register.jsp").forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这时候你注意到这两个Servlect文件上面 的 @WebServlet("/loginServlect") @WebServlet("/registerServlect") 注解了没,这就是Servlet 2.5 和Servlet3.0 的区别了,我们简单说一下啊,如果你之前使用过Servlet2.5 版本的话 你是不是需要配置web.xml,你看我们上面就没有配置web.xml。这就是Servlet3.0版本的好处了,利用注解来映射路径。好了,其他不废话了,接下来咱们继续哈。
4) 第四步我们创建一个工具类,用来与数据库打交道,这样做的好处就是提高代码复用。
package com.web.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 连接诶数据库的工具类
* @author Administrator
*
*/
public class JDBCUtil {
private static String url = "jdbc:mysql://localhost:3306/db_jsp?useUnicode=true&characterEncoding=utf8";
private static String user = "root";
private static String password = "root";
private static String driver = "com.mysql.jdbc.Driver";
public static Connection getCon() throws Exception {
Class.forName(driver); // 加载数据库驱动
Connection con = DriverManager.getConnection(url, user, password); // 获取数据库连接
return con;
}
//关闭数据库连接
public static void getClose(Connection con) throws SQLException {
if (con != null) {
con.close();
}
}
}
对了,我们别忘了引入数据库驱动,直接复制粘贴在lib文件夹里面即可。
以上就是对于基于MVC设计模式实现的注册登录功能了。实现逻辑很简单,其中还有很多需要改进的地方,比如说注册之前先查询此时注册的用户名是否已经存在,如果存在则注册失败并且提示用户什么的····
除此之外呢,对于MVC 一定要好好理解,为以后学习框架打下坚实的基础。还有一点就是servlet更是框架学习的基础的基础。