尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

JavaWeb基础

JavaWeb基础
📅 发布时间:2026/6/19 7:48:49

Tomcat

基础

Tomcat是什么;是服务器软件,是在靶场中发射子弹的枪。

一个可以发布到tomcat/webapp中的目录结构。

  • static
    • js: .js
    • img: .png .jpg
    • css: .css
  • page: .html
  • WEB-INF(受保护的资源目录)
    • classes:字节码根路径
    • lib:依赖jar包存放路径
    • web.xml:项目的配置文件

| static和page是属于视图相关的文件,可以随意编排。

部署项目的两种方式

  1. 直接扔到webapps

  2. 放到其他目录,在\Tomcat 10.1\conf\Catalina\localhost添加配置

    如果部署的项目文件夹为app,则添加如下配置 app.xml

    <Context path="/app" docBase="D:\myWebApp\app" />
    # path为应用上下文路径,即为url的路径,一般与项目文件名保持一致
    # docBase为应用的地址
    

要访问tomcat原有的管理项目,需要先设置tomcat密码。

在/cnf/tomcat-users.xml文件中添加如下代码:

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>

访问http://localhost:8080/manager/html,输入admin/admin

image-20240905225545691

idea开发javaweb工程

image-20240905230416952

  1. 建立Tomcat和idea关联

    image-20240905231010999

  2. 使用idea创建javaweb工程,在web工程中开发代码

    首先配置JDK,模块,引用的库,Artifacts

    image-20240906135016605

  3. 如果使用了Servlet,模块中需要添加Tomcat依赖

    image-20240918100754679

  4. 使用idea将工程构建成一个可以发布的app

    当缺少WEB目录时,可以通过下面的方式添加

    image-20240906134403872

  5. 使用idea将构建好的app部署到tomcat中启动运行

    image-20240906135139569

    image-20240906135229823

idea运行javaweb工程的原理

| 疑问:为什么在idea中运行javaweb工程后,在对应的tomcat的workapp目录下并没有应用文件?

idea为了避免污染硬盘中的tomcat目录,没有直接把应用文件放到workapp中,而是根据需要部署的web应用,创建了一套配置文件,让tomcat根据那个配置文件进行运行。

image-20240906140645140

image-20240906140750343

继续打开 conf/Catalina/localhost中的 demo_war_exploded.xml,有下面的代码,配置了web应用的上下文路径和项目文件位置

<Context path="/demo_war_exploded" docBase="C:\Users\Timothy\Documents\WeChat Files\wxid_b7e193fz08w512\FileStorage\File\2024-09\知校聚合支付接口(demo是PC端扫码跳转)\java\demo\out\artifacts\demo_war_exploded" />

Servlet

Servlet简介

Servlet是什么?

静态资源与动态资源:预先生成好的资源;服务器接受用户请求参数,动态生成的资源。

image-20240918093912234

Servlet:能够处理客户请求并做出响应的一套Java技术标准,即Java代码生成动态资源的标准。

Servlet运行在服务端,所以只能在Web项目中开发,且在Tomcat这样的服务容器中运行。

Servlet运行流程?

image-20240918094923041

用户请求 -> Tomcat -> Servlet -> Java类(Controller,Service,Mapper,DAO)

Servlet开发流程

基本流程

  1. 创建javaweb项目,同时将tomcat作为项目依赖

  2. 重写service方法,service(HttpServletRequest req, HttpServletResponse resp),定义业务处理代码

    public class UserServlet extends HttpServlet {   @Override   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {       // 1.获取请求参数,只要是kv形式(无论在请求头还是请求体),都可以通过getParameter方法获取       String username = req.getParameter("username");       // 2.执行业务代码       String info = "Yes";       if("atguigu".equals(username)) {           info = "No";       }       // 3.响应数据       resp.setContentType("text/html");   // 设置响应头       PrintWriter writer = resp.getWriter();       writer.write(info);   }
    }
    
  3. 在web.xml中,配置Servlet的访问路径【可以直接用注解@WebServlet("/userName")替换】

    image-20240918112150995

注意事项:

  1. 如何导入servlet-api依赖
  • 通过在Web资源目录下新建lib文件夹,把依赖放进去
  • 通过Project Settings-Modules-Dependency指定

image-20240918112753870

Tomcat 10.1自动导入了jsp-api和servlet-api依赖

image-20240918113011074

Tomcat 10.1在哪里配置的?见“idea开发javaweb工程”中的第一步配置。

两种方式有什么区别?

区别在于是否会把依赖存放在打好的war包中。lib方式会把servlet依赖放到war包,另一种方式由于scope是provided,表示只会在编码时导入,不会放到war包。

如果不放到war包,程序怎么用servlet-api呢?

tomcat中部署的所有war包共享当前tomcat的lib库中的依赖。【所以自己导入后反而有可能由于冲突报错】

image-20240918113527443

  1. 怎么指定响应头的Content-type字段。
  • 对于静态资源,tomcat的web.xml维护了请求的静态文件的扩展名与响应头Content-type字段的对应关系。比如请求的是xxx.html文件,则Content-type为text/html

    image-20240918113926905

  • 对Servlet,默认的Content-type是html,如果数据需要作为其他类型解析,则要手动设置。具体设置的类型可以参考web.xml

Servlet生命周期

生命周期 执行者 时机
实例化 构造器 第一次请求/服务启动
【load-on-startup】
初始化 init 构造完毕
接受请求,处理请求 service 每次请求
销毁 destory 关闭服务

Servlet在Tomcat中是单例的,所以不建议在其中修改变量值。

DefaultServlet

Tomcat中提供了一个DefaultServlet用来返回静态资源。

当所有Servlet都无法匹配到路径时,DefaultServlet会接手,将其视为请求静态资源,然后把对应文件的内容放到请求体,并填充请求头的Content-type字段,进行返回。

配置文件:web.xml

image-20240918123901239

image-20240918124020933

Servlet继承结构

Servlet-GeneticServlet-HttpServlet-自定义的Servlet。

在自定义Servlet中,可以重写service方法,也可以只重写doXXX方法。

ServletContex:属于应用域,单例的,用于在不同Servlet之间做沟通。

请求转发与重定向

请求转发

image-20241007104827852

  • 对客户端透明
  • 目标资源只能是项目内的资源,不能是外部资源
  • 目标资源可以是servlet动态资源,也可以是html等静态资源
  • 目标资源可以是WEB-INF下的受保护资源,这也是访问受保护资源的唯一方式
@WebServlet("/servletA")
public class ServletA extends HttpServlet {   @Override   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {       System.out.println("ServletA执行了");       // 请求转发给ServletB       // 1.获得请求转发器       RequestDispatcher requestDispatcher = req.getRequestDispatcher("servletB");       // 2.做出转发动作       requestDispatcher.forward(req, resp);       // (也可以转发给视图资源)       // req.getRequestDispatcher("a.html").forward(req, resp);       // (转发到 WEB-INF 目录下的资源,访问WEB-INF下受保护资源的唯一访问方式)       // req.getRequestDispatcher("WEB_INF/b.html").forward(req, resp);   }
}

响应重定向

image-20241007105250506

  • 客户端行为,客户端发送多次请求
  • 目标资源可以是外部资源
  • 目标资源可以是servlet动态资源,也可以是html等静态资源
  • 目标资源不能是WEB-INF下的受保护资源,这也是访问受保护资源的唯一方式
@WebServlet("/servlet1")
public class Servlet1 extends HttpServlet {   @Override   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {       System.out.println("servlet1运行了");       // 等价于 resp.setStatus(302); resp.setHeader("location", "servlet2");       resp.sendRedirect("servlet2");       // 外部资源       // resp.sendRedirect("http://baidu.com");   }
}

总结

客户端透明 内部资源 WEB-INF 外部资源
请求转发 √ √ √ ×
响应重定向 × √ × √

实现页面跳转时,优先使用重定向。

相关新闻

  • uni-app项目支付宝端Input不受控
  • 开启研究生学习阶段
  • 李航统计学习方法第二版 学习笔记

最新新闻

  • 2026年靠谱的上海特种电缆/上海PU电缆优质厂家推荐榜 - 品牌宣传支持者
  • 2026年靠谱的pvc给水管/安徽pvc管/pvc排水管可靠供应商推荐 - 行业平台推荐
  • 2026年口碑好的激光切管/济宁激光切管/激光切管代工/济宁激光切管代工精选厂家推荐 - 品牌宣传支持者
  • 青岛即墨区靠谱的空调清洗公司咨询电话(2026最新) - 品牌排行榜
  • 2026年质量好的医药合规卷筒不干胶/食品包装卷筒不干胶/定制卷筒不干胶厂家哪家好 - 行业平台推荐
  • 2026年可靠的青岛办公工学椅/青岛人体工学椅/工学椅/商务久坐工学椅公司哪家好 - 行业平台推荐

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号