`

servlet 总结

 
阅读更多

1、web原理与规范____________________________________________________________

 

只要实现http规范,自己也可以

CGI (Common Gateway Interface) 通用网关接口

       CGI可以用任何一种语言编写,通过socket接受处理数据,是单线程的。

servlet是多线程的,servlet规范声明其不是线程安全的。如果声明为单线程,容器会维护多个实例。

servlet其实是个socket,只要实现http规范,自己也可以.

2、servlet____________________________________________________________

 

一、配置文件:

只需要web.xml一个配置文件。

二、原理:

serverSocket接受到socket.getInputStream,解析string,生成request,匹配web.xml配置选择需要的servlet或者filter,listener,进行业务处理,根据socket.getOutputStream生成response。返回给浏览器。

session原理

       http是无状态的协议,服务器不会自动维护客户的上下文信息,

       session保存上下文信息,针对每一个用户,保存在服务器,通过SessionID来区分不同的客户

       session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,

       wireshark拦截的Cookie: JSESSIONID=C69B3053C575ECC8C7FCAF7D189A4FD1

       session cookie存储于浏览器内存中,不能跨窗口使用,即JSESSIONID,

       浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,可以在地址栏看到sessionid=KWJHUG6JJM65HS2K6之类的字符串。

       persistent cookie存储在硬盘            

 

ServletContext接口没有实现类。

       ServletContext对象生命周期是Application,只在web应用被关闭的时候才被销毁。

       定义了一系列方法用于与相应的servlet容器通信,比如:获得文件的MIME类型,分派请求,或者是向日志文件写日志等。 

       每一个web-app只能有一个ServletContext,web-app可以是一个放置有web   application   文件的文件夹,也可以是一个.war的文件。 

       ServletContext对象包含在ServletConfig对象之中,ServletConfig对象在servlet初始化时提供servlet对象。 

 

ServletConfig接口有实现类

servlet有三大类:

一、标准servlet 继承HttpServlet extends GenericServlet  implements ServletConfig

二、监听器-常用的监听接口-------单用户登录器extends HttpSessionListener

       ServletContextListener

       ServletContextAttributeListener

       HttpSessionListener

               sessionCreated,sessionDestroyed

       HttpSessionAttributeListener

               attributeAdded,        attributeRemoved,attributeReplaced

三、filter--责任链

org.apache.struts2.dispatcher.FilterDispatcher implements StrutsStatics, Filter

public class CharacterEncodingFilter implements Filter {

 

三、web.xml 中 servlet, spring, filter, listenr的加载顺序

       listener >> filter >> servlet >> spring

 

四,web.xml中的url-pattern匹配

       1.     精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。

       2.     最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此 时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。

       3.     扩展(通配符)匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action

       4.     如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet。

       1、以”/’开头和以”/*”结尾的是用来做路径映射的。

       2、以前缀”*.”开头的是用来做扩展映射的。

       3、“/” 是用来定义default servlet映射的。

       4、 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action

       所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

 

3、struts与serlvet____________________________________________________________

struts2的void方法serlvet方式的。

        HttpServletResponse response = ServletActionContext.getResponse();

        response.setContentType("text/json; charset=GBK");

        response.getWriter().print(this.getMessage());

 

struts流程:

1 客户端(浏览器socket)初始化一个指向Servlet容器(例如Tomcat)的请求

2 这个请求经过一系列的过滤器(Filter)(如ActionContextCleanUp)

3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6 ActionProxy创建一个ActionInvocation的实例。

7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果(可以是:jsp,另外的一个Action链)

 

struts源代码:

 

 

public class StrutsServlet extends HttpServlet 
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
                ActionMapping mapping = prepare.findActionMapping(request, response, true);
                if (mapping == null) {
                        chain.doFilter(request, response);
                } else {
                        execute.executeAction(request, response, mapping);
                }
        }
}
 

 

 

 

 

 

分享到:
评论

相关推荐

    jsp Servlet总结

    jsp servlet开发总结文档 jsp Servlet总结jsp Servlet总结jsp Servlet总结

    servlet总结

    ### servlet总结:深入理解Web开发的核心组件 #### 一、Servlet概述 Servlet是一种用Java语言编写的Web组件,运行在Web服务器端,主要用于扩展Web服务器的功能,产生动态网页输出。Servlet自诞生以来,逐渐取代了...

    servlet总结(自己从网上下载的)

    - **请求转发**:在`Servlet总结02——请求转发.docx`中详细介绍了,请求转发是服务器端内部的跳转,使用`RequestDispatcher`的`forward()`方法,转发后,URL不会改变,多个资源可以共享同一个请求对象。...

    servlet总结的基础和重要的知识点

    servlet总结 都是基础和重要的知识点 大学软件专业的上课资料 想巩固基础知识请进

    Tomcat开发jsp与servlet总结参考.pdf

    Tomcat开发jsp与servlet总结参考.pdf

    Tomcat开发jsp与servlet总结.pdf

    总结来说,开发JSP与Servlet的过程涉及多个方面,包括编写代码、配置部署描述文件、编译、部署和测试,最终通过服务器的配置来访问Web应用。Tomcat作为中间件,提供了运行这些应用所需的环境和框架支持。在开发过程...

    北大青鸟Servlet总结

    【Servlet 概述】 Servlet 是 JavaEE(Java Platform, Enterprise Edition)中的核心组件,主要用于处理 Web 应用中的服务器端任务。它与 HTTP 协议紧密相关,能够处理 HTTP 请求的各个方面,包括接收请求、处理...

    servlet笔记,servlet的总结

    ### Servlet核心知识点详解 #### 一、Servlet简介与工作原理 Servlet是一种运行在服务器端的Java应用程序,专门用于处理客户端的HTTP请求并生成响应。它作为Web应用的重要组成部分,能够提供动态网页服务,实现了...

    Servlet基础知识总结

    ### Servlet基础知识总结 #### 一、Servlet简介 Servlet是一种服务器端的小程序,是Java平台上的一个重要的技术之一,主要用于处理客户端的HTTP请求并生成动态网页。Servlet是在服务器端运行的,能够提供各种服务...

    servlet ppt

    Java web 开发,servlet ppt 教学用,自学用

    JSP与Servlet 技术总结

    JSP & Servlet 技术总结 JSP技术总结 2 1. JSP页面元素构成 2 2. JSP脚本元素 2 3. 注释 2 4. JSP指令 2 5. JSP动作元素 3 6. JSP内置对象 5 7. JSP内置对象及其作用 5 8. 获取页面参数 5 9. 重定向...

    servlet与jsp总结

    自己总结的servlet与jsp部分 希望对大家有所帮助

    web Servlet 的知识总结

    黑马 程序员-方立勋老师-javaWeb开发-03-Web开发入门和 04-Servlet开发和ServletConfig和ServletContex对象 知识总结记录

    JavaWeb-Servlet学习与总结

    ### JavaWeb-Servlet学习与总结 #### 一、Servlet简介 Servlet是一种运行在服务器端的小程序,主要用于处理客户端发送的HTTP请求并返回响应结果。它作为Java Web开发的基础技术之一,广泛应用于各种Web应用程序中...

    jsp servlet面试题总结

    jsp servlet面试题总结 jsp 中九大内置对象为: 1. request 请求对象,类型 javax.servlet.ServletRequest,作用域 Request 2. response 响应对象,类型 javax.servlet.SrvletResponse,作用域 Page 3. ...

    用于servlet程序的开发的servlet-jar包

    总结来说,`servlet.jar.zip`是用于开发基于Java Servlet的web应用的重要工具,其中的`servlet.jar`提供了Servlet API,使得开发者能够编写与HTTP服务器交互的Java代码,而`license.txt`则需仔细阅读,遵循其中的...

    javaEE servlet-api

    总结一下,Java EE的Servlet API是Web开发的关键组件,它定义了处理HTTP请求的规范,使得开发者能够用Java语言构建动态Web应用。通过`servlet-api.jar`库,我们可以实现Servlet和Filter,参与到HTTP请求的生命周期中...

Global site tag (gtag.js) - Google Analytics