题目描述
使用MySQL数据库
建立数据库名称:jsp
建立数据表:inf(id,name,pwd,age,gender)
create table inf
(id int primary key auto_increment,
name char(20) not null,
pwd char(20) not null,
age int not null,
gender char(2) not null) default charset=utf8;
用户登录,输入用户名与密码(如图一)
用户名与密码需要到数据库验证,如果验证错误,提示错误信息(如图二
),点击“注册”,跳转到“注册”页面(如图四),把用户名,密码,年龄,性别 这些信息,添加到数据库,点击,“返回登录”,回到登录页面,重新输入用户名,密码,登录成功后,进入“显示数据页面”,把数据表中的所有信息显示出来(如图三 )
代码
使用myEclipse,建立与mySQL之间的连接
首先在Navicat 中新建数据库 jsp,新建表如下:
建立连接:
package com.sy.util;
import java.sql.*;
public class DBUtil {
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("未找到驱动类!");
}
try {
String url = "jdbc:mysql://localhost:3306/jsp";
conn = DriverManager.getConnection(url, "root","123456");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据库服务器异常,数据连接错误!");
}
return conn;
}
public static void closeAll(ResultSet rs,Statement stmt,PreparedStatement pstmt,Connection conn){
try {
if(rs != null){
rs.close();
}
if(stmt != null){
stmt.close();
}
if(pstmt != null){
pstmt.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
Connection conn = DBUtil.getConnection();
System.out.println(conn != null ? "连接成功!" : "连接失败!");
}
}
实体类:
package com.sy.entity;
public class Inf {
private int id;
private String name;
private String pwd;
private int age;
private String gender;
public Inf(){
}
public Inf(String name, String pwd,int age,String gender) {
super();
this.name = name;
this.pwd = pwd;
this.age = age;
this.gender = gender;
}
public Inf(int id, String name, String pwd,int age,String gender) {
this.id = id;
this.name = name;
this.pwd = pwd;
this.age = age;
this.gender = gender;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String toString(){
return this.id+"\t"+this.name+"\t"+this.pwd+"\t"+this.age+"\t"+this.gender;
}
}
Dao:
package com.sy.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.sy.util.*;
import com.sy.entity.*;
public class InfDao {
private static Connection conn = null;
private static Statement stmt = null;
private static PreparedStatement pstmt = null;
private static ResultSet rs = null;
public Inf queryByName(String name){
Inf inf=null;
try {
String sql="select * from inf where name=?";
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
// pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs.next()){
inf = new Inf();
inf.setId(rs.getInt(1));
inf.setName(rs.getString(2));
inf.setPwd(rs.getString(3));
inf.setAge(rs.getInt(4));
inf.setGender(rs.getString(5));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
DBUtil.closeAll(rs, null, pstmt, conn);
}
return inf;
}
public List<Inf> queryInfList(){
List<Inf> inflist = new ArrayList<Inf>();
try {
String sql ="select * from inf";
conn = DBUtil.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
Inf inf = new Inf();
inf = new Inf();
inf.setId(rs.getInt(1));
inf.setName(rs.getString(2));
inf.setPwd(rs.getString(3));
inf.setAge(rs.getInt(4));
inf.setGender(rs.getString(5));
inflist.add(inf);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
DBUtil.closeAll(rs, stmt, null, conn);
}
return inflist;
}
public static boolean addInf(Inf inf) {
try {
String sql = "insert into inf(name,pwd,age,gender) values(?,?,?,?)";
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, inf.getName());
pstmt.setString(2, inf.getPwd());
pstmt.setInt(3, inf.getAge());
pstmt.setString(4, inf.getGender());
int rows=pstmt.executeUpdate();
if(rows>0){
return true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtil.closeAll(rs,stmt,null,conn);
}
return false;
}
}
登陆界面jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登陆界面</title>
<script type="text/javascript">
function confirm(){
var username = document.log.user.value;
var password = document.log.password.value;
if(username==""){
alert("用户名不能为空!");
return false;
}
if(password==""){
alert("密码不能为空!");
return false;
}
}
</script>
</head>
<body>
<h1>登陆界面</h1>
<form name="log" action="Task2" method="post" onsubmit="return confirm()">
<table>
<tr><td>用户名</td><td><input type="text" name="user"></td></tr>
<tr><td>密码</td><td><input type="password" name="password"></td></tr>
<tr><td><input type="submit" value="登陆" > <input type="button" value="注册" onclick="javascript:location.href='<%=basePath%>reg.jsp'"/></td>
<td><div id="error" name="error" style="display:inline;font-size:15px;color:red;">
<%= request.getAttribute("error")==null? "" : request.getAttribute("error")%></div></td>
</table>
</form>
</body>
</html>
登陆界面servlet
package com.sy.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sy.dao.*;
import com.sy.entity.*;
public class MyServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
String name = request.getParameter("user");
String password = request.getParameter("password");
InfDao infDao = new InfDao();
Inf inf = infDao.queryByName(name);
if(inf!= null){
if(inf.getPwd()==password){
List<Inf> list =infDao.queryInfList();
request.setAttribute("list", list);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
else{
request.setAttribute("error","用户名或密码错误!");
request.getRequestDispatcher("/logIn.jsp").forward(request, response);
}
}else{
request.setAttribute("error","用户名或密码错误!");
request.getRequestDispatcher("/logIn.jsp").forward(request, response);
}
}
}
展示所有数据的list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>list</title>
<style type="text/css">
table{
border: 1px ;
border-color: yellow;
}
</style>
</head>
<body>
<table border="1" cellspacing="0">
<tr>
<th>编号</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>性别</th>
</tr>
<c:forEach items="${list}" var="usr">
<tr align="center"><td>${usr.id}</td><td>${usr.name}</td><td>${usr.pwd}</td><td>${usr.age}</td><td>${usr.gender}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
注册界面jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>注册界面</title>
<script type="text/javascript">
function validForm(){
var username = document.reg.user.value;
var password = document.reg.password.value;
var age = document.reg.age.value;
var gender = document.reg.gender.value;
if(username==""){
alert("用户名不能为空!");
return false;
}
if(password==""){
alert("密码不能为空!");
return false;
}
if(!/^\w{3}$/.test(password)){
alert("请输入三位密码!");
return false;
}
if(age=="0"){
alert("请选择正确的年龄!");
return false;
}
}
</script>
</head>
<body>
<h1>注册界面</h1>
<form name="reg" action="Register" method="post" onsubmit="return validForm()">
<table>
<tr><td>用户名</td><td><input type="text" name="user"></td></tr>
<tr><td>密码</td><td><input type="password" name="password"></td></tr>
<tr><td>年龄</td><td><select name="age">
<option value=0>请选择年龄</option>
<option value=20>21</option>
<option value=22>22</option>
<option value=23>23</option>
<option value=24>24</option>
<option value=25>25</option>
<option value=26>26</option>
<option value=27>27</option>
<option value=28>28</option>
<option value=29>29</option>
<option value=30>30</option>
<option value=31>31</option>
<option value=32>32</option>
<option value=33>33</option>
<option value=34>34</option>
<option value=35>35</option>
<option value=36>36</option>
<option value=37>37</option>
<option value=38>38</option>
<option value=39>39</option>
<option value=40>40</option>
<option value=41>41</option>
<option value=42>42</option>
<option value=43>43</option>
<option value=44>44</option>
<option value=45>45</option>
</select></td></tr>
<tr><td>性别</td><td>
<input type="radio" name="gender" checked="checked" value="男">男
<input type="radio" name="gender" value="女"> 女
</td></tr>
<tr><td><input type="submit" value="注册" ></td><td><input type="button" value="返回登陆" onclick="javascript:location.href='<%=basePath%>logIn.jsp'"/></td></tr>
<tr colspan="2"><div id="meg" name="meg" style="display:inline;font-size:15px;color:red;">
<%= request.getAttribute("meg")==null? "" : request.getAttribute("meg")%></div></tr>
</table>
</form>
</body>
</html>
注册的servlet
package com.sy.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sy.dao.InfDao;
import com.sy.entity.Inf;
public class Reg extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String name = request.getParameter("user");
String password = request.getParameter("password");
int age = Integer.valueOf(request.getParameter("age"));
String gender = request.getParameter("gender");
String meg = null;
Inf inf = new Inf(name,password,age,gender);
boolean flag = InfDao.addInf(inf);
if(flag){
meg = "注册成功!";
request.setAttribute("meg",meg);
request.getRequestDispatcher("/reg.jsp").forward(request, response);
}else{
meg = "注册失败!";
request.setAttribute("meg",meg);
request.getRequestDispatcher("/reg.jsp").forward(request, response);
}
}
}
其实这样子有点繁琐,可以用一个servlet来响应多个jsp的请求,但是老师讲的时候我差不多已经写完了,所以最后没有修改。
web.index
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.sy.servlet.MyServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>Reg</servlet-name>
<servlet-class>com.sy.servlet.Reg</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/Task2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Reg</servlet-name>
<url-pattern>/Register</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>