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版权协议,转载请附上原文出处链接和本声明。