学习峰哥Jsp教程自学笔记,峰哥Java学习路线:http://www.java1234.com/javaxuexiluxiantu.html
1、过滤器:
1)简介:过滤无效请求,避免非正常逻辑进入相关页面。
2)实现:
新建过滤器类,实现Filter接口,如下:
package com.demo.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.HttpSession;
public class LoginFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
Object object = session.getAttribute("currentUser");
String path = request.getServletPath();
if (object == null && path.indexOf("login")<0) {
request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
}else {
//继续执行,不进行重定向。
filterChain.doFilter(servletRequest,servletResponse);
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
过滤器在web.xml注册:
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.demo.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样就可以实现过滤,*表示所有的请求都经过监听器
2,监听器:
1)简介:
监听web 事件;如application,session,request值得增加,删除,与变化。
2)实现:
新建类监听,三个监听分别如下:
package com.demo.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class ApplicationAttributeListener implements ServletContextAttributeListener{
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("Application添加的属性:"+ servletContextAttributeEvent.getName()+",属性值:" + servletContextAttributeEvent.getValue());
}
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("Application删除的属性:"+ servletContextAttributeEvent.getName()+",属性值:" + servletContextAttributeEvent.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("Application修改的属性:"+ servletContextAttributeEvent.getName()+",属性值:" + servletContextAttributeEvent.getValue());
}
}
package com.demo.listener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
public class RequesterAttributeLitener implements ServletRequestAttributeListener{
public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("Requeste添加的属性:"+ servletRequestAttributeEvent.getName()+",属性值:" + servletRequestAttributeEvent.getValue());
}
public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("Requeste删除的属性:"+ servletRequestAttributeEvent.getName()+",属性值:" + servletRequestAttributeEvent.getValue());
}
public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("Requeste修改的属性:"+ servletRequestAttributeEvent.getName()+",属性值:" + servletRequestAttributeEvent.getValue());
}
}
package com.demo.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class SessionAttributeListener implements HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("Session添加的属性:"+ httpSessionBindingEvent.getName()+",属性值:" + httpSessionBindingEvent.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("Session删除的属性:"+ httpSessionBindingEvent.getName()+",属性值:" + httpSessionBindingEvent.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("Session修改的属性:"+ httpSessionBindingEvent.getName()+",属性值:" + httpSessionBindingEvent.getValue());
}
}
<listener>
<listener-class>
com.demo.listener.SessionAttributeListener
</listener-class>
</listener>
<listener>
<listener-class>
com.demo.listener.ApplicationAttributeListener
</listener-class>
</listener>
<listener>
<listener-class>
com.demo.listener.RequesterAttributeLitener
</listener-class>
</listener>
实现的servlet如下:
package com.demo.web;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ListenerServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
this.doPost(httpServletRequest, httpServletResponse);
}
@Override
protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
httpServletResponse.setCharacterEncoding("utf-8");
HttpSession session = httpServletRequest.getSession();
ServletContext application = httpServletRequest.getServletContext();
httpServletRequest.setAttribute("request", "request值1");
session.setAttribute("session", "session值1");
application.setAttribute("application", "application值1");
httpServletRequest.setAttribute("request", "request值2");
session.setAttribute("session", "session值2");
application.setAttribute("application", "application值2");
httpServletRequest.removeAttribute("request");
session.removeAttribute("session");
application.removeAttribute("application");
httpServletResponse.getWriter().print("操作完成");
}
}
<servlet>
<servlet-name>ListenerServlet</servlet-name>
<servlet-class>com.demo.web.ListenerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ListenerServlet</servlet-name>
<url-pattern>/listener</url-pattern>
</servlet-mapping>
访问的效果如下:
访问效果如下:
打印日志如下:
过滤器及监听器介绍到此。