实验目的:
熟悉Servlet的定义和使用方法;熟悉Servlet中session用法和Servlet 中对页面的转发;
熟悉利用过滤器实现权限控制和汉字乱码问题。
实验任务:
具体要求:
1、设计一个权限控制过滤器和一个汉字乱码过滤器,练习二个过滤器的使用方法;
2、完成web.xml文件中相应的配置;
3、设计一个登录表单;
3、利用Servlet 验证用户名和密码的正确性,利用session会话保存登录信息;
4、用户名和密码正确,则登录成功,可以实现增加用户和新闻发布的功能。
一. 项目资源管理截图如图1.1所示:
二. 项目关键代码如下:
2.1相关jsp的主要代码:
2.1.1 index.jsp的主要代码:
<body style="background-color: #D8BFD8;">
<table >
<tr>
<td>
<a href="index.jsp"> 首页 </a><br>
<a href="login.jsp"> 后台 </a><br>
</td>
<td>
<img src="img/01.jpg"width="200" height="200">
</td>
</tr>
</table>
</body>
2.1.2 Login.jsp的主要代码:
<body style="background-color: #D8BFD8;">
<form method=post action=my>
<div id="header">登录信息</div>
<table align="center">
<tr>
<td rowspan="4"><img src="img/007.jpg" /></td>
<td>用户名:</td>
<td><input type="text" name="userName" id="userName"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="userPass" id="userPass"></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" name="login" id="login"
value="登 录"> <input type="reset" name="chongzhi"
id="chongzhi" value="重 置"></td>
</tr>
</table>
</form>
</body>
2.1.3 success.jsp 的主要代码:
<body style="background-color: #D8BFD8;">
<table>
<tr>
<td>
<a href="bankgrand/success.jsp"> 首页 </a><br>
<a href="bankgrand/adduser.jsp"> 添加用户 </a><br>
<a href="bankgrand/news.jsp"> 新闻发布 </a><br>
<a href="bankgrand/quit.jsp"> 退出登录</a><br>
</td>
<td>
<img src="img/02.jpg" >
</td>
</tr>
</table>
</body>
2.1.4 quit.jsp的主要代码:
<body style="background-color: #D8BFD8;">
<%
session.invalidate();
response.sendRedirect("../index.jsp");
%>
</body>
2.1.5 news.jsp 的主要代码:
<body style="background-color: #D8BFD8;">
<a href=" bankgrand/success.jsp"> 首页 </a>
<a href=" bankgrand/quit.jsp"> 退出登录</a><br>
<img src="img/03.jpg">
</body>
2.1.6 adduser.jsp 的主要代码:
<body style="background-color: #D8BFD8;">
<a href="bankgrand/success.jsp"> 首页 </a>
<a href="bankgrand/quit.jsp"> 退出登录</a>
<br>
<form id="inf">
<table width="80%" border=0>
<tbody>
<tr>
<table cellspacing=0 cellpadding=0 width="100%" border=0>
<tbody>
<tr>
<td style="border-bottom: #333 1px dotted">
<p class=name>
<strong>请录入个人详细信息</strong>
</p>
</td>
</tr>
</tbody>
</table>
<table width="100%">
<tbody>
<tr>
<td width="20%" align=right><span
style="font-size: 30px; font-weight: normal;
color: blue">姓名: </span></td>
<td align=left><input style="font-size: 30px;
color: blue" value=<%=session.getAttribute("logininfo")%>>
</input></td>
</tr>
<tr>
<td align=right>证件类型: </td>
<td align=left><input class=textc style="width:
240px" value=身份证></td>
</tr>
<tr>
<td align=right>证件号码: </td>
<td align=left><input
> <span style="color: red"></span></td>
</tr>
<tr>
<td align=right>性别: </td>
<td> 男<input type="radio" name="gender" id="man"
value="男"checked></td>
<td>女<input type="radio" name="gender" id="femal"
value="女"></td>
</tr>
<tr>
<td align=right>民族: </td>
<td align=left><select>
【……】</td>
</tr>
<tr>
<td align=right>出生日期: </td>
<td align=left><input
placeholder="输入格式为yyyy-mm-dd"></td>
</tr>
<tr>
<td align=right>手机: </td>
<td align=left><input></td>
<tr>
<td align=right><div>
<input name="submit" type="submit" value="
确 定" />
</div></td>
</tr>
</tbody>
</table>
</tbody>
</table>
</form>
</body>
2.2相关java的主要代码:
2.2.1 EncodingFilter.java 的主要代码:
public class EncodingFilter implements Filter {
//汉字乱码过滤器
private String encod=null;
@Override
public void destroy() {
encod =null;
System.out.println("filter 销毁!");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(encod);
response.setContentType("text/html:charset="+encod);//servlet中输出汉字不乱码
chain.doFilter(request, response);
System.out.println("filter 相应消息");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.encod=filterConfig.getInitParameter("encod");
System.out.println("filter 初始化");
}
}
2.2.2 SecurityFilter.java 的主要代码:
public class SecurityFilter implements Filter {
//权限管理的过滤器
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse) response;
HttpSession session=req.getSession();
if(session.getAttribute("logininfo")!=null)
{
System.out.println("可以访问");
chain.doFilter(request, response); //放行
}
else {
System.out.println("不能访问");
resp.sendRedirect("../login.jsp");
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
2.2.3 Myseverlet.java的主要代码:
//验证用户名和密码的正确性的Servlet
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName =request.getParameter("userName");
String userPass =request.getParameter("userPass");
if(userName.equals("吴霞")&&userPass.equals("1711411203"))
{
HttpSession hs=request.getSession(true);
hs.setMaxInactiveInterval(20);//设置时长
hs.setAttribute("logininfo", userName);//创建session对象
request.getRequestDispatcher("bankgrand/success.jsp").forward(request, response);
} else {
response.sendRedirect("index.jsp");
}
}
2.3web.xml相关配置代码:
<!-- 验证用户名和密码的正确性的Servlet 的配置 -->
<servlet>
<servlet-name>my</servlet-name>
<servlet-class>ccit.wuxia.servlet.Myseverlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/my</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 汉字乱码过滤器 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>ccit.wuxia.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encod</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<!-- 权限控制过滤器 -->
<filter>
<filter-name>security</filter-name>
<filter-class>ccit.wuxia.filter.SecurityFilter</filter-class>
</filter>
<!-- filter-mapping控制执行顺序 -->
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>security</filter-name>
<url-pattern>/bankgrand/*</url-pattern>
</filter-mapping>
三.试验运行结果如图所示:
图3.1 首页界面
图3.2后台登录界面
图3.3后台管理主界面
图3.4添加用户界面
图3.5新闻发布界面
总结:我将复习过程的笔记整理成了博客,链接为: https://blog.csdn.net/qq_44825810/article/details/105517469