Web应用开发课程--实验十过滤器作业(中文乱码过滤、登录过滤器和密码修改过滤器)

        上了一个学期的Web结课了,这是最后一次作业,有的地方写的不是那么完善,也是在前面作业基础上做的,针对性不是很强但很全面。从html、css、js、servlet、连接mysql、jsp、javabean、jsp,再到最后的过滤器。一开始只是为了达到作业要求,后续也就懒得改了。

        这个项目可以实现登录功能、注册功能、显示专家信息、修改信息、修改密码、注销账号和退出。项目结构如下,使用了Servlet、JavaBean、Filter.        

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" id="WebApp_ID" version="3.0">
  <display-name>exp10</display-name>
   <context-param>
  	<param-name>charSet</param-name>
  	<param-value>UTF-8</param-value>
  </context-param>
   <servlet>
  	<servlet-name>login</servlet-name>
  	<servlet-class>exp08.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>login</servlet-name>
 		<url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>
   <servlet>
  	<servlet-name>register</servlet-name>
  	<servlet-class>exp08.servlet.RegisterServlet</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>register</servlet-name>
 		<url-pattern>/RegisterServlet</url-pattern>
  </servlet-mapping>
   <servlet>
  	<servlet-name>expert</servlet-name>
  	<servlet-class>exp08.servlet.ShowExpert</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>expert</servlet-name>
 		<url-pattern>/ShowExpert</url-pattern>
  </servlet-mapping>
   <servlet>
  	<servlet-name>update</servlet-name>
  	<servlet-class>exp08.servlet.UpdateServlet</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>update</servlet-name>
 		<url-pattern>/UpdateServlet</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>update1</servlet-name>
  	<servlet-class>exp08.servlet.UpdateServlet1</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>update1</servlet-name>
 		<url-pattern>/UpdateServlet1</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>quit</servlet-name>
  	<servlet-class>exp08.servlet.QuitServlet</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>quit</servlet-name>
 		<url-pattern>/QuitServlet</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>logout</servlet-name>
  	<servlet-class>exp08.servlet.LogoutServlet</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>logout</servlet-name>
 		<url-pattern>/LogoutServlet</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>Updatepwd</servlet-name>
  	<servlet-class>exp08.servlet.UpdatepwdServlet</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>Updatepwd</servlet-name>
 		<url-pattern>/UpdatepwdServlet</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>VerificationServlet</servlet-name>
  	<servlet-class>exp08.servlet.VerificationServlet</servlet-class>
  </servlet>
  <servlet-mapping>
 		<servlet-name>VerificationServlet</servlet-name>
 		<url-pattern>/VerificationServlet</url-pattern>
  </servlet-mapping>
  
  
   <filter>
  	<filter-name>encode</filter-name>
  	<filter-class>exp10.filter.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>encode</filter-name>
  	<url-pattern>/*</url-pattern>
  	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
	<dispatcher>INCLUDE</dispatcher>
	<dispatcher>ERROR</dispatcher>	
  </filter-mapping>
  <filter>
  	<filter-name>LoginFilter</filter-name>
  	<filter-class>exp10.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>LoginFilter</filter-name>
  	<url-pattern>/ucenter/*</url-pattern>
  	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
	<dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  <filter>
  	<filter-name>PwdFilter</filter-name>
  	<filter-class>exp10.filter.PwdFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>PwdFilter</filter-name>
  	<url-pattern>/UpdatepwdServlet</url-pattern>
  	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
	<dispatcher>INCLUDE</dispatcher>
  </filter-mapping>


  
  <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>
    <jsp-config>
  	<jsp-property-group>
  		<description>encodingConfiguration</description>
  		<display-name>html encoding</display-name>
  		<url-pattern>*.html</url-pattern>
  		<page-encoding>UTF-8</page-encoding>
  	</jsp-property-group>
</jsp-config>
</web-app>

 mysql数据库为his,里面有两个表expert和user

 

 

 一、登录功能

首先是首页index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="js/load.js"></script>
<title>HIS</title>
<link type="text/css" rel="stylesheet" href="css/main.css">

</head>
<body>
<div class="header"><%@ include file="inc/header.html"%></div>
<div class="top"><%@ include  file="inc/top.html"%></div>
<div class="clearfix">
	<div class="column sidemenu"><%@ include file="inc/sidemenu.html"%></div>
	<div class="column content"><%@ include file="inc/content.html"%></div>
</div>
<div class="footer"><%@ include file="inc/footer.html"%></div>
</body>
</html>

jsp读取的文件太多,全放上来比较麻烦,这里放之前做的html文件,图片可以自己去找。

css文件放到最下面

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
<link type="text/css" rel="stylesheet" href="css/style1.css" />
<style>
/*文字部分*/
.content {
  width: 50%;
  text-indent:2em;
}

/*右侧图片*/
.img-container {
  float: right;
  width: 25%;
  padding: 5px;
}
</style>
</head>
<body>
<!-- 顶部第一行三张图和搜索框 -->
<div class="header">
  	<img src="images/logo.jpg" alt="Tulip" style="width:40%">
	<input type="text" id="searchpic">
  <div class="search">
  	<img src="images/search.jpg" alt="search" style="width:8%">
  </div>
  <div class="English">
	<img src="images/eng.png" alt="English" style="width:90%">
  </div>
</div>

<!-- 第二行标题、图片和登录按钮 -->
<div class="topmenu">
<script>
window.onload = function(){
	var myVar = setInterval(function(){
		var d = new Date();
    	var t = d.toLocaleString();
    	document.getElementById("time").innerHTML = t;
    }, 1000);
	
	if(document.getElementById("submenutree")){
	    var ultags=document.getElementById("submenutree").getElementsByTagName("ul");
	    for (var t=0; t<ultags.length; t++){
			ultags[t].parentNode.onmouseover=function(){
			this.getElementsByTagName("ul")[0].style.display="block"
			}
			ultags[t].parentNode.onmouseout=function(){
			this.getElementsByTagName("ul")[0].style.display="none"
			}
			}
		}
};
</script>
 	<table>
		<tr>
			<td class="l"><span id="time"></span></td>
			<td class="m">欢迎使用HIS系统(web版)<img src="images/his1.jpg"></td>
			<td class="r" id="logandreg"><span><a href="login.html">[&nbsp;&nbsp;登&nbsp;&nbsp;&nbsp;录&nbsp;&nbsp;]
			</a>|&nbsp;<a href="register.html">[&nbsp;&nbsp;注&nbsp;&nbsp;&nbsp;册&nbsp;&nbsp;]</a></span></td>
		</tr>
	</table>  
</div>

<!-- 中间部分:左边的目录+中间的文字+右边的图片 -->
<div class="clearfix">
  <div class="column sidemenu">
  	<ul id="submenutree">
      <li><a href="index.html">首&nbsp;页</a></li>
      <li><a href="yygh.html" >预&nbsp;约&nbsp;挂&nbsp;号</a>
      	<ul>
      		<li><a href="#"><span>预约需知</span></a></li>
      		<li><a href="#"><span>电话预约</span></a></li>
      		<li><a href="#"><span>在线预约</span></a></li>
      		<li><a href="#"><span>预约查询</span></a></li>
      	</ul>
      </li>
      <li><a href="ShowExpert">专&nbsp;家&nbsp;介&nbsp;绍</a>
      	<ul>
      		<li><a href="ShowExpert?did=A"><span>神经内科</span></a></li>
      		<li><a href="ShowExpert?did=B"><span>泌尿外科</span></a></li>
      		<li><a href="ShowExpert?did=C"><span>骨科</span></a></li>
      		<li><a href="ShowExpert?did=D"><span>皮肤科</span></a></li>
      	</ul>
      </li>
      <li><a href="czxx.html">出&nbsp;诊&nbsp;信&nbsp;息</a>
      	<ul>
      		<li><a href="#"><span>周一</span></a></li>
      		<li><a href="#"><span>周二</span></a></li>
      		<li><a href="#"><span>周三</span></a></li>
      		<li><a href="#"><span>周四</span></a></li>
      		<li><a href="#"><span>周五</span></a></li>
      		<li><a href="#"><span>周六</span></a></li>
      		<li><a href="#"><span>周日</span></a></li>
      	</ul>
      </li>
      <li><a href="jjxz.html">检&nbsp;验&nbsp;检&nbsp;查&nbsp;须&nbsp;知</a>
      	<ul>
      		<li><a href="#"><span>预约需知</span></a></li>
      		<li><a href="#"><span>电话预约</span></a></li>
      		<li><a href="#"><span>在线预约</span></a></li>
      		<li><a href="#"><span>预约查询</span></a></li>
      	</ul>
      </li>
      <li><a href="cjwt.html">常&nbsp;见&nbsp;问&nbsp;题</a>
      	<ul>
      		<li><a href="#"><span>B超须知</span></a></li>
      		<li><a href="#"><span>人流须知</span></a></li>
      		<li><a href="#"><span>静脉造影须知</span></a></li>
      		<li><a href="#"><span>钡餐须知</span></a></li>
      	</ul>
      </li>
      <li><a href="yydh.html">医&nbsp;院&nbsp;导&nbsp;航</a>
      	<ul>
      		<li><a href="#"><span>一楼</span></a></li>
      		<li><a href="#"><span>二楼</span></a></li>
      		<li><a href="#"><span>三楼</span></a></li>
      		<li><a href="#"><span>四楼</span></a></li>
      	</ul>
      </li>
	</ul>
  </div>

  <div class="column content">
       <p>实现了医院门诊部挂号处所需的各种功能,包括门诊安排的管理,号表的生成及维护,门诊预约管理和挂号处理,同时提供了病人信息的查询和有关挂号工作的统计功能。支持预约、限量、不限量、分时挂号。(功能主要包括:门诊安排、挂号处理、统计与查询等。)<p>
       <p>本系统集划价收费功能于一体,费别及收费系数的自定义能力,灵活多样的输入方法,简单易学,允许项目在价表中不存在时手工划价,与门诊药房的库存关联,无药报警,集中统一的价表管理,支持医院"一卡通",集成医疗保险收费项目控制,费用自动分比例,费用按医疗保险政策分段统计等。<p>
       <p>门诊药房管理系统是医院门诊处方药品的发放中心。可以根据药房的不同类别分:中药房、西药房、中成药等不同药房。药房与药库连用,直接从药库出库转药房入库,与门诊收费连接直接显示划价处方药品列表。可对患者处方查询;可对任意时间段的发药量查询;可对午间时间段的发药患者查询。<p>
   </div>
   <div class="img-container">
       <img src="images/his.jpg" alt="his" style="width:101%">
   </div>
</div>

<!-- 底部 -->
<div class="footer">
  <p>地址:袁家岗友谊路1号  电话:023-68</p>
  <p>附属第一医院版权所有</p>
</div>
</body>
</html>

登录页面如下,注意把上面的登录跳转链接改一下。

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">	
	window.onload = function(){
		var myVar = setInterval(function(){
			var d = new Date();
	    	var t = d.toLocaleString();
	    	document.getElementById("time").innerHTML = t;
	    }, 1000);		
	};
</script>
<title>Insert title here</title>
<link type="text/css" rel="stylesheet" href="css/main.css">
<style type="text/css">
	.content {
		text-align:center;	
		padding:20px 0;
		}
	.content div {
		width:450px;
		height:200px;
		border:solid thin red;
		margin:0 auto;	}
	
	.content div img {
		float: left;
		width:150px;
		height:198px;
		margin:0;
		padding:0;}
	.content div table{
		float: left;}
	.content div table td{
		height:50px;}
</style>
</head>
<body>
<div class="header"><%@ include file="inc/header.html"%></div>
<div class="top"><%@ include  file="inc/top.html"%></div>

<div class="clearfix">
  
  <div class="column content">
   <%if(session.getAttribute("msg")!=null){
	   	out.println("<p>"+(String)session.getAttribute("msg")+"</p>");
   	} %>
   	
   		<div>
   		<img alt="register" src="images/regi.jpg">
   		<form action="LoginServlet" method="get">
   		<table>
   			<tr><td>用 户:<input type="text" name="uname"></td></tr>
   			<tr><td>密 码:<input type="password" name="upwd"></td></tr>
   			<tr><td><input type="submit" value="登录"> </td></tr>
   		</table>
   		</form>
   	</div>
  </div>  
</div>

<div class="footer"><%@ include file="inc/footer.html"%></div>
</body>
</html>

然后是登录功能的实现

LoginServlet.java

package exp08.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.DBBean;
import exp08.bean.UserBean;
import exp08.bean.UiBean;

public class LoginServlet extends HttpServlet{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		HttpSession session = req.getSession();
		String name = req.getParameter("uname");
		String pwd = req.getParameter("upwd");
		String[] param = new String[2];
		param[0] = name;
		param[1] = pwd;
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		String sql = "select * from user where username = ? and password = ?";
		
		try {
			conn = DBBean.getConn();
			rs = DBBean.getRs(sql, param, conn);
			if(rs.next()) {
				UiBean ui=new UiBean();
				UserBean ubean = new UserBean();
				ui.setlState(true);
				ui.setSid(session.getId());
				ubean.setId(rs.getString("id"));
				ubean.setUsername(rs.getString("username"));
				ubean.setPassword(rs.getString("password"));
				ubean.setRealname(rs.getString("realName"));
				ubean.setSex(rs.getString("sex"));
				ubean.setTelcode(rs.getString("telcode"));
				ubean.setAddress(rs.getString("address"));
				ubean.setCdh(rs.getString("cdh"));
				session.setAttribute("ui", ui);
				session.setAttribute("ubean", ubean);
				if(session.getAttribute("msg")!=null) 
					session.removeAttribute("msg");
				req.getRequestDispatcher("ucenter/uinfo.jsp").forward(req, resp);
				return;
			}else {
				session.setAttribute("msg", "用户名或密码错误,请重新登录");
				if(session.getAttribute("ui")!=null) session.removeAttribute("ui");
				if(session.getAttribute("ubean")!=null) session.removeAttribute("ubean");
				resp.sendRedirect("login.jsp");
				return;
			}			
		}catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				DBBean.close(rs, pst, conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}

	
}

二、注册功能

注册页面

register.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link type="text/css" rel="stylesheet" href="css/main.css">

<style type="text/css">
.column {float:none;text-align:center;}
	
.content {margin:0 auto;width:40%;
		text-align:center;	
		padding-top: 50px;}
.content div {
		border:solid thin red;
		margin:0 auto;
		padding:5px;	}
		
/*注册*/
.reg {
	font-size: 16px;
	line-height: 35px;
	text-align:left;
}
.reg input[type="text"], .reg input[type="password"] {
	border: 1px solid #ccc;
	padding: 5px;
	color: #999;
}
.reg select {
	padding: 5px;
	height: 30px;
	margin-right: 5px;
	color: #999;
}

.reg textarea {
	color: #999;
}
.gray12 {
	font-size: 12px;
	color: #999;
}
.bian {
	margin-top: 10px;
}
.bian:hover {
	filter: alpha(opacity=50); /*IE滤镜,透明度50%*/
	-moz-opacity: 0.5; /*Firefox私有,透明度50%*/
	opacity: 0.5;/*其他,透明度50%*/
}	
</style>
</head>
<body>
<div class="header">
  <div id="sdiv">
  	<input id="sinput" type="text">
  	<img id ="search" alt="search" src="images/search.jpg">
  	<input id="sbutton" type="image" src="images/eng.png">
  </div>
</div>
<div class="top">
	<table>
		<tr>
			<td class="l"><span id="time"></span></td>
			<td class="m">欢迎使用HIS系统(web版)<img src="images/his1.jpg"></td>
			<td class="r"><span><a href="login.html">[&nbsp;&nbsp;登&nbsp;&nbsp;&nbsp;录&nbsp;&nbsp;]
			</a>|&nbsp;<a href="register.html">[&nbsp;&nbsp;注&nbsp;&nbsp;&nbsp;册&nbsp;&nbsp;]</a></span></td>
		</tr>
	</table>  
</div>

<div class="clearfix">  

  <div class="column content">
   	<div>
   		<table width="100%" border="0" cellspacing="0" cellpadding="0">
     <tr>
      <td valign="top"><h2 align="center">用户注册</h2>
        <hr width="90%" align="center" color="#ccc"/></td>
      
     </tr>
     <tr>
       <td valign="top">
       <form action="RegisterServlet" method="get">
       <table width="90%" border="0" cellspacing="0" cellpadding="0" 
               class="reg" align="center">
          <tr>
            <td width="100px">用户名:</td>
            <td><input name="userName" type="text" id="userName" value="请输入用户名" /></td>
          </tr>          
          <tr>
            <td>设置密码:</td>
            <td><input name="userPwd" type="password" id="userPwd" /></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td class="gray12">密码由6-10个字符组成&nbsp;</td>
          </tr>
          <tr>
            <td>确认密码:</td>
            <td><input name="userRePwd" type="password" id="userRePwd" /></td>
          </tr>
          <tr>
            <td>真实姓名:</td>
            <td><input name="realName" type="text" id="realName" 
                     value="请输入真实姓名" /></td>
          </tr>
          <tr>
            <td>您的性别:</td>
            <td><input type="radio" name="sex" value="男" checked/>男
            <input type="radio" name="sex" value="女" checked/>女</td>
          </tr>
          
          <tr>
            <td>您的手机:</td>
            <td><input name="mobile" type="text" id="mobile"
                     value="请输入您的手机号" /></td>
          </tr>
          <tr>
            <td>您的住址:</td>
            <td><input name="company" type="text" id="company"
                      value="请输入您的住址" /></td>
          </tr>

          <tr>
            <td>是否有慢病:</td>
            <td><input name="mbs" type="checkbox" value="高血压" />高血压
                 <input name="mbs" type="checkbox" value="糖尿病" />糖尿病
                 <input name="mbs" type="checkbox" value="冠心病" />冠心病</td>
          </tr>
          
          <tr>
             <td>&nbsp;</td>
             <td><input type="submit" name="button" value="提交" /></td>
          </tr>
        </table>
       </form></td>
     </tr>
   </table>  
   	</div>
  </div>
</div>

<div class="footer">
  <p>地址:袁家岗友谊路1号  电话:023-68</p>
  <p>附属第一医院版权所有 渝ICP备12004889号</p>
</div>
</body>
</html>

然后是注册功能的实现

package exp08.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.DBBean;

public class RegisterServlet extends HttpServlet{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		HttpSession session = req.getSession();
		String name = req.getParameter("userName");
		String[] param = new String[1];
		param[0] = name;
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		String sql = "select * from user where username = ?";
		
		try {
			conn = DBBean.getConn();
			rs = DBBean.getRs(sql, param, conn);
			if(rs.next()) {
				session.setAttribute("msg", "注册失败,该用户已存在");
				if(session.getAttribute("ubean")!=null) session.removeAttribute("ubean");
					resp.sendRedirect("login.jsp");
				return;
			}else {
				rs.close();
				sql="insert into user (username,password,realname,sex,telcode,address,cdh) value(?,?,?,?,?,?,?)";
				String[] param1 = new String[7];
				param1[0] = req.getParameter("userName");
				param1[1] = req.getParameter("userPwd");
				param1[2] = req.getParameter("realName");
				param1[3] = req.getParameter("sex");
				param1[4] = req.getParameter("mobile");
				param1[5] = req.getParameter("company");
				param1[6] = req.getParameter("mbs");
				conn = DBBean.getConn();
				DBBean.getRss(sql, param1, conn);
				session.setAttribute("msg", "注册成功!");
				req.getRequestDispatcher("login.jsp").forward(req, resp);
				return;
			}			
		}catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				DBBean.close(rs, pst, conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}

	
}

        特别注意,登录和注册都是要和数据库连接的,我用的是mysql,连接代码就在servlet里面,注意改一下数据库的名字、用户名和密码,而且还用了JavaBean,也就是连接数据库的时候调用的是javabean里的方法。数据库里的表的信息要和代码里的对应,这里把后面修改密码、显示专家信息的代码都一起放下面:

DBBean.java

package exp08.bean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBBean {
	private final static String DRIVER = "com.mysql.cj.jdbc.Driver";
	private final static String URL = "jdbc:mysql://localhost:3306/his?userSSL=false&serverTimezone=Asia/Shanghai";
	private final static String USER = "root";
	private final static String PASSWORD = "12345678";
	
	public static Connection getConn() throws ClassNotFoundException, SQLException {
		Class.forName(DRIVER);
		Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
		return conn;
	}
	
	public static ResultSet getRs(String sql,String[] param,Connection conn) throws SQLException {
		PreparedStatement pst = conn.prepareStatement(sql);
		if(param!=null) {
			for(int i=1;i<=param.length;i++) {
				pst.setString(i, param[i-1]);
			}
		}
		ResultSet rs = pst.executeQuery();
		return rs;
	}
	public static void getRss(String sql,String[] param1,Connection conn) throws SQLException {
		PreparedStatement pst = conn.prepareStatement(sql);
		if(param1!=null) {
			for(int i=1;i<=param1.length;i++) {
				pst.setString(i, param1[i-1]);
			}
		}
		pst.executeUpdate();
		return;
	}
	
	public static void close(ResultSet rs,PreparedStatement pst,Connection conn) throws SQLException {
		if(rs!=null)rs.close();
		if(pst!=null)pst.close();
		if(conn!=null)conn.close();
	}
}

UseBean.java

package exp08.bean;

public class UserBean {
	private String id;
	private String username;
	private String password;
	private String realname;
	private String sex;
	private String telcode;
	private String address;
	private String cdh;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String name) {
		this.username = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getRealname() {
		return realname;
	}
	public void setRealname(String realname) {
		this.realname = realname;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getTelcode() {
		return telcode;
	}
	public void setTelcode(String telcode) {
		this.telcode = telcode;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getCdh() {
		return cdh;
	}
	public void setCdh(String cdh) {
		this.cdh = cdh;
	}
	
}

PwdBean.java

package exp08.bean;

public class PwdBean {
	private String password;
	private String newpwd;
	private String renewpwd;
	
	public String getNewpwd() {
		return newpwd;
	}
	public void setNewpwd(String newpwd) {
		this.newpwd = newpwd;
	}
	public String getRenewpwd() {
		return renewpwd;
	}
	public void setRenewpwd(String renewpwd) {
		this.renewpwd = renewpwd;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

ExpertBean.java

package exp08.bean;

public class ExpertBean {
	private String id;
	private String name;
	private String department;
	private String eclass;
	private String info;
	private String picture;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDepartment() {
		return department;
	}
	public void setDepartment(String department) {
		this.department = department;
	}
	public String getEclass() {
		return eclass;
	}
	public void setEclass(String eclass) {
		this.eclass = eclass;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	public String getPicture() {
		return picture;
	}
	public void setPicture(String picture) {
		this.picture = picture;
	}		
	
}

UiBean.java

package exp08.bean;

public class UiBean {
	private String sid;
	private boolean lState;
	public String getSid() {
		return sid;
	}
	public void setSid(String sid) {
		this.sid = sid;
	}
	public boolean islState() {
		return lState;
	}
	public void setlState(boolean lState) {
		this.lState = lState;
	}
	
	
}

三、显示专家介绍页面

点击index.html的专家介绍即可跳转到专家介绍页面

这里只是在读取数据库中的专家信息并保存,转发到listexp.jsp中显示

ShowExpert.java

package exp08.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import exp08.bean.DBBean;
import exp08.bean.ExpertBean;

/**
 * Servlet implementation class ShowExpServlet
 */

public class ShowExpert extends HttpServlet {
	private static final long serialVersionUID = 1L;      
    

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String did = request.getParameter("did");
		
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		String sql = "";
		try {
			conn = DBBean.getConn();
			if(did==null) {
				sql = "select * from expert";
				rs = DBBean.getRs(sql,null, conn);
			}else {
				sql = "select * from expert where left(id,1) = ?";
				String[] param = new String[1];
				param[0] = did;
				rs = DBBean.getRs(sql, param, conn);
			}			
			ArrayList<ExpertBean> ebeans = new ArrayList<ExpertBean>();
			while(rs.next()) {
				ExpertBean ebean = new ExpertBean();
	        	ebean.setId(rs.getString("id"));
	        	ebean.setName(rs.getString("name"));
	        	ebean.setDepartment(rs.getString("department"));
	        	ebean.setEclass(rs.getString("eclass"));
	        	ebean.setInfo(rs.getString("info"));
	        	ebean.setPicture(rs.getString("picture"));
	        	ebeans.add(ebean);
			}
	        request.setAttribute("ebeans", ebeans);
	        request.getRequestDispatcher("listexp.jsp").forward(request, response);
	        return;
	        	        
		}catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				DBBean.close(rs, pst, conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				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);
	}

}

listexp.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList,exp08.bean.ExpertBean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>HIS</title>
<link type="text/css" rel="stylesheet" href="css/main.css">
<link type="text/css" rel="stylesheet" href="css/one.css">

</head>
<body>
<div class="header"><%@ include file="inc/header.html"%></div>
<div class="clearfix" style="border-top:solid thin #777;">
	<div class="content">
		<table width="100%" border="0" cellspacing="0" cellpadding="0">
			<tr><td valign="top"><h3 align="center">专家信息列表</h3>
			
			<tr><td valign="top">
				<table width="100%" border="0" cellspacing="0" cellpadding="0" class="reg" align="center">
					<tr><td class="d1">编号</td><td class="d1">姓名</td><td class="d1">科室</td><td class="d1">职称</td><td class="d2">简介</td><td class="d1">照片</td></tr>
	<%
	ArrayList<ExpertBean> ebeans = new ArrayList<ExpertBean>();
	if(request.getAttribute("ebeans")!=null)
		ebeans = (ArrayList<ExpertBean>)request.getAttribute("ebeans");
	for(ExpertBean ebean:ebeans){
		out.println("<tr><td>"+ebean.getId()+"</td><td>"+ebean.getName()+"</td><td>"+ebean.getDepartment()+"</td><td>"+ebean.getEclass()+"</td><td class=\"info\">"+ebean.getInfo()+"</td><td><img src=\"images/"+ebean.getPicture()+"\"></td></tr>");
	}
	%>					
				</table></td></tr></table>		
	</div>
</div>
<div class="footer"><%@ include file="inc/footer.html"%></div>
</body>
</html>

结果如下,点击姓名即可进入专家个人信息页面 

 四、信息操作功能(修改信息、注销账号、退出)

登录成功后显示个人信息界面,如下

uinfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="exp08.bean.UserBean" %>
<%
UserBean ubean = null;
if(session.getAttribute("ubean")!=null){
	ubean = (UserBean)session.getAttribute("ubean");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>HIS</title>
<link type="text/css" rel="stylesheet" href="css/main.css">
<link type="text/css" rel="stylesheet" href="css/reg.css">
</head>
<body>

<div class="header"><%@ include file="/inc/header.html"%></div>
<div class="clearfix">
	<div class="content">
		<p style="text-align:right;">
		<%=ubean.getUsername()%>,欢迎光临个人中心&nbsp;&nbsp;&nbsp;<a href="ucenter/edit.jsp">修改信息</a>&nbsp;&nbsp;&nbsp;<a href="ucenter/pwd.jsp">修改密码</a>&nbsp;&nbsp;&nbsp;<a href="QuitServlet">注销账户</a>&nbsp;&nbsp;&nbsp;<a href="LogoutServlet">退出登录</a>&nbsp;&nbsp;&nbsp;</p>
		<div><table width="100%" border="0" cellspacing="0" cellpadding="0">
			<tr><td valign="top"><h3 align="center">用户个人信息</h3>
			<hr width="90%" align="center" color="#ccc"/></td></tr>
			<tr><td valign="top">
				<table width="60%" border="0" cellspacing="0" cellpadding="0" class="reg" align="center">
					<tr><td width="100px">用户名:</td><td><%=ubean.getUsername() %></td></tr>
					<tr><td>密码:</td><td><%=ubean.getPassword() %></td></tr>
					<tr><td>真实姓名:</td><td><%=ubean.getRealname() %></td></tr>
					<tr><td>性别:</td><td><%=ubean.getSex() %></td></tr>
					<tr><td>手机号码:</td><td><%=ubean.getTelcode() %></td></tr>
					<tr><td>家庭地址:</td><td><%=ubean.getAddress() %></td></tr>
					<tr><td>慢病史:</td><td><%=ubean.getCdh() %></td></tr>
				</table></td></tr>
			</table>
		</div>
	</div>
</div>
<div class="footer"><%@ include file="/inc/footer.html"%></div>
</body>
</html>

 点击修改信息,进入edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="ubean" class="exp08.bean.UserBean" scope="session"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>HIS</title>
<link type="text/css" rel="stylesheet" href="../css/main.css">
<link type="text/css" rel="stylesheet" href="../css/reg.css">
</head>
<body>

<div class="header"><%@ include file="../inc/header.html"%></div>
<div class="clearfix">
	<div class="content">
		<p style="text-align:right;">
		<jsp:getProperty property="username" name="ubean"/>,欢迎光临个人中心&nbsp;&nbsp;&nbsp;<a href="ucenter/edit.jsp">修改信息</a>&nbsp;&nbsp;&nbsp;<a href="ucenter/pwd.jsp">修改密码</a>&nbsp;&nbsp;&nbsp;<a href="QuitServlet">注销账户</a>&nbsp;&nbsp;&nbsp;<a href="LogoutServlet">退出登录</a>&nbsp;&nbsp;&nbsp;</p>
		<div><form action="../UpdateServlet" method="get">
			<table width="100%" border="0" cellspacing="0" cellpadding="0">
			<tr><td valign="top"><h3 align="center">修改信息</h3>
			<hr width="90%" align="center" color="#ccc"/></td></tr>
			<tr><td valign="top">
				<table width="60%" border="0" cellspacing="0" cellpadding="0" class="reg" align="center">
					<tr><td>用户名:</td><td><%=ubean.getUsername() %></td></tr>
					<tr><td>密码:</td><td><%=ubean.getPassword() %></td></tr>
					<tr><td>真实姓名:</td><td><%=ubean.getRealname() %></td></tr>
					<tr><td>性别:</td><td><%=ubean.getSex() %></td></tr>
					<tr><td>手机号码:</td><td><input name="telcode" type="text" value=<%=ubean.getTelcode() %>></td></tr>
					<tr><td>家庭地址:</td><td><input name="address" type="text" value=<%=ubean.getAddress() %>></td></tr>
					<tr><td>慢病史:</td><td>
					<input type="checkbox" name="cdh" value="高血压" checked>高血压
					<input type="checkbox" name="cdh" value="糖尿病" checked>糖尿病
					<input type="checkbox" name="cdh" value="冠心病" checked>冠心病</td></tr>
					<tr><td></td><td><input type="submit" value="确认修改"></td></tr>
			</table></td></tr></table>
			</form>	
		</div>
	</div>
</div>
<div class="footer"><%@ include file="/inc/footer.html"%></div>
</body>
</html>

页面如下

确认后提交到UpdateServlet

package exp08.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.DBBean;
import exp08.bean.UserBean;

public class UpdateServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
		HttpSession session=request.getSession();
		PrintWriter out=response.getWriter();
		UserBean ubean = null;
		if(session.getAttribute("ubean")!=null){
			ubean = (UserBean)session.getAttribute("ubean");
		}
		if(ubean.getId()==null) {
			out.println("<!DOCTYPE html>");
			out.println("<html>");
			out.println("<head>");
			out.println("<meta charset=\"UTF-8\">");
			out.println("<title>用户个人信息</title>");
			out.println("<link type='text/css' rel='stylesheet' href='css/res.css'>");
			out.println("</head>");
			out.println("<body>");
			out.println("<div class=\"content\">");
			out.println("<p>请先完成登录</p>");
			out.println("<p><a href='login.html'>&lt;&lt;&lt;返回登录</a></p>");
			out.println("</div></body>");
			out.println("/html");
			out.flush();
			out.close();
			return;}
		else {
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		String[] param1 = new String[4];
		String cdh="";
		param1[0] = request.getParameter("telcode");
		param1[1] = request.getParameter("address");
		if(request.getParameterValues("cdh")!=null) {
			String[] mbs=request.getParameterValues("cdh");
			for(int i=0;i<mbs.length;i++) {
				cdh=cdh+mbs[i]+",";
			}
			cdh=cdh.substring(0,cdh.length()-1);
		}
		param1[2] = cdh;
		param1[3] = ubean.getId();
		String sql = "update user set telcode = ?,address = ?,cdh = ? where id = ?";
		
		try {
			conn = DBBean.getConn();
			DBBean.getRss(sql, param1, conn);
			request.getRequestDispatcher("UpdateServlet1").forward(request,response);
			return;
		}catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				DBBean.close(rs, pst, conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}}
		

 UpdateServlet只是修改了数据库,修改完后要重新显示个人信息需要把信息保存到session里在输出,又写了一个UpdateServlet1

package exp08.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.DBBean;
import exp08.bean.UserBean;

public class UpdateServlet1 extends HttpServlet{

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
		HttpSession session=request.getSession();
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		UserBean ubean = null;
		if(session.getAttribute("ubean")!=null){
			ubean = (UserBean)session.getAttribute("ubean");
		}
		String[] param = new String[1];
		param[0] = ubean.getId();
		String sql="select * from user where id = ?";
		
		try {
			conn = DBBean.getConn();
			rs=DBBean.getRs(sql, param, conn);
			if(rs.next()) {
			ubean.setId(rs.getString("id"));
			ubean.setUsername(rs.getString("username"));
			ubean.setPassword(rs.getString("password"));
			ubean.setRealname(rs.getString("realName"));
			ubean.setSex(rs.getString("sex"));
			ubean.setTelcode(rs.getString("telcode"));
			ubean.setAddress(rs.getString("address"));
			ubean.setCdh(rs.getString("cdh"));
			session.setAttribute("ubean", ubean);
			request.getRequestDispatcher("ucenter/uinfo.jsp").forward(request,response);
			return;
			}
		}catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				DBBean.close(rs, pst, conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
		

到这里修改信息的操作实现了,接下来是修改密码。

pwd.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="ubean" class="exp08.bean.UserBean" scope="session"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>HIS</title>
<link type="text/css" rel="stylesheet" href="../css/main.css">
<link type="text/css" rel="stylesheet" href="../css/reg.css">
</head>
<body>

<div class="header"><%@ include file="../inc/header.html"%></div>
<div class="clearfix">
	<div class="content">
	 <%if(session.getAttribute("msg")!=null){
	   	out.println("<p>"+(String)session.getAttribute("msg")+"</p>");
   	} %>
		<p style="text-align:right;">
		<%=ubean.getUsername()%>,欢迎光临个人中心&nbsp;&nbsp;&nbsp;<a href="edit.jsp">修改信息</a>&nbsp;&nbsp;&nbsp;<a href="pwd.jsp">修改密码</a>&nbsp;&nbsp;&nbsp;<a href="../QuitServlet">注销账户</a>&nbsp;&nbsp;&nbsp;<a href="../LogoutServlet">退出登录</a>&nbsp;&nbsp;&nbsp;</p>
		<div><form action="../VerificationServlet" method="get">
			<table width="100%" border="0" cellspacing="0" cellpadding="0">
			<tr><td valign="top"><h3 align="center">修改信息</h3>
			<hr width="90%" align="center" color="#ccc"/></td></tr>
			<tr><td valign="top">
				<table width="60%" border="0" cellspacing="0" cellpadding="0" class="reg" align="center">
					<tr><td>原密码:</td><td><%=ubean.getPassword() %></td></tr>
					<tr><td>新密码:</td><td><input name="newpwd" type="password"></td></tr>
					<tr><td>确认密码:</td><td><input name="renewpwd" type="password"></td></tr>
					<tr><td></td><td><input type="submit" value="确认修改"></td></tr>
			</table></td></tr></table>
			</form>	
		</div>
	</div>
</div>
<div class="footer"><%@ include file="/inc/footer.html"%></div>
</body>
</html>

点击修改密码,页面如下: 

pwd.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="ubean" class="exp08.bean.UserBean" scope="session"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>HIS</title>
<link type="text/css" rel="stylesheet" href="../css/main.css">
<link type="text/css" rel="stylesheet" href="../css/reg.css">
</head>
<body>

<div class="header"><%@ include file="../inc/header.html"%></div>
<div class="clearfix">
	<div class="content">
	 <%if(session.getAttribute("msg")!=null){
	   	out.println("<p>"+(String)session.getAttribute("msg")+"</p>");
   	} %>
		<p style="text-align:right;">
		<%=ubean.getUsername()%>,欢迎光临个人中心&nbsp;&nbsp;&nbsp;<a href="edit.jsp">修改信息</a>&nbsp;&nbsp;&nbsp;<a href="pwd.jsp">修改密码</a>&nbsp;&nbsp;&nbsp;<a href="../QuitServlet">注销账户</a>&nbsp;&nbsp;&nbsp;<a href="../LogoutServlet">退出登录</a>&nbsp;&nbsp;&nbsp;</p>
		<div><form action="../VerificationServlet" method="get">
			<table width="100%" border="0" cellspacing="0" cellpadding="0">
			<tr><td valign="top"><h3 align="center">修改信息</h3>
			<hr width="90%" align="center" color="#ccc"/></td></tr>
			<tr><td valign="top">
				<table width="60%" border="0" cellspacing="0" cellpadding="0" class="reg" align="center">
					<tr><td>原密码:</td><td><%=ubean.getPassword() %></td></tr>
					<tr><td>新密码:</td><td><input name="newpwd" type="password"></td></tr>
					<tr><td>确认密码:</td><td><input name="renewpwd" type="password"></td></tr>
					<tr><td></td><td><input type="submit" value="确认修改"></td></tr>
			</table></td></tr></table>
			</form>	
		</div>
	</div>
</div>
<div class="footer"><%@ include file="/inc/footer.html"%></div>
</body>
</html>

 修改完后用过滤器进行密码验证

VerificationServlet.java

package exp08.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.DBBean;
import exp08.bean.UserBean;
import exp08.bean.PwdBean;

public class VerificationServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
		HttpSession session=request.getSession();
		UserBean ubean = null;
		if(session.getAttribute("ubean")!=null){
			ubean = (UserBean)session.getAttribute("ubean");
		}
		if(ubean==null) {
			session.setAttribute("msg", "您还未登录,请先登录!");
			if(session.getAttribute("ui")!=null) session.removeAttribute("ui");
			if(session.getAttribute("ubean")!=null) session.removeAttribute("ubean");
			response.sendRedirect("login.jsp");
			return;}
		else {
		PwdBean pbean = new PwdBean();
		String newpwd = request.getParameter("newpwd");
		String renewpwd = request.getParameter("renewpwd");
		pbean.setNewpwd(newpwd);
		pbean.setRenewpwd(renewpwd);
		session.setAttribute("pbean", pbean);
		request.getRequestDispatcher("UpdatepwdServlet").forward(request,response);
		return;
		}
		}
}
		

UpdatepwdServlet.java

package exp08.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.DBBean;
import exp08.bean.UserBean;
import exp08.bean.PwdBean;

public class UpdatepwdServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
		HttpSession session=request.getSession();
		UserBean ubean = null;
		if(session.getAttribute("ubean")!=null){
			ubean = (UserBean)session.getAttribute("ubean");
		}
		if(ubean==null) {
			session.setAttribute("msg", "您还未登录,请先登录!");
			if(session.getAttribute("ui")!=null) session.removeAttribute("ui");
			if(session.getAttribute("ubean")!=null) session.removeAttribute("ubean");
			response.sendRedirect("login.jsp");
			return;}
		else {
		PwdBean pbean = (PwdBean)session.getAttribute("pbean"); 
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		String newpwd = pbean.getNewpwd();
		String[] param1 = new String[2];
		param1[0] = newpwd;
		param1[1] = ubean.getId();
		String sql = "update user set password = ? where id = ?";
		
		try {
		conn = DBBean.getConn();
		DBBean.getRss(sql, param1, conn);
		session.setAttribute("pbean", pbean);
		request.getRequestDispatcher("UpdateServlet1").forward(request,response);
		return;
		}catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				DBBean.close(rs, pst, conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		}
}}
		

之后即可跳转到个人信息页面,到这里修改密码操作完成。接下来是注销账户操作,就是把数据库里的用户信息删除。

QuitServlet.java

package exp08.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.DBBean;
import exp08.bean.UserBean;

public class QuitServlet extends HttpServlet{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
		PrintWriter out=response.getWriter();
		HttpSession session=request.getSession();
		UserBean ubean = null;
		if(session.getAttribute("ubean")!=null){
			ubean = (UserBean)session.getAttribute("ubean");
		}
		if(ubean==null) {
			out.println("<!DOCTYPE html>");
			out.println("<html>");
			out.println("<head>");
			out.println("<meta charset=\"UTF-8\">");
			out.println("<title>用户个人信息</title>");
			out.println("<link type='text/css' rel='stylesheet' href='css/res.css'>");
			out.println("</head>");
			out.println("<body>");
			out.println("<div class=\"content\">");
			out.println("<p>请先完成登录</p>");
			out.println("<p><a href='login.jsp'>&lt;&lt;&lt;返回登录</a></p>");
			out.println("</div></body>");
			out.println("/html");
			out.flush();
			out.close();
			return;
		}else {	
			Connection conn = null;
			PreparedStatement pst = null;
			ResultSet rs = null;
			String[] param1 = new String[1];
			param1[0]=ubean.getId();
			String sql="delete from user where id = ?";
			
			try {
				conn = DBBean.getConn();
				DBBean.getRss(sql, param1, conn);
				request.getRequestDispatcher("LogoutServlet").forward(request,response);
				return;
			}catch (ClassNotFoundException | SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					DBBean.close(rs, pst, conn);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
	}
}}

然后是退出操作

LogoutServlet.java

package exp08.servlet;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LogoutServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
		request.getSession().invalidate();
		response.sendRedirect("index.jsp");
		return;
	}
	protected void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
		doGet(request,response);
	}
}

五、过滤器

分别有三个过滤器,分别是乱码过滤、登录过滤、密码验证过滤,登录过滤是为了防止用户不登录直接跳转到网页,密码验证过滤是为了使修改密码不为空且两次密码相同。

EncodingFilter.java

package  exp10.filter; 
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class EncodingFilter implements Filter {
	private String charSet;
	public void init(FilterConfig config) throws ServletException {
		this.charSet=config.getServletContext().getInitParameter("charSet");
					}
	public void destroy() {}
	public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request=(HttpServletRequest)req;
		HttpServletResponse response=(HttpServletResponse)res;		
		request.setCharacterEncoding(charSet);
		if (!((HttpServletRequest) request).getServletPath().contains("css")) {
			response.setContentType("text/html; charset=" + charSet);
		}
		chain.doFilter(request, response);
	}
} 

LoginFilter.java

package exp10.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.UiBean;

public class LoginFilter implements Filter{

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request=(HttpServletRequest)req;
		HttpServletResponse response=(HttpServletResponse)res;
		HttpSession session=request.getSession();
		UiBean ui=(UiBean)session.getAttribute("ui");
		if(ui!=null&&ui.islState()==true&&ui.getSid()==session.getId()){
			chain.doFilter(req, res);
		}else{
			if(session.getAttribute("msg")==null) session.setAttribute("msg", "你还没有登录,请登录后再访问用户中心");
			if(session.getAttribute("ui")!=null) session.removeAttribute("ui");
			if(session.getAttribute("ubean")!=null) session.removeAttribute("ubean");
			response.sendRedirect(req.getServletContext().getContextPath()+"/login.jsp");
			return;
		}
		
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

}

PwdFilter.java

package exp10.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import exp08.bean.PwdBean;
import exp08.bean.UiBean;
import exp08.servlet.VerificationServlet;

public class PwdFilter implements Filter{

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request=(HttpServletRequest)req;
		HttpServletResponse response=(HttpServletResponse)res;
		HttpSession session=request.getSession();
		PwdBean pbean=(PwdBean)session.getAttribute("pbean");
		UiBean ui=(UiBean)session.getAttribute("ui");
		if(!(pbean.getNewpwd().equals(""))&&pbean.getNewpwd().equals(pbean.getRenewpwd())&&ui.getSid()==session.getId()){
			chain.doFilter(req, res);
		}else{
			session.setAttribute("msg", "两次输入的密码不相同,请重新输入!");
			response.sendRedirect(req.getServletContext().getContextPath()+"/ucenter/pwd.jsp");
			return;
		}
		
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

}

六、css

style1.css

@charset "UTF-8";
/*IE浏览器默认的盒子属性值。*/
* {
  box-sizing: border-box;
}

body {
  margin: 0;
}
.header {
  text-align: left;
  padding: 2px;
}
/*搜索框*/
.header input {
	position: relative;
    left: 250px;
    bottom: 20px;
}
/*放大镜图片*/
.search {
	position: absolute;
	left: 1050px;
	top: 45px;
}

/* “英文版”图片 */
.English {
	position: absolute;
	left: 1200px;
	top: 50px;
}
.topmenu {
  color: white;
  background-color: #777;
  font-size: 25px;
}

.topmenu img {
	width:45px;
		height:39px;
		vertical-align:middle;
		border: solid thin #777;
		}
.topmenu table{text-align: center;
			width:100%;}
/*以下四句是实验三所做修改*/
.topmenu table td.l {
	width: 20%;
				}
.topmenu table td.m {
	width:60%;
	}
	
.topmenu table td.r {
	width:20%;
	background-color: white;
	}
	
#time  {
  	font-weight:bolder;
  	font-size:x-large;
		}
		
.topmenu table a {
	vertical-align:middle;
	font-size:14px;	
	text-decoration: none;}

.sidemenu {
  display:block;
  word-break:keep-all;/* 不换行 */
  white-space:nowrap;/* 不换行 */
  width: 25%;
  
}

/*消除列表前面的点*/
.sidemenu ul {
  list-style-type: none;
  text-align:center;
}

.sidemenu ul li {
	position: relative;
	background-color:gray;
}

/*刷新自己显示标题*/
.sidemenu ul li ul {
	position:absolute;
	left:145px;
	margin-top:-41px;
	margin-left: 150px;
	width:150px;	
	display:none;	
}

.sidemenu ul li ul li {margin:0;}
.sidemenu ul li ul li a {
	background-color: #f7f7f7;
	border-left: #dfdfdf 2px solid;
	border-right: #dfdfdf 2px solid;
}

/*跳转按钮属性(这里把a标签设置成块元素,有宽、高和内外边距)*/
.sidemenu li a {
  margin-bottom: 4px;
  display: block;
  padding: 8px;
  background-color: #eee;
  text-decoration: none;
  color: #666;
}

/*鼠标放在a标签上会发上变化*/
.sidemenu li a:hover {
  background-color: #555;
  color: white;
}


/*消除漂浮带来的位置影响*/
.clearfix::after {
  content: "";
  clear: both;
  display: table;
}
/*派生选择器控制目录+文字,使其漂浮*/
.column {
  float: left;
  padding: 5px;
}
/*最底部版权栏*/
.footer {
  background-color: #444;
  color: white;
  text-align:center;
  padding: 15px;
}

main.css

@charset "UTF-8";
* {
  box-sizing: border-box;
}

body {
  text-align:center;
  margin: 0;
}

.header {
  background-color: white;
  background-image:url("../images/logo.jpg");
  background-repeat:no-repeat;
  text-align: right;
  height: 68px;
}

.footer {
  background-color: #444;
  color: white;
  padding: 10px;
  text-align: center;
}
.footer p {
  text-align: center;
  font-size:14px;}
.top {
  color: white;
  background-color: #777;
  font-size: 25px;
}

.top img {width:45px;
		height:39px;
		vertical-align:middle;
		border: solid thin #777;
		}
.top table{text-align: center;
			width:100%;}
/*以下四句是实验三所做修改*/
.top table td.l {width: 20%;
				background-color: white;}
.top table td.m {width:60%;}
.top table td.r {
	width:20%;
	background-color: white;}
#time  {font-size:14px;
		color:black;}
.top table a {
	vertical-align:middle;
	font-size:14px;	
	text-decoration: none;}

.column {
  float: left;
  padding: 15px;  
}

.clearfix::after {
  content: "";
  clear: both;
  display: table;
}

.sidemenu {
  display:block;
  word-break:keep-all;/* 不换行 */
  white-space:nowrap;/* 不换行 */
  width: 15%;
}

.content {
  width: 70%;
}
.content img{
	width:400px;
	height:300px;
	float:right;
	margin:0 10px 10px 10px;
}

.content p{
	width:80%;
	text-indent: 2em;	
}
.sidemenu ul {
  list-style-type: none;
  margin: 0;
  padding: 0;  
  width:150px;
}

.sidemenu ul li {
	position: relative;
}

.sidemenu ul li ul {
	position: absolute;
	margin-top:-41px;
	margin-left: 150px;
	width:150px;
	display:none;		
}

.sidemenu ul li ul li {margin:0;}
.sidemenu ul li ul li a {
	background-color: #f7f7f7;
	border-left: #dfdfdf 2px solid;
	border-right: #dfdfdf 2px solid;
}
.sidemenu li a {
  margin-bottom: 4px;
  display: block;
  padding: 8px;
  text-decoration: none;
  color:black;
  
}

.sidemenu li a:hover {
  color:red;
}


#sdiv {
	width:500px;
	height:30px;
	position: absolute;
	top:19px;
	left:700px; 
	}

#search {width:30px;
		height:30px;
		vertical-align:middle;}
		
#sbutton {		
		height:30px;
		margin-left: 50px;
		vertical-align:middle;}
		
#sinput {height:30px;
		vertical-align:middle;
		}

one.css

@charset "UTF-8";


.content {
	margin:0 auto;
	width:80%;
}
.content table{
	border-collapse: collapse;
	text-align:center;	
}
.content table tr {
	border-bottom: solid thin black;
}
.content table img {
	width:70px;
	height:90px;
}
.content table tr td.d1{
	width:10%;
}
.content table tr td.d2{
	width:50%;
}
.content table tr td.info{
	text-align:left;
	text-indent:2em;
}

reg.css

@charset "UTF-8";
/*注册*/
.content {margin:0 auto;width:70%;
		text-align:center;	
		padding: 20px 0;}
.content div {
		border:solid thin red;
		margin:0 auto;
		padding:5px;	}
.reg {
	font-size: 16px;
	line-height: 35px;
	text-align:left;
}
.reg input[type="text"], .reg input[type="password"] {
	border: 1px solid #ccc;
	padding: 5px;
	color: #999;
}
.reg select {
	padding: 5px;
	height: 30px;
	margin-right: 5px;
	color: #999;
}
.reg textarea {
	color: #999;
}
.gray12 {
	font-size: 12px;
	color: #999;
}
.bian {
	margin-top: 10px;
}
.bian:hover {
	filter: alpha(opacity=50); /*IE滤镜,透明度50%*/
	-moz-opacity: 0.5; /*Firefox私有,透明度50%*/
	opacity: 0.5;/*其他,透明度50%*/
}

猜你喜欢

转载自blog.csdn.net/m0_56540237/article/details/127906979