Servlet---概述与细节

目录 

1.Servlet概述

  1.1什么是Servlet?

  1.2实现Servlet的三种方式

  1.3 创建helloservlet应用

2.Servlet细节

   2.1Servlet创建时间

   2.2url-pattern

   2.3Servlet是否是线程安全


1.Servlet概述

1.1什么是Servlet?

Servlet是JavaWeb的 三大组件之一(javaWeb的三大组件: Servlet , 过滤器, 监听器 ) ,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

  • 接收请求数据;

  • 处理请求;

  • 完成响应。

 

  如图所示客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。

1.2实现Servlet的三种方式

  • 实现javax.servlet.Servlet接口;

  • 继承javax.servlet.GenericServlet类;

  • 继承javax.servlet.http.HttpServlet类;

 

通常我们会去继承HttpServlet类来完成我们的Servlet )  

  1. JavaEE 这些类不在jdk中, 在Servlet-api的jar中

  2. Servlet的类对象由Web服务器创建(Tomcat), Servlet的方法大部分由Tomcat来调用init(),service(),destory()都是Tomcat调用,如果程序员调用,没有处理请求的能力getServletConfig().getServletInfo() 给程序员调用

1.3 创建helloservlet应用

完成Servlet需要分为两步:

1.编写Servlet类;

2.在web.xml文件中配置Servlet;

代码实例:

HelloServlet.java

public  class  HelloServlet  implements Servlet {	     
    public void init(ServletConfig config) 
throws ServletException {}	     
    public ServletConfig getServletConfig() {     
        return null     ;
    }	     
    public void destroy() {}
    public String getServletInfo() {     
        return null;
    }      
    public  void  service(ServletRequest req, ServletResponse res)
 throws ServletException, IOException {		
        System.out.println("hello servlet!");	
    }
}

service()方法是重点,因为它是用来处理请求的方法。

web.xml

 <servlet>
        <!--Servlet名称: 自定义, 推荐类名 -->
        <servlet-name>AServlet</servlet-name>
        <!--对应的Servlet类: 全限定名(包.类名)-->
        <servlet-class>com.fs.web.AServlet</servlet-class>
    </servlet>
    <!--绑定url
     Servlet类与url的映射
    -->
    <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <!--绑定的url自定义 推荐使用/类名 后面还有通配符 * 写法-->
        <url-pattern>/AServlet</url-pattern>
    </servlet-mapping>

修改web.xml文件,一定要重启服务器, 热部署失效 

2.Servlet细节

2.1 Servlet创建时间

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

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

<servlet>中添加<load-on-startup>非负整数</load-on-startup>非负整数 越小, 对应Servlet越先创建

<servlet>		
    <servlet-name>hello1</servlet-name>		
    <servlet-class>com.suke.servlet.Hello1Servlet</servlet-class>		
    <load-on-startup>0</load-on-startup>	
</servlet>	
<servlet-mapping>		
    <servlet-name>hello1</servlet-name>		
    <url-pattern>/hello1</url-pattern>	
</servlet-mapping>	
<servlet>		
    <servlet-name>hello2</servlet-name>		
    <servlet-class>com.suke.servlet.Hello2Servlet</servlet-class>		
    <load-on-startup>1</load-on-startup>	
</servlet>	
<servlet-mapping>		
    <servlet-name>hello2</servlet-name>		
    <url-pattern>/hello2</url-pattern>	
</servlet-mapping>	

 在<servlet>元素中配置<load-on-startup>元素可以让服务器在启动时就创建该Servlet, 根据<load-on-startup>的值可以得知服务器创建Servlet的顺序为Hello1Servlet、Hello2Servlet

2.2url-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>

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

<!--使用*通配符
/*      匹配所有的url, 优先级最低
/user/*  匹配user的路径下所有后代路径
 /user/abc   /user/bbb  /user/ccc .. 匹配
 /xxx  不匹配
*.do  后缀匹配
xxx.do  aaa.do

*出现在最前面,或者最后面, 只能出现一次
/*.do  错误
/user/*/add 错误
*.*  错误
-->

2.3Servlet是否是线程安全

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zxmm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值