博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java】Servlet基础
阅读量:2038 次
发布时间:2019-04-28

本文共 4170 字,大约阅读时间需要 13 分钟。

【java】Servlet基础

1. Servlet 是什么?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

  1. 性能明显更好。
  2. Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
  3. Servlet 是独立于平台的,因为它们是用 Java 编写的。
  4. 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
  5. Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

  • 简单的说就是:运行在服务器端的小程序
    Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
    将来我们自定义一个类,实现Servlet接口,复写方法。

2. Servlet 架构

3. Servlet的主要任务

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

4. Servlet快速入门:

  1. 创建JavaEE项目
  2. 定义一个类,实现Servlet接口
public class ServletDemo1 implements Servlet
  1. 实现接口中的抽象方法
  2. 配置Servlet
    在web.xml中配置:
demo1
cn.itcast.web.servlet.ServletDemo1
demo1
/demo1
  • 执行原理:
    1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
    2. 查找web.xml文件,是否有对应的标签体内容。
    3. 如果有,则在找到对应的全类名
    4. tomcat会将字节码文件加载进内存,并且创建其对象
    5. 调用其方法
//Servlet的生命周期:从Servlet被创建到Servlet被销毁的过程//一次创建,到处服务//一个Servlet只会有一个对象,服务所有的请求/* * 1.实例化(使用构造方法创建对象) * 2.初始化  执行init方法 * 3.服务     执行service方法 * 4.销毁    执行destroy方法 */public class ServletDemo1 implements Servlet {
//生命周期方法:当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期中只执行一次 public void init(ServletConfig arg0) throws ServletException {
} //生命周期方法:对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
} //生命周期方法:当Servlet被销毁时执行该方法 public void destroy() {
} //当停止tomcat时也就销毁的servlet。 public ServletConfig getServletConfig() {
return null; } public String getServletInfo() {
return null; }}
* Servlet中的生命周期方法:	1. 被创建:执行init方法,只执行一次		* Servlet什么时候被创建?			* 默认情况下,第一次被访问时,Servlet被创建			* 可以配置执行Servlet的创建时机。				* 在
标签下配置 1. 第一次被访问时,创建 *
的值为负数 2. 在服务器启动时,创建 *
的值为0或正整数 * Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的 * 多个用户同时访问时,可能存在线程安全问题。 * 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值 2. 提供服务:执行service方法,执行多次 * 每次访问Servlet时,Service方法都会被调用一次。 3. 被销毁:执行destroy方法,只执行一次 * Servlet被销毁时执行。服务器关闭时,Servlet被销毁 * 只有服务器正常关闭时,才会执行destroy方法。 * destroy方法在Servlet被销毁之前执行,一般用于释放资源
  • Servlet3.0:

    • 好处:
      • 支持注解配置。可以不需要web.xml了。
  • 步骤:

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

@Target({
ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface WebServlet {
String name() default "";//相当于
String[] value() default {
};//代表urlPatterns()属性配置 String[] urlPatterns() default {
};//相当于
int loadOnStartup() default -1;//相当于
WebInitParam[] initParams() default {
}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default "";}

5. IDEA与tomcat的相关配置

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件

    • 查看控制台的log:Using CATALINA_BASE: “C:\Users\zcx.IntelliJIdea2018.3\system\tomcat_Java_web”
  2. 工作空间项目 和 tomcat部署的web项目

    • tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目"对应着"工作空间项目” 的web目录下的所有资源
    • WEB-INF目录下的资源不能被浏览器直接访问。
  3. 断点调试:使用"小虫子"启动 dubug 启动

6. Servlet的体系结构

Servlet -- 接口	|GenericServlet -- 抽象类	|HttpServlet  -- 抽象类* GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象	* 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可* HttpServlet:对http协议的一种封装,简化操作	1. 定义类继承HttpServlet	2. 复写doGet/doPost方法

7. Servlet相关配置

1. urlpartten:Servlet访问路径	1. 一个Servlet可以定义多个访问路径 : @WebServlet({
"/d4","/dd4","/ddd4"}) 2. 路径定义规则: 1. /xxx:路径匹配 2. /xxx/xxx:多层路径,目录结构 3. *.do:扩展名匹配

转载地址:http://fpyof.baihongyu.com/

你可能感兴趣的文章
一个很不错的maven下载服务器
查看>>
maven 报Unable to locate the Javac Compiler in: D:\Program Files\Java\jdk1.6.0_20\..\lib\tools.jar
查看>>
在Maven中新增自定的jar包
查看>>
各种异常产生原因及如何处理解决
查看>>
Maven类包冲突终极解决小技若干
查看>>
junit测试环境搭建(遇到的坑)
查看>>
高可用的工作心得分享
查看>>
Spring Data Redis Version 1.7.1.RELEASE
查看>>
shell一个实例$(($a+1))
查看>>
导入导出Excel工具类ExcelUtil
查看>>
excel poi 设置列宽度
查看>>
jquery ajax缓存问题解决方法小结
查看>>
Spring并发访问的线程安全性问题
查看>>
java 获取HttpRequest Header 的几种方法
查看>>
SpringMVC在Controller层中注入request的坑
查看>>
Spring事务总结---事务概述及Spring事务的基本使用(完整)
查看>>
子类可以继承到父类上的注解吗--有结论了
查看>>
Spring事务总结---传播级别以及REQUIRED_NEW及NESTED的使用场景(赞)
查看>>
通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
查看>>
spring 默认事务传播属性
查看>>