您的位置:首页 > 编程语言 > Java开发

Java Web简单的注册登陆界面(mysql+servlet+jsp)

2017-05-12 20:18 761 查看

通过一段时间Java Web的学习,写一个简单的注册登陆界面来做个总结,也方便与大家分享交流。

首先我们先写一个UserBean,代码如下:

package com.szx.jnmc;

public class User {

private String username;
private String userpass;
private int role;
private int lognum;
private  String regtime;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}

public int getLognum() {
return lognum;
}
public void setLognum(int lognum) {
this.lognum = lognum;
}
public String getRegtime() {
return regtime;
}
public void setRegtime(String regtime) {
this.regtime = regtime;
}

}


这段代码用来对user进行数据的封装。

下面再写一个数据库连接类DBOper 这个类具有连接数据库以及增删改(executeUpdate)查(executeQuery)的功能,以便于AddUserServlet的调用

package com.szx.jnmc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBOper {

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
//打开连接
public Connection getConn(String server,String dbname,String dbuser,String dbpwd){
String DRIVER = "com.mysql.jdbc.Driver";
String URL = "jdbc:mysql://"+server+":3306/"+dbname+"?user="+dbuser+"&password="+dbpwd+"&useUnicode=true&characterEncoding=utf8";
try{
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
//关闭连接
public void closeAll(){
try{
if(rs != null){
rs.close();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(ps != null){
ps.close();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(conn != null){
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
}

}
//执行sql语句,可以进行查询
public ResultSet executeQuery(String preparedSql,String []param){
try{
ps = conn.prepareStatement(preparedSql);
if(param != null){
for (int i = 0; i < param.length; i++) {
ps.setString(i + 1, param[i]);
}
}
rs = ps.executeQuery();
}catch(SQLException e){
e.printStackTrace();
}
return rs;

}
//执行sql语句,增加,修改,删除
public int executeUpdate(String preparedSql,String[]param){
int num = 0;
try{
ps = conn.prepareStatement(preparedSql);
if(ps != null){
for (int i = 0; i < param.length; i++) {
ps.setString(i + 1, param[i]);
}
}
num = ps.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
}
return num;
}
}


数据库连接类写完之后,继续写一个UserDao,这个类主要功能是对用户进行增删改查 ,虽然是一个简单的登录界面,但是考虑到后面的开发,所以就直接把删改查的功能也一并实现了,代码如下:

package com.szx.jnmc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao extends DBOper{
//获取用户列表
public List<User> getUser(){
List<User>userList = new ArrayList<User>();
User user = new User();
String sql = "SELECT * FROM tb_user";
try{
ResultSet rs = this.executeQuery(sql,null);
while(rs.next()){
user.setUsername(rs.getString("username"));
user.setUserpass(rs.getString("userpass"));
user.setLognum(rs.getInt("lognum"));
user.setRegtime(rs.getString("regtime"));
user.setRole(rs.getInt("role"));
userList.add(user);
}

}catch(SQLException e){
e.printStackTrace();
}finally{
this.closeAll();
}
return userList;
}
//根据用户名获取用户
public User getUserByName(String name){
User user = null;
String sql = "SELECT * FROM tb_user WHERE username = ?";
try{
ResultSet rs = this.executeQuery(sql, new String[]{name});
if(rs.next()){
user = new User();
user.setUsername(rs.getString("username"));
user.setUserpass(rs.getString("userpass"));
user.setRole(rs.getInt("role"));
user.setLognum(rs.getInt("lognum"));
user.setRegtime(rs.getString("regtime"));
}
}catch(SQLException e){
e.printStackTrace();
}finally{
this.closeAll();
}
return user;
}
//修改用户信息
public boolean editUser(User user){
boolean r = false;
String sql = "UPDATE tb_user SET userpass = ?,role = ?,regtime = ?,lognum = ? WHERE username = ?";
try{
int num = this.executeUpdate(sql, new String[]{user.getUserpass(),""+user.getRole(),""+user.getLognum(),user.getRegtime(),user.getUsername()});
if(num > 0){
r = true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.closeAll();
}
return r;

}
//添加用户
public boolean addUser(User user){
boolean r = false;
String sql = "INSERT INTO tb_user(username,userpass,role,regtime)VALUES(?,?,?,?) ";
try{
int num = this.executeUpdate(sql,new String[]{user.getUsername(),user.getUserpass(),""+user.getRole(),user.getRegtime()});
if(num > 0){
r = true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.closeAll();
}
return r;
}
//删除指定用户
public boolean delUser(String name){
boolean r = false;
String sql = "DELETE FROM tb_user WHERE username = ?";
try{
int num = this.executeUpdate(sql,new String[]{name});
if(num > 0){
r = true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.closeAll();
}
return r;
}
}


我们先写注册部分,addUser.jsp用来接收用户的输入。抛开各种样式,直接用最原始的样式呈现吧,代码如下:

<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"         "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>添加用户页面</title>
</head>
<body>
<form action = "AddUserServlet" method = "POST">
用户名:<input type = "text" name = "username">
密码:<input type = "password" name = "userpass">
<input type = "submit" value = "注册">
<input type = "reset" value = "重置">
</form>
</body>
</html>


效果如下图,太丑了,仅作分享交流,不喜勿喷



这里有一个地方需要注意,就是页面的字符编码设置统一为GBK

下面写我们的AddUserServlet,不多说,直接贴代码:

package com.szx.jnmc;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

/**
* @see HttpServlet#HttpServlet()
*/
public AddUserServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset = GBK");
String username = request.getParameter("username");
String userpass = request.getParameter("userpass");
//String role = request.getParameter("role");
Date curTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String regtime = sdf.format(curTime);
PrintWriter out = response.getWriter();
ServletContext ctx = this.getServletContext();
String server = ctx.getInitParameter("server");
String dbname = ctx.getInitParameter("dbname");
String dbuser = ctx.getInitParameter("dbuser");
String dbpwd = ctx.getInitParameter("dbpwd");
User user = new User();
user.setUsername(username);
user.setUserpass(userpass);
user.setRegtime(regtime);
//user.setRole(Integer.parseInt(role));
UserDao dao = new UserDao();
dao.getConn(server, dbname, dbuser, dbpwd);
if(dao.addUser(user)){
out.print("注册成功!");
}
else{
out.print("注册失败!");
}

}

}


接下来我们写登陆部分,login.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>登陆页面</title>
</head>
<body>
<form method = "POST" action = "LoginServlet">
用户名:<input type = "text" name = "username">
密码:<input type = "password" name = "userpass">
<input type = "submit" value = "登陆">
<input type = "reset" value = "重置">
</form>
</body>
</html>


登录页面如下:



LoginServlet代码如下:

package com.szx.jnmc;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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

/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset = GBK");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String userpass = request.getParameter("userpass");
ServletContext ctx = request.getServletContext();
String server = ctx.getInitParameter("server");
String dbname = ctx.getInitParameter("dbname");
String dbuser = ctx.getInitParameter("dbuser");
String dbpwd = ctx.getInitParameter("dbpwd");
DBOper db = new DBOper();
db.getConn(server, dbname, dbuser, dbpwd);
String sql = "SELECT username,userpass,role FROM tb_user WHERE username = ? AND userpass = ?";
ResultSet rs = db.executeQuery(sql,new String[]{username,userpass});
try {
if(rs != null && rs.next()){
HttpSession session = request.getSession();
session.setAttribute("username",username);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String logtime = sdf.format(new Date());
session.setAttribute("logtime",logtime);
Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
RequestDispatcher dispatcher = request.getRequestDispatcher("MainServlet");
dispatcher.forward(request,response);
}else{
out.print("登录失败");
out.print("<br><a href = 'login.jsp'>重新登陆</a>");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void init()throws ServletException {

}

}


LoginServlet里的MianServlet用来显示登陆成功的信息,登陆失败则跳转到login.jsp重新登陆,MainServlet的代码如下:

package com.szx.jnmc;

import java.io.IOException;
import java.io.PrintWriter;

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 javax.servlet.http.HttpSession;

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

/**
* @see HttpServlet#HttpServlet()
*/
public MainServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charaset = GBK");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String username = (String)session.getAttribute("username");
String logtime = (String)session.getAttribute("logtime");
out.println("登录名:"+username+"    登陆时间:"+logtime);
out.println("欢迎"+username);
}

}


到此我们还有最重要的一步,就是在web.xml里配置我们的项目,web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>20170512</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>server</param-name>
<param-value>localhost</param-value>
</context-param>
<context-param>
<param-name>dbname</param-name>
<param-value>A20170512</param-value>
</context-param>
<context-param>
<param-name>dbuser</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>dbpwd</param-name>
<param-value>123456</param-value>
</context-param>
<servlet>
<display-name>AddUserServlet</display-name>
<servlet-name>AddUSerServlet</servlet-name>
<servlet-class>com.szx.jnmc.AddUserServlet</servlet-class>
</servlet>
<servlet>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.szx.jnmc.LoginServlet</servlet-class>
</servlet>
</web-app>


当然,配置文件容易出现问题,例如在刚开始的时候项目里并没有web.xml,所以我们不妨在创建项目的时候就直接带上,步骤如下:

1.新建项目



2.next



3.勾选√



这时候,项目的/0512/WebContent/WEB-INF/目录下就会出现web.xml文件

还有一步就是要把jdbc连接数据库(mysql)的jar包复制到/20170512/WebContent/WEB-INF/lib目录下,这样才能连接保证连接到数据库

到此有必要贴出项目的目录结构:



数据库需要自己创建,如图所示:



项目的下载地址:

CSDN下载中心:http://download.csdn.net/detail/itcreater000/9841194

如果csdn里下载不到,可留言!

到此就结束了我们的项目,欢迎大家提出宝贵的建议改进方案!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet java mysql java web
相关文章推荐