实验目的
- 掌握编写JavaBean的规范,学会如何在JSP中使用JavaBean;
- 掌握JSP、JavaBean和Servlet综合应用的基本原则。
实验内容
创建一个WEB应用,综合利用JSP、JavaBean和Servlet技术实现用户登录(注册功能选做)。程序至少包含:一个登录页面login.jsp,一个欢迎页面hello.jsp,一个servlet和一个bean。参考实验7,运用实验中创建数据库和表的方法,完成如下要求:
- 用户在login.jsp中输入用户名和密码,数据提交给servlet。
- 设计Bean,封装数据库表user中一个用户的所有信息。
- servlet完成用户身份验证(通过从表中条件检索来验证)。如果用户合法,将该用户所有的信息放入上述bean的实例中,并存入session,转到hello.jsp;否则转到error.jsp
- hello.jsp从session中取出用户信息并显示。
- error.jsp显示错误信息“用户名或密码错误!”,该页面中包含回到login.jsp的链接。
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" version="3.0">
<display-name>JavaWeb</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>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>gdpu.com.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login.html</url-pattern>
</servlet-mapping>
</web-app>
Login.java
package gdpu.com;
import java.sql.*;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Login extends HttpServlet {
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String usernamex = request.getParameter("username");
String passwordx = request.getParameter("password");
try {
Class.forName("com.mysql.jdbc.Driver"); //驱动程序名
String url = "jdbc:mysql://localhost:3306/实验"; //数据库名
String username = "root"; //数据库用户名
String password = "0403"; //数据库用户密码
Connection conn = DriverManager.getConnection(url, username,password); //连接状态
if (conn != null) {
Statement stmt = null;
ResultSet rs = null;
stmt = conn.createStatement();
String sql = "SELECT * FROM user where username='"+usernamex+"' and password='"+passwordx+"'";//查询语句
rs = stmt.executeQuery(sql);
boolean isTure = false;
User user =new User();
while(rs.next()) {
isTure =true;
user.setUsername(rs.getString(1));
user.setPassword(rs.getString(2));
user.setChinesename(rs.getString(3));
user.setSex(rs.getString(4));
user.setRank(rs.getString(5));
}
if(isTure) {
request.getSession().setAttribute("user", user);
response.sendRedirect("./hello.jsp");
}
else {
response.sendRedirect("./error.jsp");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
User.java
package gdpu.com;
public class User {
private String username;
private String password;
private String chinesename;
private String sex;
private String rank;
/**
* @return username
*/
public String getUsername() {
return username;
}
/**
* @param username 要设置的 username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return password
*/
public String getPassword() {
return password;
}
/**
* @param password 要设置的 password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return chinesename
*/
public String getChinesename() {
return chinesename;
}
/**
* @param chinsesname 要设置的 chinesename
*/
public void setChinesename(String chinesename) {
this.chinesename = chinesename;
}
/**
* @return sex
*/
public String getSex() {
return sex;
}
/**
* @param sex 要设置的 sex
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* @return rank
*/
public String getRank() {
return rank;
}
/**
* @param rank 要设置的 rank
*/
public void setRank(String rank) {
this.rank = rank;
}
}
Login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta charset=UTF-8>
<title>GDPU官网登录页面</title>
</head>
<body>
<form action ="./login.html" method ="post">
GDPU账号:<input type = "text" style = "width220px;" name = "username"/><br><br>
账号密码 :<input type = "password" style = "width220px;" name = "password"/><br><br>
<input type = "submit" style = "width:220px;" value = "登录"/>
</form>
</body>
</html>
Hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="gdpu.com.User" pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>LOGIN.hello</title>
</head>
<body>
Welcome:当前登录用户:
<br>
<%
User user = (User)session.getAttribute("user");
%>
<%=user.getChinesename()%>
<br>
<%=user.getSex()%>
<br>
<%=user.getRank()%>
</body>
</html>
Error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>LOGIN.error</title>
</head>
<body>
UserID or password is wrong
</body>
</html>
连接数据库参考代码:
//说明:需要在头部引入java.sql.*包。
try {
Class.forName("com.mysql.jdbc.Driver"); //驱动程序名
String url = "jdbc:mysql://localhost:3306/chg"; //数据库名
String username = "root"; //数据库用户名
String password = "root"; //数据库用户密码
Connection conn = DriverManager.getConnection(url, username,
password); //连接状态
if (conn != null) {
out.print("数据库连接成功!");
out.print("<br />");
Statement stmt = null;
ResultSet rs = null;
stmt = conn.createStatement();
String sql = "SELECT * FROM teachers;"; //查询语句
rs = stmt.executeQuery(sql);
out.print("查询结果:");
out.print("<br />");
while (rs.next()) {
out.println(rs.getString(1)+rs.getString(2)+"<br>"); //将查询结果输出
}
} else {
out.print("连接失败!");
}
} catch (Exception e) {
out.print("数据库连接异常!" + e.getStackTrace().toString());
e.printStackTrace(new java.io.PrintWriter(out));
}