对已经完成的基于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="登录"/>&nbsp;&nbsp;

      </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="查找"/>&nbsp;&nbsp;

      </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语言相关知识,积累了一定的经验,之后可以多阅读他人做的程序,学习更多写代码不同的方法,提高自己的创新思维和能力。

posted @ 2021-03-09 23:55  junnie  阅读(185)  评论(0)    收藏  举报