前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet系列(一) Servlet理论+实践入门

Servlet系列(一) Servlet理论+实践入门

作者头像
地鼠窝里有个Gopher
发布2022-10-30 14:43:12
3720
发布2022-10-30 14:43:12
举报

Servlet理论+实践入门

一、JavaWeb基础知识

1. 软件架构

a. C/S架构

客户端/服务器

b. B/S架构

浏览器
  • 浏览器:浏览器负责解析资源
Web服务器

优点:

  1. 客户端零维护
  2. 服务器更新实时可见
  • 服务器:安装了服务器软件的计算机。
  • 服务器软件:接收用户请求,处理请求,返回响应。

  在web服务器软件中,可以部署web项目,让用户通过浏览器访问这些项目,故也称为web容器。   web服务器可以帮我们处理繁琐的应用层协议,将报文中有用的信息提取并封装到对象中,方便程序员使用。

常见的JavaWeb服务器软件:

  • WebLogic:Oracle公司的大型JavaEE服务器软件,收费
  • WebSphere:IBM公司的大型JavaEE服务器软件,收费
  • JBOSS:JBOSS公司的大型JavaEE服务器软件,收费
  • Tomcat:Apache基金组织,中小型JavaEE服务器,仅支持少量JavaEE规范(Servlet、JSP)、开源免费。

  JavaEE:Java语言在企业级开发中使用的一套设计思想、软件架构、13项大的技术规范(Servlet、EJB、JMS等)。   JavaEE最核心的组件就是基于Servlet标准的Web服务器,开发者编写的应用程序是基于Servlet API并运行在Web服务器内部的。

2. 资源分类

a. 静态资源

  所有用户访问得到同样的结果。   如:HTML、CSS、JavaScript等。

b. 动态资源

  每次访问同样的URL,得到的结果可能不一样,是服务器动态生成后以静态资源方式返回的。   如:Servlet/JSP、PHP、ASP等。

3. 网络通信三要素

  1. IP地址(可以由域名进行DNS转换后得到)
  2. 端口号:16位整数,范围0~65535
  3. 网络协议
    • 运输层协议:TCP、UDP
    • 应用层协议:HTTP、FTP等。

二、Tomcat环境配置

1. 启动与关闭

bin/startup.sh bin/shutdown.sh

2. 常见错误问题

  1. 黑窗口一闪而过 解决:正确配置JAVA_HOME环境变量
  2. 启动报错 解决:找到占用了端口的进程,kill之;或修改Tomcat绑定的端口号(HTTP默认为80):打开conf/server.xml <Connector port=“8080” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort=“8445” />

3. 部署Web项目

a. Web项目目录结构

  • /root
    • /WEB-INF —— 该目录下静态资源不能被浏览器直接访问
      • web.xml —— web项目配置文件
      • /classes —— 放置字节码文件
      • /lib —— 放置依赖JAR包
    • index.html
    • …其他静态资源

b. Tomcat部署web项目

i. 直接放在webapps目录下
  1. 项目访问路径和虚拟目录是一致的
  2. 简化部署:将项目打成war包,再将war包放在webapps目录下,war包会自动解压缩。
ii. 配置conf/server.xml文件
代码语言:javascript
复制
<Host>
	<Context docBase="D:\hello" path="/hehe">
	<!--docBase:项目存放路径,path:映射的虚拟访问目录-->
</Host>
iii.在conf/Catalina/localhost创建xml文件

在文件中编写<Context docBase=“D:\hello” />

三、Servlet

1. 概念

  • Servlet:服务器端小程序
  • 狭义的Servlet是指Java语言实现的一个接口规范,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
  • Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

2. Servlet入门示例

  1. 创建JavaEE项目,勾选Web Application
  2. 定义一个类,实现Servlet接口中的Service方法 public class ServletDemo implements Servlet
  3. 在web.xml中配置Servlet访问路径映射
代码语言:javascript
复制
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/servlets/HelloWorld</url-pattern>
    </servlet-mapping>

3. Servlet执行原理

  1. Tomcat解析收到的请求,获取URL路径
  2. 根据web.xml文件,查看是否有<url-pattern>对应映射的Servlet
  3. 如果有,找到全类名,并加载该类的字节码文件到内存,创建Servlet单例对象,调用其方法。

4. Servlet生命周期

a. 创建:执行init方法

Servlet的创建时机?
  • 默认情况下,懒加载,第一次访问时Servlet被加载和创建
  • 配置Servlet的创建时机(懒汉/饿汉):
代码语言:javascript
复制
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
        <!-- 配置启动时机,负数为延迟加载,自然数为饿汉 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
Servlet是单例还是多例?

  Servlet的init方法只执行一次,说明是单例的。   注意,多个用户同时访问可能存在线程安全问题,所以尽量不要使用成员变量。

b. 提供服务

  每次访问Servlet时,Service方法都会被调用一次。

c. 被销毁

  服务器关闭时执行destroy方法,只执行一次。

  • 服务器正常关闭时,执行Servlet的销毁方法。
  • destroy方法在Servlet被销毁前执行,通常用于释放资源

5. Servlet 3.0注解示例

  1. 创建JavaEE项目,勾选Web Application,但是不用web.xml
  2. 定义一个类,实现Servlet接口,重写service()方法 public class ServletDemo implements Servlet
  3. 在类上使用@WebServlet注解
代码语言:javascript
复制
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    String name() default ""; // 相当于<servlet-name>

    String[] value() default {}; // 等价于配置urlPatterns,用于简化配置

    String[] urlPatterns() default {}; // 等价于<url-pattern>

    int loadOnStartup() default -1; // 配置Servlet加载时机

    WebInitParam[] initParams() default {};

    boolean asyncSupported() default false;
    ......
}

6. IntelliJ IDEA集成Tomcat

a. web项目的自动部署

  IDEA为每个web项目单独创建一份配置目录。

代码语言:javascript
复制
/Users/simplekang/Library/Caches/JetBrains/IntelliJIdea2020.1/tomcat/Tomcat_9_0_38_ServletTest

  方式:带参启动Tomcat。配置CATALINA_BASE等参数,将配置文件重定向至IDEA创建的配置目录(见第三种配置方式)。在xml文件中,配置虚拟目录,以及映射docBase为IDEA的项目out目录等。

代码语言:javascript
复制
<Context path="/ServletTest_war_exploded" docBase="/Users/simplekang/IdeaProjects/Test/ServletTest/out/artifacts/ServletTest_war_exploded" />

b. 工作空间目录和web项目目录

  • 工作空间目录 /Users/simplekang/IdeaProjects/Test/ServletTest
    • 工作空间目录中的src和web目录,最终编译后合并进入out目录
  • 最终映射到(真正部署)的web项目目录 工作空间目录/out/artifacts/ServletTest_war_exploded

c. 断点调试:使用DEBUG启动

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Servlet理论+实践入门
  • 一、JavaWeb基础知识
    • 1. 软件架构
      • a. C/S架构
      • b. B/S架构
    • 2. 资源分类
      • a. 静态资源
      • b. 动态资源
    • 3. 网络通信三要素
    • 二、Tomcat环境配置
      • 1. 启动与关闭
        • 2. 常见错误问题
          • 3. 部署Web项目
            • a. Web项目目录结构
            • b. Tomcat部署web项目
        • 三、Servlet
          • 1. 概念
            • 2. Servlet入门示例
              • 3. Servlet执行原理
                • 4. Servlet生命周期
                  • a. 创建:执行init方法
                  • b. 提供服务
                  • c. 被销毁
                • 5. Servlet 3.0注解示例
                  • 6. IntelliJ IDEA集成Tomcat
                    • a. web项目的自动部署
                    • b. 工作空间目录和web项目目录
                    • c. 断点调试:使用DEBUG启动
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档