一、视图层
Login.Java(登录界面)
LoginCl.java(验证用户)
Wel.java(欢迎界面)
二、模型层
ConnDB.java(数据库连接)
UserBean.java(表示users表)
UserBeanCl.java(业务逻辑控制)
三、注意:
1.部署web.xml
2.添加MySQL数据库
- create database spdb;
- use spdb;
- create table users(
- userId int auto_increment primary key not null,
- username varchar(20),
- passwd varchar(30),
- email varchar(30),
- grade int
- );
四、参考代码如下:
视图层
Login.java(登录界面)
- package com.tsinghua;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.*;
- public class Login extends HttpServlet {
- public Login(){
- super();
- }
- public void init() throws ServletException{}
- public void process(HttpServletRequest req,HttpServletResponse res)
- throws ServletException,IOException{
- try{
- //中文乱码解决
- res.setContentType("text/html;charset=UTF-8");
- //业务逻辑
- PrintWriter pw=res.getWriter();
- //返回登录界面
- pw.println("<html>");
- pw.println("<body>");
- //得到erro信息
- String info=(String)req.getParameter("info");
- if(info!=null){
- pw.println("<h1>你的用户名或是密码错误!</h1><br>");
- }
- pw.println("<h1>登录界面</h1>");
- pw.println("<form action=logincl method=post>");
- pw.println("用户名:<input type=text name=username><br>");
- pw.println("密码:<input type=password name=passwd><br>");
- pw.println("<input type=checkbox name=keep value=2>两周内不用重新登录<br>");
- pw.println("<input type=submit value=loging><br>");
- pw.println("</form>");
- pw.println("</body>");
- pw.println("</html>");
- }catch(Exception ex){
- ex.printStackTrace();
- }
- }
- public void doGet(HttpServletRequest req,HttpServletResponse res)
- throws ServletException,IOException{
- process(req,res);
- }
- public void doPost(HttpServletRequest req,HttpServletResponse res)
- throws ServletException,IOException{
- process(req,res);
- }
- public void destroy(){
- super.destroy();
- }
- }
LoginCl.java(验证用户)
- package com.tsinghua;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.*;
- import java.sql.*;
- public class LoginCl extends HttpServlet {
- public LoginCl() {
- super();
- }
- public void init() throws ServletException {
- }
- // req:用于获得浏览器的信息
- // res:用于向浏览器返回信息(我就是服务器)
- public void process(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- res.setContentType("text/html;charset=UTF-8");// 处理中文乱码
- try {
- // 接收用户名和密码
- String u = req.getParameter("username");
- String p = req.getParameter("passwd");
- System.out.println("创建一个对象");
- //调用UserBeanCl,1.创建一个对象
- UserBeanCl ubc=new UserBeanCl();
- //2.使用UserBeanCl的方法
- if (ubc.checkUser(u, p)) {
- // 合法用户
- String keep = req.getParameter("keep");
- if (keep != null) {
- // 将用户名和密码保存在客户端(cookie)
- // 创建
- Cookie name = new Cookie("myname", u);
- Cookie pass = new Cookie("mypasswd", p);
- // 设置时间
- name.setMaxAge(14 * 24 * 3600);
- name.setMaxAge(14 * 24 * 3600);
- // 回写到客户端
- res.addCookie(name);
- res.addCookie(pass);
- }
- // 将用户信息存入session中
- HttpSession hs = req.getSession(true);
- hs.setMaxInactiveInterval(30);
- hs.setAttribute("name", u);
- res.sendRedirect("welcome");// 跳转
- } else {
- //不合法用户
- System.out.println("用户或密码错了");
- res.sendRedirect("login");
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- public void doGet(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void doPost(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void destroy() {
- }
- }
Wel.java(欢迎界面)
- package com.tsinghua;
- import java.io.*;
- import java.sql.*;
- import java.util.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class Wel extends HttpServlet {
- public Wel() {
- super();
- }
- public void init() throws ServletException {
- }
- public void process(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- res.setContentType("text/html;charset=UTF-8");
- PrintWriter pw = res.getWriter();
- try {
- // 从session中得到用户名
- HttpSession hs = req.getSession(true);
- String myName = (String) hs.getAttribute("name");
- String name="";
- String passwd="";
- if (myName == null) {
- // 如果session中没有用户信息,再看看有没有cookie信息
- // 从客户端得到所有的cookie信息
- Cookie[] allCookies = req.getCookies();
- int i = 0;
- // 如果allCookies不为空
- if (allCookies != null) {
- for (i = 0; i < allCookies.length; i++) {// 从中取出cookie
- // 依次取出
- Cookie temp = allCookies[i];
- if (temp.getName().equals("myname")) {
- // 得到cookie的值
- name = temp.getValue();
- } else if (temp.getName().equals("mypasswd")) {
- passwd = temp.getValue();
- }
- }
- if(!name.equals("")&&!passwd.equals("")){
- //到LoginCl.java去验证
- res.sendRedirect("logincl?username="+name+"&passwd="+passwd);
- return;
- }
- }
- // 返回登陆界面
- res.sendRedirect("login?info=error1");
- return;
- }
- // 调整格式
- pw.println("<body><center>");
- // 在servlet中显示图片
- pw.println("<img src="images/lola.gif" mce_src="images/lola.gif"><br>");
- pw.println("Welcom,hello<br>");
- pw.println("你的用户名是:" + myName);
- // 做个超链接
- pw.println("<br><a href="login" mce_href="login">返回重新登录</a>");
- // ================分页功能===============
- int pageSize = 3;// 一页显示几条记录(规定)
- int pageNow = 1;// 希望显示第几页(规定)
- // 动态的接收pageNow
- String sPageNow = req.getParameter("pageNow");
- if (sPageNow != null) {
- pageNow = Integer.parseInt(sPageNow);// 转换成整数
- }
- //调用userBeanCl
- UserBeanCl ubc=new UserBeanCl();
- ArrayList al=ubc.getResultByPage(pageNow, pageSize);
- // 表头
- pw.println("<table border=1>");
- pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
- for(int i=0;i<al.size();i++){
- UserBean ub=(UserBean)al.get(i);
- pw.println("<tr>");
- pw.println("<td>" + ub.getUserId() + "</td>");
- pw.println("<td>" + ub.getUsername() + "</td>");
- pw.println("<td>" + ub.getPasswd() + "</td>");
- pw.println("<td>" + ub.getEmail() + "</td>");
- pw.println("<td>" + ub.getGrade() + "</td>");
- pw.println("</tr>");
- }
- pw.println("</table>");
- // ================分页功能===============
- // 上一页
- if (pageNow != 1) {
- pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow - 1)
- + ">上一页</a>");
- }
- // 显示超链接
- // for (int i = 1; i <= pageCount; i++) {
- for (int i = pageNow; i <= pageNow + 4; i++) {
- pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + i + ">" + i + "</a>");
- }
- int pageCount=ubc.getPageCount();
- if (pageNow != pageCount) {
- pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow + 1)
- + ">下一页</a>");
- }
- pw.println("</center></body>");
- // String u = req.getParameter("uname");// 得到从LoginCl传递的用户名
- // String p = req.getParameter("pass");
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- public void doGet(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void doPost(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void destroy() {
- }
- }
模型层
ConnDB.java(数据库连接)
- //从数据库中得到连接
- package com.tsinghua;
- import java.sql.*;
- public class ConnDB{
- private Connection ct=null;
- public Connection getConn(){
- try{
- // 连接数据库
- Class.forName("com.mysql.jdbc.Driver");// 加载驱动
- // 得到连接
- ct = DriverManager.getConnection(
- "jdbc:mysql://localhost:3306/spdb", "root", "root");
- }catch(Exception ex){
- ex.printStackTrace();
- }
- return ct;
- }
- }
UserBean.java(表示users表)
- //这是一个UserBean<---------->users表映射
- //它的一个对象<----------->users表的一条记录对应
- //数据
- package com.tsinghua;
- public class UserBean {
- private int userId;
- private String username;
- private String passwd;
- private String email;
- private int grade;
- public int getUserId() {
- return userId;
- }
- public void setUserId(int userId) {
- this.userId = userId;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPasswd() {
- return passwd;
- }
- public void setPasswd(String passwd) {
- this.passwd = passwd;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public int getGrade() {
- return grade;
- }
- public void setGrade(int grade) {
- this.grade = grade;
- }
- }
UserBeanCl.java(业务逻辑控制)
- //这是一个处理类(处理users表)<------->操作UserBean
- //业务逻辑在这里
- package com.tsinghua;
- import java.sql.*;
- import java.util.*;
- public class UserBeanCl {
- // 业务逻辑,有一句话:能用私有的就不要用私有
- private Connection ct = null;
- private PreparedStatement ps = null;
- private ResultSet rs = null;
- private int pageCount = 0;// 共有几页(计算)
- //返回pageCount
- public int getPageCount(){
- return this.pageCount;
- }
- // 分页显示
- public ArrayList getResultByPage(int pageNow, int pageSize) {
- ArrayList al = new ArrayList();
- try {
- int rowCount = 0;// 共有几条记录(查表)
- // 首先得到rowCount
- // 连接数据库
- ConnDB cd = new ConnDB();
- ct = cd.getConn();
- ps = ct.prepareStatement("select count(*) from users");
- rs = ps.executeQuery();
- if (rs.next()) {
- rowCount = rs.getInt(1);
- }
- // 计算pageCount
- if (rowCount % pageSize == 0) {
- pageCount = rowCount / pageSize;
- } else {
- pageCount = rowCount / pageSize + 1;
- }
- ps = ct.prepareStatement("select * from users limit "
- + (pageNow - 1) * pageSize + "," + pageSize);
- // 给问号赋值
- // ps.setInt(1,(pageNow-1)*pageSize);
- // ps.setInt(2,pageSize );
- rs = ps.executeQuery();
- while (rs.next()) {
- // 将rs中的每一条记录封装到UserBean ub,实现一号线
- UserBean ub = new UserBean();
- ub.setUserId(rs.getInt(1));
- ub.setUsername(rs.getString(2));
- ub.setPasswd(rs.getString(3));
- ub.setEmail(rs.getString(4));
- ub.setGrade(rs.getInt(5));
- // 实现第二根线,将ub放入到ArrayList中
- al.add(ub);
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }finally{
- this.close();
- }
- return al;
- }
- // 验证用户
- public boolean checkUser(String u, String p) {
- boolean b = false;
- try {
- // 得到连接
- ConnDB cd = new ConnDB();
- ct = cd.getConn();
- ps = ct.prepareStatement("select passwd from users where username='"
- + u + "'");
- // ps.setString(1,u);
- rs = ps.executeQuery();
- System.out.println("进入验证");
- if (rs.next()) {
- System.out.println("有结果");
- String dbPasswd = rs.getString(1);
- if (dbPasswd.equals(p)) {
- b = true;
- }
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- } finally {
- this.close();
- }
- return b;
- }
- // 关闭资源
- public void close() {
- try {
- if (rs != null) {
- rs.close();
- rs = null;
- }
- if (ps != null) {
- ps.close();
- ps = null;
- }
- if (ct != null) {
- ct.close();
- ct = null;
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
(三)网站框架的改进
程序设计不合理,因为其将界面和业务逻辑放在一起(moddel1模式),存在以下问题:
1.在LoginCl.Java文件和Wel.java文件中都操作了数据库,它们的逻辑相似,有重复代码(潜在规则:当一段代码出现了三次或三次以上,需封装在一个类里面)
2.整个框架没有清晰地层次关系,显得非常乱
3.代码不优雅,可读性差,可维护性差
改进方案:
1.进行分层(界面层、业务逻辑层)【mv模式】
m——》model模型
v——》view视图
改进前:
改进后:
2.将常用的代码(比如连接数据库),封装到类中
为什么在UserBeanCl.java中的分页显示返回ArrayList集合,而不是直接返回ResultSet
1.如果返回ResultSet,那么我们在使用ResultSet时,是不能关闭与该ResultSet相互关联的数据库资源,从而造成资源浪费
2.如果返回ResultSet,我们只能使用rs.getInt(?),rs.getString(?)...这样的方法来得到结果,代码可读性不好,维护不方便。
根据前面的说明,我们可以利用集合,比如:ArrayList作为中转,这样,就可以尽快的关闭rs,数据库连接···,同时跟能体现面向对象编程,代码的可读性更好。
(四)用户登录系统功能改进
用户登录网站(servlet版本1.2)总结version1.2新增加的功能:
1.用户在一定时间内不需要重新登录
2.将model1——>mv模式,实现了界面和业务逻辑分离
原结构
版权声明:本文为博主原创文章,未经博主允许不得转载。
Login.Java
- package com.tsinghua;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.*;
- public class Login extends HttpServlet {
- public Login(){
- super();
- }
- public void init() throws ServletException{}
- public void process(HttpServletRequest req,HttpServletResponse res)
- throws ServletException,IOException{
- try{
- //中文乱码解决
- res.setContentType("text/html;charset=UTF-8");
- //业务逻辑
- PrintWriter pw=res.getWriter();
- //返回登录界面
- pw.println("<html>");
- pw.println("<body>");
- //得到erro信息
- String info=(String)req.getParameter("info");
- if(info!=null){
- pw.println("<h1>你的用户名或是密码错误!</h1><br>");
- }
- pw.println("<h1>登录界面</h1>");
- pw.println("<form action=logincl method=post>");
- pw.println("用户名:<input type=text name=username><br>");
- pw.println("密码:<input type=password name=passwd><br>");
- pw.println("<input type=checkbox name=keep value=2>两周内不用重新登录<br>");
- pw.println("<input type=submit value=loging><br>");
- pw.println("</form>");
- pw.println("</body>");
- pw.println("</html>");
- }catch(Exception ex){
- ex.printStackTrace();
- }
- }
- public void doGet(HttpServletRequest req,HttpServletResponse res)
- throws ServletException,IOException{
- process(req,res);
- }
- public void doPost(HttpServletRequest req,HttpServletResponse res)
- throws ServletException,IOException{
- process(req,res);
- }
- public void destroy(){
- super.destroy();
- }
- }
LoginCl.java
- package com.tsinghua;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.*;
- import java.sql.*;
- public class LoginCl extends HttpServlet {
- public LoginCl() {
- super();
- }
- public void init() throws ServletException {
- }
- // req:用于获得浏览器的信息
- // res:用于向浏览器返回信息(我就是服务器)
- public void process(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- res.setContentType("text/html;charset=UTF-8");// 处理中文乱码
- PrintWriter pw = res.getWriter();
- Connection ct = null;
- Statement sm = null;
- ResultSet rs = null;
- try {
- // 接收用户名和密码
- String u = req.getParameter("username");
- String p = req.getParameter("passwd");
- // 连接<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>
- Class.forName("com.<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a>.jdbc.Driver");// 加载驱动
- // 得到连接
- ct = DriverManager.getConnection(
- "jdbc:mysql://localhost:3306/spdb", "root", "root");
- // 创建Statement
- sm = ct.createStatement();
- // sql注入漏洞
- // rs=sm.executeQuery("select * from users where username='"+u
- // +"' and passwd='"+p+"'");
- rs = sm.executeQuery("select passwd from users where username='"
- + u + "'");
- if (rs.next()) {
- // 说明用户是存在的
- String dbPasswd = rs.getString(1);
- if (dbPasswd.equals(p)) {
- // 合法用户
- String keep = req.getParameter("keep");
- if (keep != null) {
- // 将用户名和密码保存在客户端(cookie)
- // 创建
- Cookie name = new Cookie("myname", u);
- Cookie pass = new Cookie("mypasswd", p);
- // 设置时间
- name.setMaxAge(14 * 24 * 3600);
- name.setMaxAge(14 * 24 * 3600);
- // 回写到客户端
- res.addCookie(name);
- res.addCookie(pass);
- }
- // 将用户信息存入session中
- HttpSession hs = req.getSession(true);
- hs.setMaxInactiveInterval(30);
- hs.setAttribute("name", u);
- res.sendRedirect("welcome");// 跳转
- } else {
- res.sendRedirect("login");
- }
- } else {
- // 说明用户名不存在
- res.sendRedirect("login");
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- } finally {// 按打开对象的逆序关闭对象
- try {
- if (rs != null) {
- rs.close();
- }
- if (sm != null) {
- sm.close();
- }
- if (ct != null) {
- ct.close();
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
- public void doGet(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void doPost(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void destroy() {
- }
- }
Wel.java
- package com.tsinghua;
- import java.io.*;
- import java.sql.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class Wel extends HttpServlet {
- public Wel() {
- super();
- }
- public void init() throws ServletException {
- }
- public void process(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- res.setContentType("text/html;charset=UTF-8");
- PrintWriter pw = res.getWriter();
- Connection ct = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- try {
- // 从session中得到用户名
- HttpSession hs = req.getSession(true);
- String myName = (String) hs.getAttribute("name");
- String name="";
- String passwd="";
- if (myName == null) {
- // 如果session中没有用户信息,再看看有没有cookie信息
- // 从客户端得到所有的cookie信息
- Cookie[] allCookies = req.getCookies();
- int i = 0;
- // 如果allCookies不为空
- if (allCookies != null) {
- for (i = 0; i < allCookies.length; i++) {// 从中取出cookie
- // 依次取出
- Cookie temp = allCookies[i];
- if (temp.getName().equals("myname")) {
- // 得到cookie的值
- name = temp.getValue();
- } else if (temp.getName().equals("mypasswd")) {
- passwd = temp.getValue();
- }
- }
- if(!name.equals("")&&!passwd.equals("")){
- //到LoginCl.java去验证
- res.sendRedirect("logincl?username="+name+"&passwd="+passwd);
- return;
- }
- }
- // 返回登陆界面
- res.sendRedirect("login?info=error1");
- return;
- }
- // 调整格式
- pw.println("<body><center>");
- // 在servlet中显示图片
- pw.println("<img src="images/lola.gif" mce_src="images/lola.gif"><br>");
- pw.println("Welcom,hello<br>");
- pw.println("你的用户名是:" + myName);
- // 做个超链接
- pw.println("<br><a href="login" mce_href="login">返回重新登录</a>");
- // ================分页功能===============
- int pageSize = 3;// 一页显示几条记录(规定)
- int pageNow = 1;// 希望显示第几页(规定)
- int rowCount = 0;// 共有几条记录(查表)
- int pageCount = 0;// 共有几页(计算)
- // 动态的接收pageNow
- String sPageNow = req.getParameter("pageNow");
- if (sPageNow != null) {
- pageNow = Integer.parseInt(sPageNow);// 转换成整数
- }
- // 首先得到rowCount
- // 连接数据库
- Class.forName("com.mysql.jdbc.Driver");// 加载驱动
- // 得到连接
- ct = DriverManager.getConnection(
- "jdbc:mysql://localhost:3306/spdb", "root", "root");
- ps = ct.prepareStatement("select count(*) from users");
- rs = ps.executeQuery();
- if (rs.next()) {
- rowCount = rs.getInt(1);
- }
- // 计算pageCount
- if (rowCount % pageSize == 0) {
- pageCount = rowCount / pageSize;
- } else {
- pageCount = rowCount / pageSize + 1;
- }
- ps = ct.prepareStatement("select * from users limit "
- + (pageNow - 1) * pageSize + "," + pageSize);
- // 给问号赋值
- // ps.setInt(1,(pageNow-1)*pageSize);
- // ps.setInt(2,pageSize );
- rs = ps.executeQuery();
- // 表头
- pw.println("<table border=1>");
- pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
- while (rs.next()) {
- pw.println("<tr>");
- pw.println("<td>" + rs.getInt(1) + "</td>");
- pw.println("<td>" + rs.getString(2) + "</td>");
- pw.println("<td>" + rs.getString(3) + "</td>");
- pw.println("<td>" + rs.getString(4) + "</td>");
- pw.println("<td>" + rs.getInt(5) + "</td>");
- pw.println("</tr>");
- }
- pw.println("</table>");
- // ================分页功能===============
- // 上一页
- if (pageNow != 1) {
- pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow - 1)
- + ">上一页</a>");
- }
- // 显示超链接
- // for (int i = 1; i <= pageCount; i++) {
- for (int i = pageNow; i <= pageNow + 4; i++) {
- pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + i + ">" + i + "</a>");
- }
- if (pageNow != pageCount) {
- pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow + 1)
- + ">下一页</a>");
- }
- pw.println("</center></body>");
- // String u = req.getParameter("uname");// 得到从LoginCl传递的用户名
- // String p = req.getParameter("pass");
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- public void doGet(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void doPost(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- process(req, res);
- }
- public void destroy() {
- }
- }
web.xml
- <?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">
- <servlet>
- <servlet-name>Hello</servlet-name>
- <servlet-class>com.tsinghua.Hello</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Hello</servlet-name>
- <url-pattern>/servlet/Hello</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>login</servlet-name>
- <servlet-class>com.tsinghua.Login</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>login</servlet-name>
- <url-pattern>/login</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>logincl</servlet-name>
- <servlet-class>com.tsinghua.LoginCl</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>logincl</servlet-name>
- <url-pattern>/logincl</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>welcome</servlet-name>
- <servlet-class>com.tsinghua.Wel</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>welcome</servlet-name>
- <url-pattern>/welcome</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>hiddenform1</servlet-name>
- <servlet-class>com.tsinghua.HiddenForm1</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>hiddenform1</servlet-name>
- <url-pattern>/hiddenform1</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>hiddenform2</servlet-name>
- <servlet-class>com.tsinghua.HiddenForm2</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>hiddenform2</servlet-name>
- <url-pattern>/hiddenform2</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>sessiontest1</servlet-name>
- <servlet-class>com.tsinghua.SessionTest1</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>sessiontest1</servlet-name>
- <url-pattern>/sessiontest1</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>sessiontest2</servlet-name>
- <servlet-class>com.tsinghua.SessionTest2</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>sessiontest2</servlet-name>
- <url-pattern>/sessiontest2</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>sessiontest3</servlet-name>
- <servlet-class>com.tsinghua.SessionTest3</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>sessiontest3</servlet-name>
- <url-pattern>/sessiontest3</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>cookietest1</servlet-name>
- <servlet-class>com.tsinghua.CookieTest1</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>cookietest1</servlet-name>
- <url-pattern>/cookietest1</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>cookietest2</servlet-name>
- <servlet-class>com.tsinghua.CookieTest2</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>cookietest2</servlet-name>
- <url-pattern>/cookietest2</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>cookietest3</servlet-name>
- <servlet-class>com.tsinghua.CookieTest3</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>cookietest3</servlet-name>
- <url-pattern>/cookietest3</url-pattern>
- </servlet-mapping>
- </web-app>