Servlet

Servlet

	public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}

init: 第一次请求Servlet时,Servlet容器就会调用这个方法,在后续的请求中,将不会再调用该方法。init收到一个ServletConfig的变量,一般配合getServletConfig。把变量用成员变量保存,让servlet其他方法可以使用。

service: 每次请求servlet时,Servlet容器都会调用这个方法。必须在这里编写要Servlet完成的相应代码。第一次请求Servlet时,Servlet容器会调用init方法和service方法。对于后续请求,则只调用service方法

destory: 要销毁Servlet时,Servlet容器就会调用这个方法。它通常发生在卸载应用程序,或者关闭Servlet容器的时候。一般来说,用来资源清理

getServletInfo: 该方法返回Servlet的描述,没多大用处

getServlet: 和init方法配合,init把ServletConfig赋值给变量。getServlet赋值调用该变量获取值。

如何注册Serlvet?

第一种方式(注解)

	@WebServlet(name = "MyServlet", urlPatterns = "/my")
public class MyServlet implements Servlet {
}

第二种方式(配置)

在这里插入图片描述
当然SimpleServlet也要继承Servlet或则子类(如HttpServlet,GenericServlet),通常开发(这个通常可能已经不用了)都是选择继承HttpServlet,重写需要的处理的请求。不要重写HttpServlet全部方法。同样也可以看到,一个Servlet可以匹配多个请求链接

	public class SimpleServlet extends HttpServlet {
	
}

ServletRequest & HttpServletRequest

ServletRequest 封装了客户端发送过来的request请求,如果是基于Http发送的请求就可以通过HttpServletRequest request = ==(HttpServletRequest) servletRequest;==来处理。详细的API请查看文档。

ServletResponse & HttpServletResponse

ServletResponse 封装了服务器响应的response请求。也可以通过如上进行转换,然后处理基于Http响应

大致处理过程

在这里插入图片描述

HttpSession

HTTP协议是无状态协议,看过《初恋50次》没有各位。就跟里面的女主角一样。当然比她还快一些。她是一天。HTTP协议是每次。那怎么办呢,要想办法让Http协议知道点什么,除了我们日常开发传递查询用的参数,上传表格这些数据外。HTTP还需要每次都要认证您这个人。为此提供了Session,Cookie。在此我就不详细讲解他们作用。只讲HttpSession对象一些执行过程

在这里插入图片描述
第一个带参数调用,getSession(false)方法返回当前HttpSession,如果没有就返回null。getSession(true)如果没有,就创建一个返回

HttpSession中的值保存在内存当中。其值不返回给客户端,而是创建一个HttpSession唯一标识,作为一个token返回给游览器,一般是作为名称JSESSIONID的cookie。当第一次发送请求的时候,游览器Cookie当中没有JESSIONID,Servlet自动通过Response返回给游览器,游览器自己保存在Cookie当中,这个操作用于用户,乃至开发者都是透明的。如下有一个神奇过程。
在这里插入图片描述
当你开启多个游览器的时候他的SessionID还是一样的,只有你把全部游览器关闭了,重新发送请求SessionID才发生变化。不妨你们自己尝试一下。

监听器(Listener)

顾名思义,监听器就是用来监听某些特定操作发生。javaweb当中有ServletContext监听器,Session监听器,ServletRequest监听器。通过名字可以知道他们分别是对于什么的监听。在此我只讲解大概经常会用到的ServletRequest监听器。其他大同小异

ServletRequestListener

监听器第一种注册方式(注解)

	@WebListener
public class MyRequestListener implements ServletRequestListener {
	@Override
    public void requestDestroyed(ServletRequestEvent sre) {
        	//销毁(或从返回池子中)ServletRequest时会调用
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
		//创建(或从池子中取出)ServletRequest时会调用
    }
}

在这里插入图片描述
看到这里你们大概知道能处理什么了吧,能拿到上下文,或者拿到请求本身。做一下预处理,用监听器来实现完全没有问题。

监听器第二种注册方式(配置)

在这里插入图片描述

SerlvetRequestAttributeListener

在这里插入图片描述
这就不用说了吧,看方法名字都知道何时处理这个监听器,用途是什么,姑且发挥各自想象力了。

过滤器(Filter)

过滤器(Filter)是指拦截请求,并对传给被请求资源的ServletRequest或ServletResponse进行处理的一个对象。过滤器可以用于登录、加密和解密、会话检查,图片转换等等。可以配置一个或多个拦截器

第一种注册方式(注解)

	@WebFilter(value = "/*",filterName = "Filter") //拦截路径
public class MyFilter2 implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        chain.doFilter(request,response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }
}

第二种注册方式(配置)

在这里插入图片描述

猜猜拦截器的执行顺序

通过配置的方式,我们知道它是按照书写排列的拦截。
在这里插入图片描述
那么通过注解配置的执行顺序又是什么呢?猜一下下面的执行结果?
在这里插入图片描述

Filter1 Filter2Extend3 Filter3 Filter4 Filter4Extend1 Filter5 

继承是没有办法打乱拦截循序,顺序还是按照排列顺序来执行。

FilterChain

FilterChain对象只有一个方法就是doFilter。doFilter作用就是放行。给下一个拦截器,如果没有就,整一个拦截链就完成。回到Serlver管理,让他匹配到Servlet对象。如果拦截不通过可以通过throw 抛出异常。打断执行的执行。

Serlvet学习到此结束,其实还有很多没有讲到,我也没有写,因为大多已经没有使用了,Serlvet自身配置安全,异步,和响应包装等等。。。想了解的同学可以自行百度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值