<C:forEach>标签
通常在JSP页面中,经常需要对集合对象进行循环的操作,所以该标签专门被用于迭代集合对象中的元素
<C:forEach>的多个属性
.///var属性用于指定的元素保存在page域中
.///items用于指定的集合对象
.///varStatus属性用于指定的当前迭代状态信息对象保存到page当中
.///begin属性用于指定从集合当中第几个元素开始迭代可以对他进行指定
.///step属性用于指定迭代的步长
<C:forEach>标签与迭代数组Map的集合如下:
使用属性来进行分别指定的循环起始索引,结束索引和步长如下:
<C:forEach>标签的varStatus属性有以下四点:
.///count:表示元素集合当中的序号
.///index:表示当前元素在集合当中的索引
.///first:表示当前是否为集合中的第一个元素
.///last:表示当前是否为集合当中的最后一个元素
<C:param>和<C:url>标签这个标签常用于JSP完成URL的重写或者重定等特殊功能。
.///name属性用于指定参数的名称
.///属性用于特定参数的值
<C:url>标签的多个属性
.///value属性用于指定构造的URL
.///context属性用于指定导入同一个服务器WEB应用下的名称
.///var属性用于指定构造的URL地址保存到域对象的属性名称
.///scope属性用于特指好的URL保存到域对象中
Filter过滤器
“过滤器”的基本含义,其基本的功能介绍对Servlet容器调用Servletd的过程进行拦截,从而实现一些特殊功能图示如下
实现一个Filter程序:
创建一个类用于拦截MyServlet程序:
对于过滤器MyServlet请求资源进行拦截,在配置信息当中含有多个元素如下:
.///<filter>用于注册Filter
./// <filter-name>子元素设置
.///<filter-class>用于设置Filter类的完整名称
.///<filter-mapping>跟元素用于设置一个过滤器拦截的资源
.///<filter-pattern>子元素用于匹配用户的请求
Filter映射分为两种主要如下:
- 使用通配符的”*”拦截用户的所有请求
- 拦截不同的方式的访问请求有四个如下:
.///REQUEST,INCLUDE,FORWARD,ERROR,
创建一个ForwardServlet的类用来建请求转发给first页面
First的输出页面
创建过滤器ForwardServlet,对于first的页面进行拦截
Filter链
它主要是针对某一个URl进行拦截,如果多个的Filter对一个URL进行拦截时那么就会形成一个过滤链也叫(Filter链)文字太过于繁琐直接看图如下:
创建两个新的过滤器MyFilter1和MyFilter2
FilterConfig接口
它主要是为了获取Filter程序在web文件当中的配置信息提供了一系列的配置信息方法:
创建过滤器MyFilter03来获取web中的参数:
使用Filter实现用户自动登录
编写User类:
实现登面和首页:
编写index页面,用于显示用户登录信息:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"%>
<html>
<head></head>
<center><h3>用户登录</h3></center>
<body style="text-align: center;">
<form action="${pageContext.request.contextPath }/LoginServlet"
method="post">
<table border="1" width="600px" cellpadding="0" cellspacing="0"
align="center" >
<tr>
<td height="30" align="center">用户名:</td>
<td>
<input type="text" name="username" />${errorMsg }</td>
</tr>
<tr>
<td height="30" align="center">密 码:</td>
<td>
<input type="password" name="password" /></td>
</tr>
<tr>
<td height="35" align="center">自动登录时间</td>
<td><input type="radio" name="autologin"
value="${60*60*24*31 }" />一个月
<input type="radio" name="autologin"
value="${60*60*24*31*3 }" />三个月
<input type="radio" name="autologin"
value="${60*60*24*31*6 }" />半年
<input type="radio" name="autologin"
value="${60*60*24*31*12 }" />一年
</td>
</tr>
<tr>
<td height="30" colspan="2" align="center">
<input type="submit" value="登录" />
<input type="reset" value="重置" />
</td>
</tr>
</table>
</form>
</body>
<html>
2)编写index.jsp页面,该谢冕用于显示用户的登录信息,如果没有用户登录,在index.jsp页面显示一个超链接;如果已登录,将会显示用户名,以及一个注销的超链接:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>显示登录的用户信息</title>
</head>
<body>
<br />
<center>
<h3>欢迎光临</h3>
</center>
<br />
<c:choose>
<c:when test="${sessionScope.user==null }">
<a href="http://localhost:9999/chap08/login.jsp">用户登录</a>
</c:when>
<c:otherwise>
欢迎您:${sessionScope.user.username} <a href="http://localhost:9999/chap08/LogoutServlet">退出</a>
</c:otherwise>
</c:choose>
<hr />
</body>
编写Servlet类用于处理用户的登录请求,分别处理登录正确,和密码错误:
package chapter10.entity;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获得用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//检查用户名和密码
if ("itcast".equals(username) && "123456".equals(password)) {
//登录成功
//将用户状态user对象存入session域
User user = new User();
user.setUsername(username);
user.setPassword(password);
request.getSession().setAttribute("user", user);
//发送自动登录的cookie
String autoLogin = request.getParameter("autoLogin");
if (autoLogin != null) {
//注意cookie中的加密
Cookie cookie = new Cookie(autoLogin, username + "-"+password);
cookie.setMaxAge(Integer.parseInt(autoLogin));
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
}
//跳转至首页
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else {
request.setAttribute("errerMsg", "用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
/**
* @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);
}
编写LogoutSerlvet类用于注销用户登录信息,它可以先删除保存的User对象,然后注销用户登录信息,然后自动登录的Cookie删除,最后跳转到index,jsp:
package chapter10.entity;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jdk.javadoc.doclet.Reporter;
/**
* Servlet implementation class LogoutServlet
*/
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LogoutServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//用户注销
request.getSession().removeAttribute("user");
//从客户端删除自动登录cookie
Cookie cookie=new Cookie("autologin", "msg");
cookie.setPath(request.getContextPath());
cookie.setMaxAge(0);
response.addCookie(cookie);
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
/**
* @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);
}
}
c创建过滤器
编写AutoLoginFilter类,用于拦截用户登录的请求访问,判断请求中是否包括自动登录的Cookie:
package chapter10.entity;
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.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
/**
* Servlet Filter implementation class AutoLoginFilter
*/
public class AutoLoginFilter implements Filter {
/**
* Default constructor.
*/
public AutoLoginFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
// place your code here
// pass the request along the filter chain
//获得一个名为autologin的cookie
Cookie[] cookies = request.getCookies();
String autologin = null;
for (int i = 0; cookies != null && i<cookies.length;i++) {
if ("autologin".equals(cookies[i].getValue())) {
autologin = cookies[i].getValue();
break;
}
}
if (autologin != null) {
//做自动登录
String[] parts = autologin.split("-");
String username = parts[0];
String password = parts[1];
//检查用户名和密码
if ("itcast".equals(username)&&("123456").equals(password)) {
//登录成功,将用户状态user对象存入session域
User user = new User();
user.setUsername(username);
user.setPassword(password);
request.getSession().setAttribute("user", user);
}
}
//放行
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
配置映射信息
在web中配置相关Servlet及AutoLoginFilter过滤信息
package chapter10.entity;
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.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
/**
* Servlet Filter implementation class AutoLoginFilter
*/
public class AutoLoginFilter implements Filter {
/**
* Default constructor.
*/
public AutoLoginFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
// place your code here
// pass the request along the filter chain
//获得一个名为autologin的cookie
Cookie[] cookies = request.getCookies();
String autologin = null;
for (int i = 0; cookies != null && i<cookies.length;i++) {
if ("autologin".equals(cookies[i].getValue())) {
autologin = cookies[i].getValue();
break;
}
}
if (autologin != null) {
//做自动登录
String[] parts = autologin.split("-");
String username = parts[0];
String password = parts[1];
//检查用户名和密码
if ("itcast".equals(username)&&("123456").equals(password)) {
//登录成功,将用户状态user对象存入session域
User user = new User();
user.setUsername(username);
user.setPassword(password);
request.getSession().setAttribute("user", user);
}
}
//放行
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}