Servlet案例:用户注册登录

Servlet案例:用户注册登录

技术需求:html + Servlet + jdbc + tomcat

登录

创建数据库

在这里插入图片描述
在这里插入图片描述

创建登录界面login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>登录</h2>
	<form action="login" method="get">
		<p>帐号:<input name="username" type="text"></p>
		<p>密码:<input name="password" type="password"></p>
		<p><input name="sub" type="submit" value="提交"></p>
	</form>
</body>
</html>

创建用户实体User

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;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
	}
	
}

编写JDBC(查询方法)

将页面的用户信息传递过来进行查询。使用DBUtils+c3p0
DBUtils+c3p0我前面博客有做介绍,不了解的可以去参考一下。

public class UserDao {
	//连接数据库,查询是否有该用户信息
	public User login(User user) {
		String sql = "select * from user where username=? and password=?";
		//创建连接池,获取连接池对象
		QueryRunner qr =  new QueryRunner(new ComboPooledDataSource());
		
		User loginUser=null;
		try {
			//通过查询,返回查询结果
			loginUser = qr.query(sql, new BeanHandler<User>(User.class),user.getUsername(),user.getPassword());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(loginUser);
		return loginUser;
	}
}

创建登录Servlet

想要让servlet具备接收条件,相应数据的功能,必须重写service方法!!!

public class LoginServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;
	
	@Override
	protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException {
		//页面传递过来的用户信息
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		//封装User对象
		User user = new User(username,password);
		//创建JDBC类的对象
		UserDao userDao = new UserDao();
		//调用查询方法
		User loginUser = userDao.login(user);
		//判断是否有该用户
		if(loginUser != null) {
			response.sendRedirect("success.html");
			System.out.println("登录成功");
		}else {
			response.sendRedirect("login.html");
			System.out.println("登录失败");
		}
		
	}
}

配置web.xml文件

<!-- 注册Servlet,告诉tomcat,当前羡慕中的哪一个类是servlet -->
<servlet>
	<!-- 登录 -->
	<servlet-name>LoginServlet</servlet-name><!-- Servlet名称 -->
    <servlet-class>com.servlet.LoginServlet</servlet-class><!-- Serclet全路径 -->
</servlet>

<!-- 配置Servlet虚拟路径,建立与前端请求的路径绑定关系 -->
<servlet-mapping>
	<servlet-name>LoginServlet</servlet-name><!-- Servlet名称 -->
	<url-pattern>/login</url-pattern><!-- 连接前台的虚拟访问路径 -->
</servlet-mapping>

测试登录

在这里插入图片描述
在这里插入图片描述

注册

与登录实现方式差不多

创建注册界面registered.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>注册</h2>
	<form action="registered" method="get">
		<p>请输入帐号:<input name="username" type="text"></p>
		<p>请输入密码:<input name="password" type="password"></p>
		<p><input name="sub" type="submit" value="提交"></p>
	</form>
</body>
</html>

登录界面添加注册按钮,实现点击按钮进行页面跳转

<input type="button" value="注册" onclick="window.location.href='registered.html'">

JDBC方法中添加用户信息存储的功能

public int registered(User user) {
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
		String sql = "insert into user(username,password) values(?,?)";
		//创建连接池,获取连接池对象
		QueryRunner qr =  new QueryRunner(new ComboPooledDataSource());
		int n=-1;
		try {
			n = qr.update(sql, user.getUsername(),user.getPassword());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return n;
	}

创建注册Servlet

public class RegisteredServlet extends HttpServlet{
	
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		//创建JDBC类的对象调用用户信息存储方法
		int n = new UserDao().registered(new User(username,password));
		//通过返回结果,判断是否注册成功
		if(n > 0 ) {
			response.sendRedirect("login.html");
			System.out.println("注册成功");
		}else {
			response.sendRedirect("registered.html");
			System.out.println("注册失败");
		}
	}
}

将RegisteredServlet添加到web.xml中

<!-- 注册 -->
	<servlet>
		<servlet-name>RegisteredServlet</servlet-name><!-- Servlet名称 -->
	    <servlet-class>com.servlet.RegisteredServlet</servlet-class><!-- Serclet全路径 -->
	</servlet>
	<servlet-mapping>
		<servlet-name>RegisteredServlet</servlet-name><!-- Servlet名称 -->
		<url-pattern>/registered</url-pattern><!-- 连接前台的虚拟访问路径 -->
	</servlet-mapping>

注册登录测试

在这里插入图片描述

在这里插入图片描述

注意

如果html中method="post"中使用是post,会出现响应乱码的问题
可以使用以下方法进行转码:

request.setCharacterEncoding("utf-8");

如果html中method="get"中使用是get
从Tomcat8版本之后默认编码改为utf-8,所以如果是Tomcat8及以上版本就不需要进行转码处理

如果是Tomcat7及之前的版本可以使用以下方法进行转码

String name = request.getParameter("name");
String encodingName = new String(name.getBytes("iso-8859-1"),"utf-8");

版权声明:本文为weixin_44255355原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。