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总结
### servlet总结:深入理解Web开发的核心组件 #### 一、Servlet概述 Servlet是一种用Java语言编写的Web组件,运行在Web服务器端,主要用于扩展Web服务器的功能,产生动态网页输出。Servlet自诞生以来,逐渐取代了...
- **请求转发**:在`Servlet总结02——请求转发.docx`中详细介绍了,请求转发是服务器端内部的跳转,使用`RequestDispatcher`的`forward()`方法,转发后,URL不会改变,多个资源可以共享同一个请求对象。...
servlet总结 都是基础和重要的知识点 大学软件专业的上课资料 想巩固基础知识请进
Tomcat开发jsp与servlet总结参考.pdf
总结来说,开发JSP与Servlet的过程涉及多个方面,包括编写代码、配置部署描述文件、编译、部署和测试,最终通过服务器的配置来访问Web应用。Tomcat作为中间件,提供了运行这些应用所需的环境和框架支持。在开发过程...
【Servlet 概述】 Servlet 是 JavaEE(Java Platform, Enterprise Edition)中的核心组件,主要用于处理 Web 应用中的服务器端任务。它与 HTTP 协议紧密相关,能够处理 HTTP 请求的各个方面,包括接收请求、处理...
### Servlet核心知识点详解 #### 一、Servlet简介与工作原理 Servlet是一种运行在服务器端的Java应用程序,专门用于处理客户端的HTTP请求并生成响应。它作为Web应用的重要组成部分,能够提供动态网页服务,实现了...
### Servlet基础知识总结 #### 一、Servlet简介 Servlet是一种服务器端的小程序,是Java平台上的一个重要的技术之一,主要用于处理客户端的HTTP请求并生成动态网页。Servlet是在服务器端运行的,能够提供各种服务...
Java web 开发,servlet ppt 教学用,自学用
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部分 希望对大家有所帮助
黑马 程序员-方立勋老师-javaWeb开发-03-Web开发入门和 04-Servlet开发和ServletConfig和ServletContex对象 知识总结记录
### JavaWeb-Servlet学习与总结 #### 一、Servlet简介 Servlet是一种运行在服务器端的小程序,主要用于处理客户端发送的HTTP请求并返回响应结果。它作为Java Web开发的基础技术之一,广泛应用于各种Web应用程序中...
jsp servlet面试题总结 jsp 中九大内置对象为: 1. request 请求对象,类型 javax.servlet.ServletRequest,作用域 Request 2. response 响应对象,类型 javax.servlet.SrvletResponse,作用域 Page 3. ...
总结来说,`servlet.jar.zip`是用于开发基于Java Servlet的web应用的重要工具,其中的`servlet.jar`提供了Servlet API,使得开发者能够编写与HTTP服务器交互的Java代码,而`license.txt`则需仔细阅读,遵循其中的...
总结一下,Java EE的Servlet API是Web开发的关键组件,它定义了处理HTTP请求的规范,使得开发者能够用Java语言构建动态Web应用。通过`servlet-api.jar`库,我们可以实现Servlet和Filter,参与到HTTP请求的生命周期中...