JSP+Servlet+JavaBean小例子

通过一个注册登录的小例子,不使用任何框架,采用三层程序的架构,基于MVC的模式,来熟悉一下JSP+Servlet+JavaBean的使用

架构设计:

代码实现:

模型:beans包和DAO包

视图:jsp页面

控制器:servlets

1.先在eclipse建立一个LoginMaven项目,maven项目升级到4.0,jdk用的1.8版本

需要用到MYSQL数据库,maven项目需要在pom.xml下添加数据库依赖

<!-- MySql Connector -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.45</version>
		</dependency>

2.这个例子只需要一张users表就可以进行测试,数据库名为testdb

3.这是一个beans包

package beans;

public class Users {
	int id;
	String username;
	String password;
//set、get
}

4.接下来dao包存放与数据库相关操作

package dao;

import java.sql.*;
import beans.User;

public class UserDAO {
	public static final String DRIVER = "org.gjt.mm.mysql.Driver";// 驱动
	public static final String DBURL = "jdbc:mysql://localhost:3306/testdb";// 连接字符串
	public static final String DBUSER = "root";// 用户名
	public static final String DBPASS = "123456";// 密码
	// 三个对象
	private Connection conn = null;
	private PreparedStatement pStat = null;// PreparedStatement可实现带参数的动态查询
	private ResultSet rs = null;// 结果集

	public Connection getConnectionn() {
		// 获得数据库连接
		try {
			Class.forName(DRIVER).newInstance();// 加载mysql驱动
			return DriverManager.getConnection(DBURL, DBUSER, DBPASS);// 建立数据库连接
		} catch (Exception e) {
			return null;
		}
	}

	// 关闭数据库连接
	public void close() {
		try {
			if (rs != null)
				rs.close();
			if (pStat != null)
				pStat.close();
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	} // end close
//

	public boolean isUsernameExists(String username) {
		// 判断用户名是否存在
		conn = getConnectionn();
		try {
			pStat = conn.prepareStatement("select * from users where username=?");
			pStat.setString(1, username);// 参数1代表第一个‘?’查找对应参数username
			rs = pStat.executeQuery();
			if (rs.next())
				return true;
			else
				return false;
		} catch (Exception e) {
			return false;
		} finally {
			close();
		}
	}// end exits
	
	public boolean findUser(String username, String password){
		//根据用户名和密码查找
		conn=getConnectionn();
		try {
			pStat =conn.prepareStatement("select * from users where username=? and password=?");
			pStat.setString(1, username);
			pStat.setString(2, password);//参数2代表第二个‘?’查找对应参数password
			rs=pStat.executeQuery();
			if( rs.next() )
				return true;
			else
				return false;
		}catch (Exception e) {
			return false;
		}
		finally{
			close();
		}
	} //end findUser
	public boolean addUser(User user) {
		//添加用户
		conn=getConnectionn();
		try {
			pStat=conn.prepareStatement("insert into users values(null,?,?)");
			pStat.setString(1, user.getUsername());
			pStat.setString(2, user.getPassword());
			int cnt=pStat.executeUpdate();//executeUpdate()返回执行成功sql语句的条数
			if(cnt>0)
				return true;
			else
				return false;
		}catch (Exception e) {
			return false;
		}
		finally{
			close();
		}
	} //end add
} //end class

5.servlers包存放Servlet,

Servlet文件创建的时候会自动生成处理get请求的doGet()和处理post请求的doPost()方法,可以用一个service()方法代替

//RegServlet.java

@WebServlet("/RegServlet")
public class RegServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username=request.getParameter("username");//获取前端的值
		String password=request.getParameter("password");
		User user=new User();
		user.setUsername(username);
		user.setPassword(password);
		UserDAO userdao=new UserDAO();
		if( userdao.isUsernameExists(username) ){
			request.getSession().setAttribute("err", "用户名已存在");//获得session对象
			response.sendRedirect("register.jsp");			
		}
		else{
			boolean flag=userdao.addUser(user);
			if(flag){
				request.getSession().setAttribute("username", username);
				response.sendRedirect("welcome.jsp");
			}
			else{
				request.getSession().setAttribute("err", "注册失败");
				response.sendRedirect("register.jsp");
			}
		}
	}
} // end service

LoginServlet.java

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		UserDAO userdao=new UserDAO();
		boolean flag=userdao.findUser(username, password);
		if( flag ){
			request.getSession().setAttribute("username", username);//获得session对象
			response.sendRedirect("welcome.jsp");			
		}
		else{
				request.getSession().setAttribute("err", "用户名或密码不正确");
				response.sendRedirect("login.jsp");
			}
	}
} // end service

6.  jsp页面,分别是注册界面register.jsp    登录界面login.jsp   以及欢迎界面welcome.jsp

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
String errMsg=(String)session.getAttribute("err");
if( errMsg!=null ) { %>
<div style="color:red;"><%=errMsg %></div>
<% session.removeAttribute("err");
}%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="LoginServlet">
		用户名<input type="text" name="username"><br /> 
		密码<input type="password" name="password"><br /> 
		<input type="submit" value="登录"> 
		<input type="reset" value="重填">
	</form>
</body>
</html>

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
String errMsg=(String)session.getAttribute("err");
if( errMsg!=null ) { %>
<div style="color:red;"><%=errMsg %></div>
<% session.removeAttribute("err");
} %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="RegServlet">
		用户名<input type="text" name="username"><br /> 
		密码<input type="password" name="password"><br /> 
		<input type="submit" value="注册"> 
		<input type="reset" value="重填">
	</form>
</body>
</html>

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
String username=(String)session.getAttribute("username");
if(username!=null&&!username.isEmpty()) { %>
你已经登录,欢迎<%=session.getAttribute("username") %>
<% }
else{
out.print("你还没有登录,3秒后自动跳往登录页面");
response.setHeader("refresh", "3;url=login.jsp");
} %>

本来我在webapp这个文件夹下面新建了一个view文件夹来存放jsp,如何发现运行jsp页面跳转到Servlet时显示404,找了半天才知道路径不对,直接把jsp文件放在webapp文件夹下面就ok了

猜你喜欢

转载自blog.csdn.net/qq_36986067/article/details/93765909