Servlet

含义

由java编写的,线程安全(一个对象的属性,只提供给其他的线程get方法不提供set方法)的web组件;在MVC模式中起到控制层的作用;主要功能在于交互式地浏览和修改数据,生成动态Web内容;

 

功能

1、CGI:通用网关接口;

通用网关接口:以注入的方式从web容器中拿到和传递内置对象

注入:调用方法就传递数据,提高效率;config、request、response

依赖查找:依赖对象给数据;out、session、application

2、拿到请求参数,对请求参数的格式做验证,创建表单bean,收集表单数据;

3、对请求进行分析,通过分析,把请求分发给业务层;

4、根据业务层的转向信息转到视图层;

 

Servlet架构

流程

启动tomcat, servlet就 创建了

1  tomcat启动以后,用户发请求[例如,查找姓名为Tom的学生的信息,这个请求通过浏览器,通过表单发出去],这个请求发送到http协议上,首先给tomcat服务器,

2  tomcat服 务器接收这个请求,为这个请求创建request, response内 置对象; request内置 对象存放请求字符串,请求参数,IP地址和cookie;

3  tomcat通 过配置[必须配置]把请求转给控制层servlet组件,同时把request内置对象,response内置对象注入给servlet;

4  servlet调 用相应的方法后,创建表单bean,从request中 拿到请求参数封装到表单bean; servlet拿到请求参数, 对请求参数进行分析,把请求分发给业务层[给业务层request, response, 表单bean] ;

5  业务组件如果需要到数据库里查找信息,业务层又把请求交给了持久层,调用持久层对象的方法[业务层已经把表单bean传给了持久层,持久层拿到了表单bean,就拿到了用户的请求参数]

6  持久层通过sql语句访问数据库,最后会拿到结果[Tom的姓名,年龄等一些信息],持久层拿到了用户Tom的一些信息,持久层创建结果bean,然后把结果信息封装到结果bean里面,紧接着持久层把结果bean返回给业务层;

7  业务层会把这个结果bean设到request内置对象,然后业务层又向控制层返回一个转向信息;

8  控制层对转向信息进行分析,转向了相应的视图组件jsp[视图组件不一定是jsp];

8  视图组件从request内置对象当中拿到了结果信息,用el表达式或者标签进行处理「这个过程叫渲染];

9  最后渲染的结果通过response放到HTTP协议返回给浏览器

 

语法

包声明:字节码文件要放到 WEB-INF/classes/以包对应的目录结构下;

包导入:

import java.io.* ;
// HttpServlet属于javax.servlet.http包下
// ServletException属于javax.servlet包下
import javax.servlet.* ;
// HttpServletRequest、HttpServletResponse存放在javax.servlet.http包下
import javax.servlet.http.* ;

继承HttpServlet;

至少复写四个方法:

doGet方法

public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException

接收和处理get请求,当地址栏或超链接向服务器发送get请求时,通过配置tomcat会调用servlet的doGet方法,同时把request和response对象(对象的地址)注入进来,方法的形参用子接口类型的变量来接收,还要抛出IOException和ServletException;

doPost方法

public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException

处理post请求;

init方法:

public void init(ServletConfig config) throws ServletException

一创建servlet对象就会立马调用该方法,并把config对象注入进来,获取初始化信息;

destory方法:

tomcat关闭就会调用该方法销毁servlet,做善后工作,最后servlet尸体”被GC掉;

 

部署和配置

方法一:servletjar包(tomcat/common/lib下)要放在jdk/jre/lib/ext下;

方法二:通过classpath指定,在classpath中加入此开发包的路径;

tomcat一启动就会读取web.xml文件的<servlet>标签,看到配置了<load-on-startup>标签,就按<servlet-class>的指示到 WEB-INF/classes下找包对应的类----SimpleServlet,并调用无参的构造方法创建出SimpleServlet对象,

只有配置了<load-on-startup>才会在tomcat一启动就创建servlet对象,如果没有配置该标签,只有用户第一次访问servlet组件的时候才会创建servlet对象

推荐:配置<load-on-startup>servlet创建越早越好;0-9代表创建servlet对象的优先级,数字越小优先级越高;

配置代码:

<servlet>
        <servlet-name>simple</servlet-name>
         <servlet-class>cn.zte.pxb.servlet.SimpleServlet</servlet-class> //找到SimpleServlet对象
        <load-on-startup>0</load-on-startup>

</servlet>

<servlet-mapping>
        <servlet-name>simple</servlet-name>
         <url-pattern>/demo</url-pattern>

</servlet-mapping>

 

Servlet的访问

先找真实项目名,读取项目下的web-xml,找到相应的servlet对象(或创建servlet对象)

test虚项目名-->config下的servlet.xml-->真实项目名

组件demo映射-->当前真实项目的web.xml-->找到对应的servlet

找到url=demo的<servlet-mapping>中的<servlet-name>,再找到对应的servlet对象(如果没有配load,就此时才创建)

调用servlet对象对应的get或者post方法

通过response内置对象拿到out内置对象,不是创建。

servlet拿到out,servlet发送静态代码给浏览器,谁拿谁发

 

Servlet生命周期

1. Tomcat启动,创建servlet对象,或在用户第一次访问servlet组件时创建servlet对象;

2. Servlet对象一创建调用init()方法,把config对象注入, 获取初始化参数;

3.用户通过get发送请求,tomcat通过配置调用servlet对象的doGet()方法,同时把request,response对象注入进来;

4.在doGet()方法中, 创建表单bean, 封装表单bean数据, 对请求进行分析,分发给业务层;

5.业务层获得持久层的结果bean后, 向servlet的doGet()方法发送转向信息, servlet对转向信息进行分析,把请求分发视图组件

6.视图组件从request中拿到结果信息,对结果数据进行渲染,把最后的结果信息通过response回传给浏览器;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章