对已经完成的基于Servlet的登录系统进行学习与改进
在学习过程中,对同学之前做好的程序进行了阅读学习,对程序做了一些分析和小部分改进,大致过程和部分主要代码如下。
代码分析:
该程序是基于Servlet的登录系统设计与实现,完成了登录和查找两个功能。其中页面login.html,包含输入学号和密码的文本框,开发LoginServlet获取客户端发送的学生学号和密码,并判断学号和密码是否正确,并最终在浏览器中打印是否登录成功的信息提示;页面search.html,学生输入学号,开发SearchServlet,在txt文件中查找并返回该学生的基本信息页面,包括:姓名、出生日期、所属学院、专业、年级、班号。
该程序的主要代码:
Login.html (登陆页面的实现)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<form action="LoginServlet" method="post">
<table>
<tr>
<td class="label">学号:</td>
<td class="control"><input type="text" name="no"/>
</tr>
<tr>
<td class="label">密码:</td>
<td class="control"><input type="password" name="password"/>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="登录"/>
</tr>
</table>
</form>
</body>
LoginServlet.java (登录servlet实现)
package servletpackage;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
}
public void destroy() {
// TODO Auto-generated method stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");//解决中文输出乱码问题
String no =request.getParameter("no");
String password =request.getParameter("password");
PrintWriter pw=response.getWriter();
System.out.println(no+password);//测试是否得到了用户名和密码
if(no.equals("1959103")&&password.equals("123456")) {
request.getRequestDispatcher("LoginSuccess.jsp").forward(request, response);
}
else
{
request.getRequestDispatcher("LoginError.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
LoginSuccess.jsp (登陆成功页面的实现)
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPEhtml>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
登录成功!
</body>
</html>
LoginError.jsp (登录失败页面的实现)
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPEhtml>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
登录失败!
</body>
</html>
Search.html (查找页面的实现)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Search Page</title>
</head>
<body>
<form action="SearchServlet" name="RegForm" method="post">
<table>
<tr>
<td class="label">学号:</td>
<td class="control"><input type="text" name="no"/>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="查找"/>
</tr>
</table>
</form>
</body>
</html>
SearchServlet.java (查找servlet实现)
package servletpackage;
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;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import use.Student;
/**
* Servlet implementation class SearchServlet
*/
@WebServlet("/SearchServlet")
public class SearchServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SearchServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
// TODO Auto-generated method 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("UTF-8");
response.setContentType("text/html; charset=utf-8");//解决中文输出乱码问题
PrintWriter out = response.getWriter();
String no = "";
try {
//读取文件
LinkedList<Student> as = new LinkedList<Student>();
//List<Student> as = new ArrayList<Student>();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:\\Java\\1959103 大作业\\dzy1959103\\massage.txt")), "UTF-8"));
String s;
while((s = br.readLine())!=null){
String[] ts = s.split(" ");
Student stu = new Student(ts[0],ts[1],ts[2],ts[3],ts[4],ts[5],ts[6]);
as.add(stu);
}
//接收表单
no = request.getParameter("no");
//判断是否匹配
int flag = 0;
for(int i = 0;i<as.size();i++) {
if(as.get(i).judge(no)) {
out.println(as.get(i));
flag = 1;
break;
}
}
//out.print(as.get(0));
if(flag==0) {
out.print("学号输入不正确,查找信息失败!");
}
br.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
Student.java (用户信息)
package use;
public class Student {
public String no;//学号
public String name;//姓名
public String birth;//出生日期
public String college;//所属学院
public String major;//专业
public String grade;//年级
public String classno;//班号
public Student()
{
}
public Student(String no, String name, String birth, String college, String major, String grade, String classno) {
super();
this.no = no;
this.name = name;
this.birth = birth;
this.college = college;
this.major = major;
this.grade = grade;
this.classno = classno;
}
public String toString()
{
return ("学号:"+this.no+" 姓名:"+this.name+" 出生日期:"+this.birth+" 所属学院:"+this.college+" 专业:"+this.major+" 年级:"+this.grade+" 班号:"+this.classno);
}
public boolean judge(String no) {
if(this.no.equals(no))
return true;
else
return false;
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>dzy1959103</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>LoginServlet</servlet-name>
<servlet-class>servletpackage.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>
部分改进:
对于这个程序,我觉得可以增加一个修改用户信息和删除用户信息的功能,在实行时数据储存运用了数据库,主要代码如下:
增加、删除、修改、查询的具体实现代码如下:
package servletpackage;
import java.sql.*;
import java.util.Vector;
import model.Student;
public static Vector<Student> getAllStudent() throws ClassNotFoundException, SQLException { //返回所有用户
Vector<Student> students=new Vector<>();
Connection connection=getConnection();
Statement statement=connection.createStatement();
ResultSet resultSet=statement.executeQuery("select * from stu");
while(resultSet.next()) {
Student student=new Student();
student.setno(resultSet.getString(1));
student.setname(resultSet.getString(2));
student.setbirth(resultSet.getString(3));
student.setcollege(resultSet.getString(4));
student.setmajor(resultSet.getString(5));
student.setgrade(resultSet.getString(6));
student.setclassno(resultSet.getString(7));
students.add(student);
}
closeAll(connection, statement,resultSet);
return students;
}
public static Student getOneStudent(String id) throws ClassNotFoundException, SQLException { //通过学号查询用户
Student student=null;
Connection connection=getConnection();
PreparedStatement statement=connection.prepareStatement("select * from stu where no=?");
statement.setString(1, id);
ResultSet resultSet=statement.executeQuery();
while(resultSet.next()) {
student=new Student();
student.setno(resultSet.getString(1));
student.setname(resultSet.getString(2));
student.setbirth(resultSet.getString(3));
student.setcollege(resultSet.getString(4));
student.setmajor(resultSet.getString(5));
student.setgrade(resultSet.getString(6));
student.setclassno(resultSet.getString(7));
}
closeAll(connection, statement,resultSet);
return student;
}
public static void addOneStudent(Student student) throws ClassNotFoundException, SQLException { //添加用户
Connection connection=getConnection();
PreparedStatement statement=connection.prepareStatement(
"insert into stu values(?,?,?,?,?,?)");
statement.setString(1, student.getno());
statement.setString(2, student.getname());
statement.setString(3, student.getbirth());
statement.setString(4, student.getcollege());
statement.setString(5, student.getmajor());
statement.setString(6, student.getgrade());
statement.setString(7, student.getclassno());
statement.executeUpdate();
closeAll(connection, statement);
}
public static void updateOneStudent(Student student) throws ClassNotFoundException, SQLException { //修改用户信息
Connection connection=getConnection();
PreparedStatement statement=connection.prepareStatement(
"update stu set no=?,name=?,birth=?,college=?,major=?,grade=?"
+ " where classno=?");
statement.setString(1, student.getno());
statement.setString(2, student.getname());
statement.setString(3, student.getbirth());
statement.setString(4, student.getcollege());
statement.setString(5, student.getmajor());
statement.setString(6, student.getgrade());
statement.setString(7, student.getclassno());
statement.executeUpdate();
closeAll(connection, statement);
}
}
public static void delOneStudent(String id) throws ClassNotFoundException, SQLException { //删除用户信息
Connection connection=getConnection();
PreparedStatement statement=connection.prepareStatement(
"delete from stu where no=?");
statement.setString(1, id);
statement.executeUpdate();
closeAll(connection, statement);
}
修改页面实现:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>修改</title>
<link type="text/css" rel="styleSheet" href="css/style.css" />
</head>
<body>
<form action=UpdateServlet?stuNo=${one.stuNo} method="post">
<table border="1">
<tr>
<th></th>
<th>修改前</th>
<th>修改后</th>
</tr>
<tr>
<th>姓名</th>
<td> ${one.name} </td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<tr>
<th>出生日期</th>
<td> ${one.birth}</td>
<td><input type="date" name="birth"></td>
</tr>
<tr>
<th>所属学院</th>
<td> ${one.college}</td>
<td><input type="text" name="college"></td>
</tr>
<tr>
<th>专业</th>
<td> ${one.major}</td>
<td><input type="text" name="major"></td>
</tr>
<tr>
<th>年级</th>
<td> ${one.grade}</td>
<td><input type="text" name="grade"></td>
</tr>
<tr>
<th>班号</th>
<td> ${one.classno}</td>
<td><input type="number" name="classno"></td>
</tr>
<tr>
<th>操作</th>
<td><input type="button" value="返回" onclick="window.location.href='index.jsp'">
</td>
<td><input type="submit" value="保存"></td>
</tr>
</table>
</form>
</body>
</html>
删除servlet实现:
package servlets;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Vector;
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 dao.StudentDao;
import model.Student;
/**
* Servlet implementation class DeleteServlet
*/
@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DeleteServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id=request.getParameter("id");
try {
StudentDao.delOneStudent(id);
Vector<Student> students=StudentDao.getAllStudent();
request.getSession().setAttribute("students", students);
response.sendRedirect("index.jsp");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
修改servlet实现:
package servlets;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Vector;
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 dao.StudentDao;
import model.Student;
/**
* Servlet implementation class UpdateServlet
*/
@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpdateServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Student student=StudentDao.getOneStudent(request.getParameter("id"));
request.getSession().setAttribute("one", student);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
Student student=new Student();
student.setno(request.getParameter("no"));
student.setname(request.getParameter("name"));
student.setbirth(request.getParameter("birth"));
student.setcollege(request.getParameter("college"));
student.setmajor(request.getParameter("major"));
student.setgrade(request.getParameter("grade"));
student.setclassno(request.getParameter("classno"));
try {
StudentDao.updateOneStudent(student);
Vector<Student> students=StudentDao.getAllStudent();
request.getSession().setAttribute("students", students);
response.sendRedirect("index.jsp");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
本次对已经完成的代码进行阅读和改进,巩固了Java语言相关知识,积累了一定的经验,之后可以多阅读他人做的程序,学习更多写代码不同的方法,提高自己的创新思维和能力。
浙公网安备 33010602011771号