Syong : JavaWeb三大组件Servlet,Filter,Listener
JavaWeb三大组件
What
JavaWeb:javaweb是java中开发web的方向,包括两个部分,运行应用程序的服务器端,也称后端,已经展示给用户浏览的前端;而接下来要介绍的javaweb三大组件都是运行再后端的;
Servlet:用java编写的服务器端程序,依赖于Servlet容器(例如Tomcat),响应多个HTTP请求,生成动态Web内容
;
Filter:Filter是javaweb中的过滤器,filter负责拦截过滤HTTP请求
,可以实现URL权限访问,敏感内容过滤,编码问题,登录判断等功能;
Listener:Listener是javaweb中的监听器,listener主要负责监听ServletContext,HttpSession,ServletRequest
的创建与销毁或属性的改变。
How
1.Servlet实现:
java代码:
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取响应流,写入“my first servlet”
response.getWriter().append("my frist servlet");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用doget()方法
doGet(request, response);
}
//初始化
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("Servlet初期化" + config.getServletName());
}
//销毁
@Override
public void destroy() {
System.out.println("Servlet销毁");
}
}
xml配置文件
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 声明注册ServletDemo -->
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>com.song.demo.ServletDemo</servlet-class>
</servlet>
<!-- 配置映射路径 -->
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/MyFirst</url-pattern>
</servlet-mapping>
</web-app>
注意:
每一个servlet都要
继承HttpServlet
并重写doget()与doPost()方法,并在xml中注册servlet
与配置映射路径
;
2.Filter实现:
java代码:
public class FilterDemo implements Filter {
//初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
//主要逻辑
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//对request和response进行一些预处理
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("Filter执行前");
chain.doFilter(request, response); //放行
System.out.println("Filter执行后");
}
//销毁
@Override
public void destroy() {
}
}
xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--注册过滤器-->
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>com.syong.demo.FilterDemo</filter-class>
</filter>
<!--配置过滤器过滤路径-->
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<!--“/*”表示拦截所有的请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
注意:
每一个Filter都要
实现Filter
,重写doFilter()
方法,并在适当的时候放行chain.doFilter(request, response);
,与servlet差不多,需要注册Filter
与配置过滤路径
。
3.Listener实现:
Begin
监听器由哪些:
empty | ServletContext域 | HttpSession域 | ServletRequest域 |
---|---|---|---|
域对象的创建与销毁 |
ServletContextListener | HttpSessionListener | ServletRequestListener |
域对象内的属性变化 |
ServletContextAttributeListener | HttpSessionAttributeListener | ServletRequestAttributeListener |
After
java代码:
public class MyServletContextListener implements ServletContextListener{
@Override
//此方法是用来监听context域对象的创建的
public void contextInitialized(ServletContextEvent sce) {
//获得的就是被监听的对象---ServletContext
ServletContext servletContext = sce.getServletContext();
//getSource方法也是获得被监听的对象,是通用的方法,可以通过强转转换成ServletContext对象
Object source = sce.getSource();
System.out.println("context创建.....");
}
@Override
//此方法是用来监听context域对象的销毁的
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("context销毁.....");
}
}
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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>LinstenerPro23</display-name>
<!-- 注册(配置)我的监听器 -->
<listener>
<listener-class>com.syong.app.MyServletContextListener</listener-class>
</listener>
</web-app>
顺便一提(By the way),Spring的官方给的配置文件中,也是由一个监听器开始:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Others
1.Servlet 3.0
提供注解的方式配置Servlet,Filter,Listener,就是说,可以通过@WebServlet,@WebFilter,@WebListener注解配置,而不需要配置到xml里面;
2.Servlet是单例多线程,所以在共享资源的时候,会有多线程问题;
结束语:优秀是一种习惯。
推荐阅读
-
JavaWeb三大核心组件 - Servlet、Filter、Listener
-
JavaWeb三大组件——Filter & Listener
-
javaweb三大组件Servlet Filter Listenser
-
JavaWeb三大组件(Servlet、Filter、Listener)
-
Syong : JavaWeb三大组件Servlet,Filter,Listener
-
Servlet笔记 —— JavaWeb三大组件 Servlet,Filter,Listener
-
JavaWeb三大组件(Servlet、Filter、Listener)
-
Javaweb三大组件:Servlet、Filter和Listener
-
JavaWeb三大组件(Servlet、Filter、Listener)