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
监听器由哪些:

emptyServletContext域HttpSession域ServletRequest域
域对象的创建与销毁ServletContextListenerHttpSessionListenerServletRequestListener
域对象内的属性变化ServletContextAttributeListenerHttpSessionAttributeListenerServletRequestAttributeListener

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是单例多线程,所以在共享资源的时候,会有多线程问题;

结束语优秀是一种习惯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值