Servlet学习总结

2 篇文章 0 订阅
1 篇文章 0 订阅


总结

总结就是要放前面,任性。

总结一下,Servlet就是一个服务器端的小程序,他有五个方法,分别是init,ServletConfig,service,getServletInfo,destroy,分别代表什么,忘记了下边去找。还有Servlet的生命周期也比较重要,目前的理解是Servlet相当于一个桥梁,用来连接前端和后端,把前端的得到的一些数据交给后端,比如页面表单里的一些name,password什么的,

那么如何获取,如何使用Servlet呢,就要创建一个类来实现Servlet接口,但是常用的方法就是service方法,只用一个,却要实现全部方法很麻烦,于是就有了GenericServlet抽象类,它内部把Servlet除了service的另外四个类都做了默认空实现,只将service()方法作为抽象,这样继承GenericServlet抽象类就相当于只用重写Servlet的service方法了,

但是html提交表单时,有GET或者POST两种方法,这时候,在GenericServlet中就要做判断了,因为这个判断过程是重复代码,以后每个都要做,所以为了方便,就有了HttpServlet,不过HTTP有七种请求方式,所以里面有七个方法,但是常用的就是GET和POST,所以只关注这两个就好了

浏览器直接请求是GET方式,目前只能通过表单里面的method设置进行POST提交,当然也可以设置为GET提交

所以以后创建Servlet,尽量继承HttpServlet,然后重写doGet/doPost方法

IDEA中的HttpServlet里有两个service,里面的参数是Request req,工具的强大之处吧,也是我第一次去看源码,特意记一下,啊哈哈哈

Servlet

一、概念:

运行在服务器端的小程序

* Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则。
* 将来我们自己定义一个类,实现Servlet接口,复写方法。

资料拓展:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式的浏览和生成数据,生成动态Web内容。

二、步骤:

1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
    * public class ServletDem01 implements Servlet
3. 实现接口中的抽象方法
4. 配置Servlet
   <!-- 配置Servlet -->
   <servlet>
   <servlet-name>demo1</servlet-name>
   <servlet-class>com.vito.web.servlet.ServletDemo1</servlet-class>
   </servlet>
   
   <servlet-mapping>
       <servlet-name>demo1</servlet-name>
       <url-pattern>/demo1</url-pattern>
   </servlet-mapping>

三、执行原理

  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
  2. 查找web.xml文件,是否有对应的标签体内容。
  3. 如果有,则在找到对应的全类名
  4. tomcat会将字节码文件加载进内存,并且创建其对象
  5. 调用其方法

四、Servlet的生命周期

Servlet的生命周期是指servlet从加载、初始化、服务到销毁的一个过程,也就是Servlet的出生到结束。而Servlet是JavaWeb开发的核心。简单的说Tomcat等JavaWeb服务器都是以实现Servlet标准为基础进行编写的,这就决定了Servlet在JavaWeb开发中的地位。

对于Servlet需要了解的是,servlet是JavaWeb应用的基础,很多框架都是封装servlet实现的,而servlet的生命周期全部由Web容器来控制,初始化、服务、销毁,这三个用户可以自己去添加内容,然后由Web容器进行调用。

五、Servlet中的五个方法

//初始化方法,在Servlet被创建时,执行。只执行一次。
public void init(ServletConfig servletConfig) throws ServletException {}

//获取ServletConfig对象,ServletConfig:Servlet的配置对象
public ServletConfig getServletConfig(){ return null; }

//提供服务方法,每一次Servlet被访问时,执行。执行多次
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}

//获取Servlet的一些信息,版本、作者.......
 public String getServletInfo() { return null; }

//销毁方法,在服务器正常关闭时执行,执行一次。
public void destroy() {}
方法名称功能描述
void init (ServletConfig config)由Servlet 容器调用,用于完成Servlet对象在处理客户请求前的初始化工作
void service (ServletRequest req,ServletResponse res)由Servlet 容器调用,用来处理客户端的请求
void destroy ( ) Servlet 容器调用,释放Servlet对象所使用的资源
ServletConfig getServletConfig ( )返回ServletConfig 对象,该对象包含此 Servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给 init( )方法的对象
String getServletInfo ( )返回有关Servlet 的信息,比如作者、版本和版权。返回的字符串是纯文本,而不是任何种类的标记HTMLXML
  1. 被创建:执行init方法,只执行一次
    • Servlet什么时候被创建?
      • 默认情况下,第一次访问时,Servlet被创建
      • 可以配置指定Servlet的创建时机。
        • 为什么要指定它的创建时机——> 因为有的Servlet它需要加载的方法比较多,它执行之前需要依赖别的Servlet的资源加载,我们可以让别的Servlet在服务器启动就创建。
        • 在标签下配置
          1. 第一次被访问时,创建(默认)
            • 的值为负数
          2. 在服务器启动时,创建(需要时,进行配置,可以加载别的Servlet资源)
            • 的值为正整数或者0
    • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
      • 多个用户同时访问时,可能存在线程安全问题。
      • 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要修改值
  2. 提供服务:执行service方法,执行多次
    • 每次访问Servlet时,Service方法都会被调用一次。
  3. 被销毁:执行destroy方法,只执行一次
    • Servlet被销毁时执行。服务器关闭时,Servlet被销毁
    • 只有服务器正常关闭时,才会执行destroy方法。
    • destroy方法在Servlet被销毁之前执行,一般用于释放资源

六、Servlet 3.0 注解,配置

好处

  • 支持注解配置,可以不需要web.xml了。

步骤

  1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
  2. 定义一个类,实现Servlet接口
  3. 复写方法
  4. 在类上使用@WebServlet注解,进行配置
    • @WebServlet(“资源路径”)

IDEA与tomcat的相关配置

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
    • 查看控制台的log:Using CATALINA_BASE: “C:\Users\fqy.IntelliJIdea2018.1\system\tomcat_itcast”
  2. 工作空间项目 和 tomcat部署的web项目
    • tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目"对应着"工作空间项目” 的web目录下的所有资源
    • WEB-INF目录下的资源不能被浏览器直接访问。
  3. 断点调试:使用"小虫子"启动 debug 启动

七、Servlet的体系结构

为什么说这个,因为Servlet是个接口,里面只是重写了service方法,不太方便。img文件夹有HttpServlet图

Servlet -- 接口
		|
GenericServlet -- 抽象类
		|
HttpServlet  -- 抽象类

GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

  • 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

HttpServlet:对http协议的一种封装,简化操作

  1. 定义类继承HttpServlet
  2. 复写doGet/doPost方法

八、Servlet相关配置

1.urlpartten:Servlet访问路径

  1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
  2. 路径定义规则
    1. /xxx:路径匹配
    2. /xxx/xxx:多层路径,目录结构
    3. *.do:扩展名匹配(这种的在*号之前不用再加/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值