JavaWeb(三) HttpServlet + ServletContext

1.HttpServlet概述

HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。

doGet()和doPost()

在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求是GET还是POST,如果是GET请求,那么会去调用本类的doGet()方法,如果是POST请求会去调用doPost()方法,这说明我们在子类中去覆盖doGet()或doPost()方法即可。

HttpServlet执行过程

2 Servlet 相关细节

1. Servlet创建时间

Servlet默认创建的时间: 在第一次请求的时候创建 第一次惩罚

可以配置Servlet, 让他在Tomcat启动的时候,就创建

<servlet>中添加<load-on-startup>非负整数</load-on-startup>

非负整数 越小, 对应Servlet越先创建

2.url-pattern

<url-pattern>给servlet绑定一个url

  1. 一个Servlet 可以配置多个<url-pattern>, 一个Servlet绑定多个url

   <servlet>
          <servlet-name>HelloServlet</servlet-name>
          <servlet-class>com.fs.web.HelloServlet</servlet-class>
          <load-on-startup>0</load-on-startup>
      </servlet>
​
      <servlet-mapping>
          <servlet-name>HelloServlet</servlet-name>
          <url-pattern>/HelloServlet</url-pattern>
          <url-pattern>/xxx</url-pattern>
      </servlet-mapping>

  1. <url-pattern>使用通配符* 配置所有

<!--使用*通配符
/*      匹配所有的url, 优先级最低
/user/*  匹配user的路径下所有后代路径
 /user/abc   /user/bbb  /user/ccc .. 匹配
 /xxx  不匹配
*.do  后缀匹配
xxx.do  aaa.do
​
*出现在最前面,或者最后面, 只能出现一次
/*.do  错误
/user/*/add 错误
*.*  错误
-->

3.Servlet是否是线程安全

一个Servlet类的对象在Tomcat只创建一个, 但是用户发送请求该Servlet, Tomcat为这次请求创建一个线程处理, 但是调用Servlet对象是同一个, 也就是说,多个线程共享同一个Servlet, 所以它是线程不安全的

在实际开发中, 不要在Servlet中创建存放数据的属性

get请求:

直接在地址栏输入url

超链接访问

form表单method="get" 默认值get

ajax发送get请求

post请求:

  1. form 的method="post"

  2. ajax发送post请求

3 ServletContext

服务器会为每个应用创建一个ServletContext对象:

  • ServletContext对象的创建是在服务器启动时完成的;

  • ServletContext对象的销毁是在服务器关闭时完成的。

ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。

作用:

  1. 域对象 : 实现数据存取, 类比 银行,域对象存储数据格式: key/value

javaWeb中有四大域对象: 范围不一样,

  • PageContext; page域, 范围在当前页面有效 最窄

  • ServletRequest: request域: 范围在同一次请求内有效 重点

  • HttpSession;session域: 范围在同一次会话(包含n次请求)中有效 重点

  • ServletContext;application域: 范围在整个项目所有的客户都共享 最宽

域对象一定包含下列方法: 存数据,取数据, 删除数据

  • void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

  • Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,例如:String value = (String)servletContext.getAttribute(“xxx”);,获取名为xxx的域属性;

    如果name不存在,返回null

  • void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;

  • Enumeration getAttributeNames():获取所有域属性的名称;

  1. 获取全局的初始化参数

 <!--全局的初始化参数: 所有的servlet/jsp可以访问-->
    <context-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </context-param>

ServletContext的getInitParameter()

  1. 获取web下资源文件 文件上传使用

得到ServletContext对象

  1. 通过ServletConfig的getServletContext(),

//获取ServletConfig
ServletConfig servletConfig = this.getServletConfig();
//通过ServletConfig的getServletContext() 获取ServletContext对象
ServletContext servletContext = servletConfig.getServletContext();
  1. Servlet本身就是ServletConfig的子类 推荐

this.getServletContext();

基于注解方式的Servlet

在servlet3.0之后, javaEE提出注解方式 替换web.xml文件方式, 后期都是使用注解方式

@WebServlet("资源路径")

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下张仙人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值