JavaWeb笔记14:Tomcat 服务器(静态,动态资源访问)
发布日期:2021-05-08 06:38:25 浏览次数:21 分类:精选文章

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

Tomcat 服务器是一个开源的轻量级Web应用服务器,专门用于开发和调试Java Servlet程序。作为JavaEE标准的重要组成部分,Servlet通过定义一套标准,实现了服务器端程序与客户端请求之间的交互,广泛应用于构建动态Web应用。

Servlet 的基本概念

Servlet 是Java语言编写的运行在服务器端的程序,具备与平台和协议无关的特性。其核心功能是通过处理HTTP请求和生成HTTP响应来实现动态内容的交付。与 Servlet容器(如Tomcat)协同工作,Servlet能够处理客户端的GET和POST请求,并返回相应的响应。

Tomcat 的安装与配置

Tomcat服务器的安装相对简单。下载完成后直接解压即可。解压后的文件夹结构如下:

  • bin:存放启动、停止脚本(.sh和.bat文件)。
  • conf:相关配置文件(如server.xml)。
  • lib:存放运行Tomcat所需的类库。
  • logs:保存运行日志文件。
  • webapps:存放要运行的Web应用文件夹。
  • work:Tomcat内部使用的临时文件夹。

双击 bin/startup.bat 启动Tomcat,访问 http://127.0.0.1:8080/ 即可进入默认首页。注意:如果出现启动异常,可以参考Tomcat日志文件(logs/catalina.out)进行排查。

Servlet 的生命周期

Servlet 的生命周期由 Servlet容器(如Tomcat)控制,主要包括以下三个阶段:

  • 初始化阶段:容器加载Servlet类并创建Servlet对象,调用 init() 方法对对象进行初始化。
  • 运行阶段:对于每个HTTP请求,容器创建 ServletRequestServletResponse 对象,并调用 Servlet 的 service() 方法(内部调用 doGet()doPost() 方法)。
  • 销毁阶段:当Java Web应用终止时,容器调用所有 Servlet 的 destroy() 方法,释放占用的资源。
  • 注意事项

  • 线程安全:Tomcat内部使用线程处理请求,Servlet对象的 doGet()doPost() 方法运行在多线程环境中。因此,类属性必须 thread-safe,避免数据竞争和不一致。
  • 只读属性:为了防止数据不同步,Servlet类中的只读属性应定义为 final 类型。
  • 资源管理:在 init() 方法中初始化资源,在 destroy() 方法中释放资源,提高资源利用效率。
  • 静态资源与动态资源访问

    webapps 文件夹下新建 myworld 文件夹,并按照以下结构组织文件:

    webapps/
    myworld/
    classes/ # 与web.xml同级,存放类文件
    web.xml # 定义Servlet映射

    index.html 示例

    静态资源示例

    静态资源示例

    这是一个静态页面

    HelloServlet.java 示例

    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String name = req.getParameter("name");
    name = name == null ? "world" : name;
    resp.setContentType("text/html; charset=utf-8");
    resp.getWriter().println("

    GET

    ");
    resp.getWriter().println("

    hello " + name + "

    ");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("text/html; charset=utf-8");
    resp.getWriter().println("

    POST

    ");
    resp.getWriter().println("

    hello world

    ");
    }
    }

    web.xml 配置示例

    Hello
    HelloServlet
    Hello
    /hello

    通过以上配置,访问 http://127.0.0.1:8080/myworld/ 可以查看静态资源页面,访问 http://127.0.0.1:8080/myworld/hello 则可以使用动态资源 HelloServlet。

    上一篇:Java编程题:整数与IP地址间的转换
    下一篇:Tomcat闪退或者访问不到主页等情况

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年05月02日 02时05分13秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2021-05-08 2019-03-09
    【Linux】VMware Workstation 不可恢复错误: (vcpu-0) 2019-03-09
    VS中 fatal error LNK1123: 转换到 COFF 期间失败 的解决方法 2019-03-09
    关于Img标签在固定宽高的容器内部以图片比例缩放存在 2019-03-09
    python3---读写文件、POST表单请求、HTML处理、列表分割遍历,进行暴力破解用户名与密码 2019-03-09
    Android Studio基础项目-布局XML设置的实战-全屏显示登录界面,去除按钮深颜色 2019-03-09
    python --- 监控客户端是否存活 2019-03-09
    pyhton---异常处理的终极语法、网页访问基本读取、网页访问异常处理 2019-03-09
    Centos 7.3 计算本目录下的以特定名字文件夹个数 2019-03-09
    linux下编程出现 对'sem_wait'未定义的引用解决方案 2019-03-09
    JavaFX学习笔记-颜色选择器ColorPicker与日期选择器DatePicker 2019-03-09
    工具研究:(三)Nginx配置错误的路由时均统一跳转到登录界面 2019-03-09
    前端框架(react+umi+dva+ant design pro )攻克: 二、react 父子组件通信(二) 2019-03-09
    ant design pro v5去掉右边content区域的水印 2019-03-09
    get/set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤(代码演示) 2019-03-09
    web_求和(练习) 2019-03-09
    9. ArrayList与LinkedList的区别 2019-03-09
    52. 什么时候会发生类初始化? 2019-03-09
    JavaScript——使用iterator遍历迭代map,set集合元素 2019-03-09
    常用的Linux命令 2019-03-09