文章目录
发起请求的方式
- 表单
- a链接
- url
tomcat处理请求的方式
Tomcat最本质就是个能运行JSP/Servlet的Web服务器 , 因此最典型的应用就是用户通过浏览器访问服务器,Tomcat接收到请求后转发给Servlet,由Servlet处理完后,把结果返回给客户端。
假设来自客户的请求为:http://localhost:8080/test/index.jsp
请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应
Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
Context把执行完了之后的HttpServletResponse对象返回给Host
Host把HttpServletResponse对象返回给Engine
Engine把HttpServletResponse对象返回给Connector
Connector把HttpServletResponse对象返回给客户browser
概括而言就是:
- Tomcat 创建内置对象request接受用户请求及其参数
- jsp从内置对象request中提取用户数据
- 对象request的数据以键和值得方式存在
idea中jsp产生的class文件位置
如果未进行修改默认路径,可以到以下路径寻找
C:\Users\<机器用户名>\.IntelliJIdea2018.1\system\tomcat\项目名\work\Catalina\localhost\项目名\org\apache\jsp\
eclipse中则为
1、tomcat获得JSP文件后,先将JSP转成servlet,变成xxx.java(servlet源码),也因而jsp~servlet
D:\java\tomcat7.0\apache-tomcat-7.0.53\apache-tomcat-7.0.53\work\Catalina\localhost\test01\org\apache\jsp
|------------------------------------------------------------------------| |---------|----------|-------|-----------------|
tomcat安装目录 引擎 主机 项目 固定包名 这个之下就是存放着jsp变成的servlet文件.java和编译文件.class
为何说jsp就是servlet
- jsp生成的.java文件继承继承自HttpJspBase
- 又有
abstract class HttpJspBase extends HttpServlet implements HttpJspPage,编写Servlet时就是继承自该类,这里也是继承HttpServlet - 并且HttpJspBase的源码会发现,生命周期也是有
init()方法,service()方法,destory()方法,相当于_jspService()方法就是servlet的service()方法的执行 - 所以说JSP也是一个servlet。
内置对象的区别
Application
- Appliction内置对象的创建时机:服务器一启动就创建唯一一个实现
ServletContext接口类MyClass 的对象application 内置对象;
- Appliction内置对象的生命周期:和服务器生命周期一致 n个浏览器访问依旧不变
- Appliction内置对象的作用:存放公共信息
Session
生存期为一个对话期间 同一浏览器访问不变 不同浏览器则不同
jsp的四大作用域
-
page作用域:代表变量只能在当前页面上生效
-
request:代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B
-
session:代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。
-
application:代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。
1472

被折叠的 条评论
为什么被折叠?



