servlet初步理解

                                     第一章 什么是servlet

servlet其实就是java代码,这些代码运行在服务器上,来对客户端请求的数据等等进行逻辑业务处理或一些其他的作用,之所以叫servlet是因为实现了servlet规范,为什么要实现servlet规范呢,因为方便服务器对其进行调用,不然每个程序都不一样服务器不知道调用哪些代码来处理业务.

服务器会帮我们创建servlet对象,并帮我们调用servlet中的service方法.servlet默认在第一次访问时创建,servlet是存储在服务器之中,服务器关闭时,会自动销毁,其实session等对象在服务器关闭时也会销毁.

                                  第二章 servlet的运作原理

2.1 服务器对servlet的操作

原始的servlet:

service方法中的ServletRequest代表客户端来的请求,http请求的信息都被封装在了这里,,ServletReponse代表响应,认为封装的是要响应的信息,当客户端请求来的时候,服务器将解析请求地址,并根据请求的资源new一个servlet对象,再根据请求的信息创建ServletRequest对象,并将请求信息进行封装到ServletRequest对象中,然后调用客户端请求的servlet的service方法,并将ServletRequest对象引用当作参数传入.

住:每次调用service方法都会创建一个request与response对象.

2.2 servlet中的api

init方法中的参数ServletConfig对象封装的是配置信息,比如说获得servlet的name,获得该servlet对应的初始化参数,还能获得servleContext对象,

servlet是默认第一次访问时创建,但是在web.xml中加上配置<load-on-startup> servlet对象在服务器启动时就创建

其实在tomcat服务器中也有web.xml,查看服务器中的web.xml,它配置的是全局的参数,当我们自己配置的web.xml内容与其内容冲突时会执行我们自己配的(注意时内容,不是说两个xml只能有一个生效),会发现有一个默认的servlet,会将我们不匹配的url全部匹配过去,也有一个匹配jsp的servlet,会匹配到我们的jsp,

                                       第三章 servlet在开发中的应用

3.1 httpservlet

更新后的servlet:

我们新建立的QuickStartservlet2并没有实现servlet方法,而是继承了httpservlet抽象类,而httpservlet又继承了GenericServlet,GenericServlet实现了servlet,所以我们新建立的QuickStartservlet2其实也实现了servlet.

我们新建立的servlet并没有service方法,而是调用了doget与dopost方法,按照我们类的语法,当方法在本类中找不到时会去找它的父类中的方法),我们去找它的父类httpservlet,发现在其中有原本的service方法,服务器其实就是调用了这个service方法,然后service方法又调用了下图2中的service方法,这两个方法都在httpservlet中.它会根据是get还是post调用doget与dopost方法.

                                      第四章 ServletContext

4.1 什么是ServletContext对象

servletcontext是servlet上下文对象,其实和servlet对象没什么关系,代表一个web应用的环境对象,servletcontext对象内部封装的是该web应用的信息,ServletContext对象一个web应用只有一个.

ServletContext对象的生命周期:

创建:该web应用被加载到tomcat中(服务器启动状态下)

销毁:web应用被卸载或者服务器关闭时.

4.2 如何获得ServletContext对象

1. 通过init方法中的config对象获得

2. 通过this

4.3 ServletContext的作用

1. 获得全局初始化参数

 2. 获得web应用中任何资源的绝对路径

src包下的静态资源会被放到classes中

 输入:

扩展:Web-INF中的资源不可以在浏览器中直接访问,但是可以在web应用内部进行访问如在servlet中.

在读取src(classes)下的资源是可以用类加载器(是一个专门加载src(classes)下的文件的)

web工程中写/c.txt没错,但是java工程中写c.txt会有问题,所以最好都写c.txt.

在web开发工程中正反/是一样的(有点疑问)

3. ServletContext是一个域对象.

什么是域?什么是域对象?

存储数据的区域就是域对象

ServletContext域对象的作用范围:整个web应用(所有的web资源都可以随意向servletcontext域中存取数据,数据可以共享)

 扩展:发现generic中的用有参的init方法调用了无参的init方法.

感想:虽然现在用的springMVC等等已经不会要我们再手动控制类继承servlet的接口什么的了,但是其实本质上还是继承了,不然就没有所谓的request对象了,所以了解一些servlet的原理与用法还是有好处的.

猜你喜欢

转载自blog.csdn.net/q610376681/article/details/83386968
今日推荐