Servlet基础

7.Servlet

Servlet是个能处理http请求与响应过程的类。

7.1Servelt的基本架构

Servlet接口

  • void init(ServletConfig var1) 当前对象的初始化

  • ServletConfig getServletConfig() 获取到ServletConfig实例对象

  • void service(ServletRequest var1, ServletResponse var2) 提供服务

  • String getServletInfo() 获取到Servlet信息

  • void destory(); 销毁服务

同时还有一个ServletConfig的接口

ServletConfig接口

主要实现配置加载

  • String getServletName() 获取Servlet的名字

  • ServletContext getServletContext() 获取到Servlet的上下文

  • String getInitParameter(String var1) 获取到Servlet配置中的初始化参数

  • Enumeration getInitParameterNames() 获取到Servlet配置中的所有的初始化 参数

GenericServlet类

该类虽然实现了Servlet接口,但是更多的是对 ServletConfig接口进行了实现,而把对应的Http 请求方法Service,扔给了其子类HttpServlet。

HttpServlet类

该类主要就是完成用户的请求和响应。自定义的 Servlet必须继承该类!

常用:

  • doGet(req,resp)

  • doPost(req,resp) 只有提交表单和Ajax发送请求会用到

自定义Servlet类

声明一个类,继承自HttpServlet

自定义Servlet是一个单例设计,同时能够支持多线程并发访问,能提高多线程的访问能力,所以可能会造成线程安全性问题。不能添加同步锁,因为会影响性能,访问速度会降低。应尽量把变量写到方法里,避免线程安全性问题,因为运行时,方法存在栈帧里,是线程独享的。

配置部署Servlet

在web.xml中,配置Servlet的信息

 <!--
 步骤1:先配置Servlet的
 位置
 -->
 <servlet>
 <!--定义Servlet的名
 字,供将来请求时能够找到该
 Servlet-->
 <servlet-name>TestController</servlet-name>
     <servlet-class>com.csi.eshop.controller.TestController</servlet-class>
     <init-param>
         <param-name>username</param-name>
     <   param-value>zhangsan</param-value>
     </init-param>
     <init-param>
         <param-name>age</param-name>
         <param-value>20</param-value>
     </init-param>
 </servlet>
 <!--
 步骤2:配置什么样的请求
 要找到哪一个对应Servlet
 -->
 <servlet-mapping>
     <servlet-name>TestController</servlet-name>
     <url-pattern>/TestController</url-pattern>
 </servlet-mapping>
 ​

Servlet运行步骤:

 1. 先去URL中找到对应的请求(url-partten)
 2.  找到请求所对应的Servlet的名字 (servlet-name) 以上两个部分都是在servlet-mapping中. 
 3. 根据名字找到Servlet配置节点中的Servlet的名字(servlet-name) 
 4. 再确定Servlet的class所在位置 (servlet-class)

7.2Servlet生命周期

 

  • 实例化Servlet

    首先由客户端发起请求,容器会解析请求的 URL,找到对应Servlet配置中的"url-partten", 紧跟着继续查找对应“servlet-name”,找到了 “servlet-name”就会使用"servlet-class"实现类实例化。

  • 调用init方法实现Servlet初始化

    当容器执行自定义Servlet时,会自动调用init方 法,实现Servlet的初始化。

  • 调用Service方法提供服务

    在HttpServlet中的Service方法,会根据用户提交的方式,选择调用doXXX方法,如果我们自己重写了Service方法,而没有调用doXXX具体的方法,可能在请求后,如果同时存在service以及对应doXXX方法时,只会调用service这一个方法。

  • 调用destory方法实现销毁

    当web容器销毁时,会调用每一个自定义Servlet 中的destory实现对Servlet的销毁功能。

7.3在Servlet中获取request、session、 application内置对象的方式

 //获取request,在调用doxx方法和service方法时,会存在两个对应对象,其中一个就是request
 doXXX(HttpServletRequest request,HttpServletResponse response)
 service(HttpServletRequest request,HttpServletResponse repsonse)
 //获取Session
 HttpSession session =request.getSession() ;
 //获取Application
 ServletContext application =request.getServletContext() ;

7.4request的一些其他方法

  • getContextPath() 获取到当前项目的上下文路径

  • getMethod() 获取到请求的方式

  • getHeader(String str) 获取到请求的头信息的内容

7.5response的一些其他方法

  • getWriter() 获取到PrintWriter对象,在内置对象中,代表out对象

    PrintWriter out =response.getWriter();

    out.println();

  • setContentType(String txt):设置当前页面响应的内容形式。

    response.setContentType("application/json;charset=utf-8") ;

    response.setContentType("img/jpeg")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值