Servlet

1.Servlet概述

1.1 什么是Servlet
由SUN公司提供的动态Web资源开发技术,本质上就是一段Java程序, 和Java程序不同的是, Servlet程序必须放在Servlet容器(其实就是服务器, 比如tomcat服务器)中, 由容器调用才可以执行.
1.2 开发Servlet程序的步骤
(1)写一个类, 实现一个Servlet接口(标准), 并添加未实现的方法
(2)将编译后的Servlet程序放在Web应用中, 并在web.xml文件中配置Servlet对外访问的虚拟路径.
1.3 案例: 通过记事本开发一个Servlet程序
1.需求: 浏览器向服务器发送一个请求, 访问FirstServlet, FirstServlet将表示当前时间的字符串发送浏览器
2.详细开发步骤
(1)创建一个FirstServlet.java文件
这里写图片描述
(2)编写FirstServlet类, 实现Servlet接口(或继承Servlet接口的子类), 并添加未实现的方法.
这里写图片描述
(3)实现Servlet中提供的处理请求的方法service方法, 将表示当前时间的字符串响应给浏览器
这里写图片描述
(4)细节处理(添加servlet类的包路径和导入依赖包)
这里写图片描述
(5)打开CMD窗口, 编译FirstServlet类
通过命令编译会出现如下错误:
这里写图片描述
原因是 javax.servlet这个包不存在, 所有下面出现了很多找不到符号错误.
在tomcat服务器的lib目录下有servlet的jar包, 可以设置包路径:
这里写图片描述
接着再次进行编译:
这里写图片描述
(6)将FirstServlet类放在WEB应用中, 并在web.xml文件中配置Servlet对外访问的虚拟路径
将编译好的class文件(包括包路径)放在web应用的classes目录下.
这里写图片描述
在WEB应用的web.xml文件中配置servlet对外访问的虚拟路径:
这里写图片描述
(7)将WEB应用部署到虚拟主机中, 启动服务器, 通过浏览器访问FirstServletServlet.
这里写图片描述
FirstServlet类:

public class FirstServlet extends GenericServlet{
    public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{
       String dateStr = new Date().toLocaleString();
       res.getWriter().write( dateStr );
    }
}

2.Servlet继承关系

2.1 Servlet继承关系
Servlet接口 – 通用的Servlet接口, 定义一个Servlet具有的最基本的功能

|-- GenericServlet抽象类, 实现了Servlet接口, 并且实现了其中大部分的方法. 但是service方法没有实现, 因为这个方法是处理请求的核心方法, 需要开发人员自己来实现. 因此如果我们开发Servlet继承这个类, 只需要实现service方法来处理请求即可!
       |
       |-- HttpServlet抽象类, 继承了GenericServlet类, 并且实现了service方法, 在service方法中判断请求方式, 根据不同的请求方式来做不同处理(调用不同的doXxx方法).因此, 在开发中, 我们只需要写一个类, 直接继承HttpServlet, 并且覆盖其中的doGet方法和doPost方法, 来处理GET请求和POST请求即可!

3 Servlet调用过程

3.1 Servlet调用过程
<<参考Servlet调用过程图解>>
这里写图片描述

4 Servlet开发细节

4.1 Servlet虚拟路径的配置
写好一个Servlet程序后, 需要在web.xml文件中对Servlet进行配置, 其中url-pattern是配置Servlet对外访问的虚拟路径, 其中虚拟路径的配置可以有两种方式:
1、直接写一个固定的路径, 比如:
/FirstServlet、/SecondServlet
2、以*星号配置路径
(1) 以 / 开头, 以 /* 结尾
/servlet/、/abc/、/a/b/c/*
(2) 以 *.后缀 的形式
.abc、.do、.action、.html、*.jsp
通过*号配置路径可以让路径的访问变得更加的灵活,但是也可能会造成一个路径会被多个url-pattern所匹配, 到底对应哪一个?
示例:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
当请求URL为“/abc/a.html”,“/abc/”和“/”都匹配,哪个servlet响应
Servlet1将会匹配
当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
Servlet3将会匹配
当请求URL为“/abc/a.do”时,“/abc/”和“.do”都匹配,哪个servlet响应
Servlet1将会匹配
当请求URL为“/a.do”时,“/”和“.do”都匹配,哪个servlet响应
Servlet2将会匹配
总结: 当一个路径被多个url-pattern匹配时, 优先级规则是:
(1)哪一个更像/更具体/更精确哪一个起作用!
(2)*.后缀的优先级永远是最低的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值