基于MVC设计模式实现简单的Javaweb-注册登录功能

    首先,对于MVC设计模式千万不要想的太过复杂,不然真的很坑的。

简单的理解就是:

1.View-视图层   用户从视图层提交请求到Controller-控制层 。

2.然后控制层接受到用户的请求会调用Model-模型层里面的方法访问数据库并且将返回的结果返回到控制层。

3.控制层接受到模型层从数据库中访问的结果并处理,之后根据处理结果跳转当相应的视图层页面。

这就是MVC 设计思想,目的就是解决之前代码之间的耦合,提高代码的复用。

废话不多说,下面咱们实现一个简单的小例子-注册登录

 

咱们的开发环境就是eclipse 、Tomcat 7.0  、mysql (servlet 选择是3.0  创建你的项目是选择  如下图位置 )

servlet 2.5 与 servlet 3.0或者以上版本 的区别这里就不多少了,想了解的自己度娘吧

基于MVC设计模式实现简单的Javaweb-注册登录功能

一. 项目目录结构(先看一下目录)

基于MVC设计模式实现简单的Javaweb-注册登录功能

1). 第一步 咱们先创建数据库db_jsp以及数据库表t_user  表的设计如下图所示:

基于MVC设计模式实现简单的Javaweb-注册登录功能

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设计模式实现简单的Javaweb-注册登录功能

 

基于MVC设计模式实现简单的Javaweb-注册登录功能

基于MVC设计模式实现简单的Javaweb-注册登录功能

基于MVC设计模式实现简单的Javaweb-注册登录功能

 

 

以上就是对于基于MVC设计模式实现的注册登录功能了。实现逻辑很简单,其中还有很多需要改进的地方,比如说注册之前先查询此时注册的用户名是否已经存在,如果存在则注册失败并且提示用户什么的····

除此之外呢,对于MVC 一定要好好理解,为以后学习框架打下坚实的基础。还有一点就是servlet更是框架学习的基础的基础。