【JavaEE】如何创建一个Servlet程序(包括如何使用smart Tomcat)保姆级教程

1. Servlet概念

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app.

构建动态页面的技术有很多, 每种语言都有一些相关的库/框架来做这件事.

Servlet 就是 Tomcat 这个 HTTP 服务器提供给 Java 的一组 API, 来完成构建动态页面这个任务.

2. Servlet 主要做的工作

  • 允许程序猿注册一个类, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类中的一些代码.
  • 帮助程序猿解析 HTTP 请求, 把 HTTP 请求从一个字符串解析成一个 HttpRequest 对象.
  • 帮助程序猿构造 HTTP 响应. 程序猿只要给指定的 HttpResponse 对象填写一些属性字段, Servlet 就会自动的安装 HTTP 协议的方式构造出一个 HTTP 响应字符串, 并通过 Socket 写回给客户端.

简而言之, Servlet 是一组 Tomcat 提供的 API, 让程序猿自己写的代码能很好的和 Tomcat 配合起来, 从而更简单的实现一个 web app. 而不必关注 Socket, HTTP协议格式, 多线程并发等技术细节, 降低了 web app 的开发门槛, 提高了开发效率.

3. 创建第一个 Servlet 程序

3.1 创建项目 (maven项目)

在这里插入图片描述

3.2 引入依赖(把servlet的jar给引入过来)

Maven 项目创建完毕后, 会自动生成一个 pom.xml 文件.
我们需要在 pom.xml 中引入 Servlet API 依赖的 jar 包

  • 中央仓库中搜索 “servlet”, 一般第一个结果就是.
    在这里插入图片描述
  • 选择版本. 一般使用 3.1.0 版本
    在这里插入图片描述
    Servlet 的版本要和 Tomcat 匹配.
    如果我们使用 Tomcat 8.5, 那么就需要使用 Servlet 3.1.0

可以在 点此跳转查询 这个链接查询版本对应关系.
在这里插入图片描述

  • 把中央仓库中提供的 xml 复制到项目的 pom.xml 中
    在这里插入图片描述
    修改后的 pom.xml 形如
    在这里插入图片描述

<dependencies> 标签内部放置项目依赖的 jar 包. 粘贴对应的xml代码后,maven 会自动下载依赖到本地.

补充 :关于 groupId, artifactId, version
如果要把写的代码发布到中央仓库上, 就需要设定好这几个 ID .
groupId: 表示组织名称
artifactId: 表示项目名称
version: 表示版本号
中央仓库是按照这三个字段来确定唯一一个包的.
在这里插入图片描述

红色方框圈出来的部分, 就是这个 jar 包的 groupId, artifactId, version

3.3 创建目录

当项目创建好了之后, IDEA 会帮我们自动创建出一些目录. 形如
在这里插入图片描述

这些目录的含义:

  • src 表示源代码所在的目录
  • main/java 表示源代码的根目录. 后续创建 .java 文件就放到这个目录中.
  • main/resources 表示项目的一些资源文件所在的目录. 此处暂时不关注.
  • test/java 表示测试代码的根目录. 此处暂时不关注.

这些目录还不够, 我们还需要创建一些新的目录/文件:

  • 创建 webapp 目录
    在 main 目录下, 和 java 目录并列, 创建一个 webapp 目录 (注意, 不是 webapps).
    在这里插入图片描述
  • 创建 web.xml
    然后在 webapp 目录内部创建一个WEB-INF 目录, 并创建一个 web.xml 文件
    在这里插入图片描述
  • 编写 web.xml
    往 web.xml 中拷贝以下代码.
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

webapp 目录就是未来部署到 Tomcat 中的一个重要的目录. 当前我们可以往 webapp 中放一些静态资源, 比如 html , css 等.
在这个目录中还有一个重要的文件 web.xml. Tomcat 找到这个文件才能正确处理 webapp 中的动态资源.

3.4 编写代码

在 java 目录中创建一个类 HelloServlet, 代码如下:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello world");
        resp.getWriter().write("hello world !"+System.currentTimeMillis());
    }
}

  • 创建一个类 HelloServlet , 继承自 HttpServlet
  • 在这个类上方加上 @WebServlet("/hello") 注解, 表示 Tomcat 收到的请求中, 路径为 /hello的请求才会调用 HelloServlet 这个类的代码. (这个路径未包含 Context Path),这个路径表示的是servlet path
  • 重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个方法会在 Tomcat 收到 GET 请求时触发
  • HttpServletRequest 表示 HTTP 请求. Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转成了一个 HttpServletRequest 对象. 后续想获取请求中的信息(方法, url, header, body 等) 都是通过这个对象来取.
  • HttpServletResponse 表示 HTTP 响应. 代码中把响应对象构造好(构造响应的状态码, header, body 等)
  • resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器.

这里写的代码并不是一个完整的程序, 而是 Tomcat 这个程序的一小部分逻辑,此时这里写的代码不是通过 main 方法作为入口了. main 方法已经被包含在 Tomcat 里, 这里的代码会被Tomcat 在合适的时机调用起来.

Tomcat 调用代码需要满足这三个条件 :

  • 创建的类需要继承自 HttpServlet
  • 这个类需要使用 @WebServlet 注解关联上一个 HTTP 的路径
  • 这个类需要实现 doXXX 方法

当这三个条件都满足之后, Tomcat 就可以找到这个类, 并且在合适的时机进行调用.

3.5 打包程序

使用 maven 进行打包. 打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口, 如果看不到的话,
可以通过 菜单 -> View -> Tool Window -> Maven 打开)
在这里插入图片描述
打包成功的话, 能够看到 SUCCESS 这样的字样.
在这里插入图片描述
打包成功后, 可以看到在 target 目录下, 生成了一个 jar 包 ,

但是这样的 jar 包并不是我们需要的, Tomcat 需要识别的是另外一种 war 包格式.

补充 :
war 包和 jar 包的区别:
jar 包是普通的 java 程序打包的结果. 里面会包含一些 .class 文件.
war 包是 java web 的程序, 里面除了会包含 .class 文件之外, 还会包含 HTML, CSS, JavaScript, 图片, 以及其他的 jar 包. 打成 war 包格式才能被 Tomcat 识别.

在 pom.xml 中新增一个 packing 标签, 表示打包的方式是打一个 war 包.
在这里插入图片描述
还可以在 pom.xml 中再新增一个 build 标签, 内置一个 finalName 标签, 实现重命名打出来的这个war包,表示打出的 war 包的名字是 hello
在这里插入图片描述

完整的 pom.xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>servelet_project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <packaging>war</packaging>
    <build>
        <finalName>hello</finalName>
    </build>

</project>

重新使用 maven 打包, 可以看到生成的新的 war 包的结果 :
在这里插入图片描述

3.6 部署程序

把 war 包拷贝到 Tomcat 的 webapps 目录下.
启动 Tomcat , Tomcat 就会自动把 war 包解压缩.
在这里插入图片描述
看到这个日志说明 Tomcat 已经正确识别了 hello102 这个 webapp.
在这里插入图片描述

3.7 验证程序

此时通过浏览器访问 http://127.0.0.1:8080/hello102/hello :就可以看到结果了
在这里插入图片描述

注意: URL 中的 PATH 分成两个部分, 其中 hello102 为 Context Path, hello 为 Servlet Path

4. 使用idea smart Tomcat 插件进行部署(更方便的部署方式)

手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法.
此处我们使用 IDEA 中的 Smart Tomcat 插件完成这个工作.

4.1 安装 Smart Tomcat 插件

菜单 -> 文件 -> Settings
在这里插入图片描述
选择 Plugins, 选择 Marketplace, 搜索 “tomcat”, 点击 “Install”.
在这里插入图片描述

4.2 配置 Smart Tomcat 插件

点击右上角的 “Add Configuration”
在这里插入图片描述
选择左侧的 “Smart Tomcat”
在这里插入图片描述
在 Name 这一栏填写一个名字(可以随便写)
在 Tomcat Server 这一栏选择 Tomcat 所在的目录. 其他的选项不必做出修改. (使用默认)
在这里插入图片描述
点击 OK 之后, 右上角变成了
在这里插入图片描述
点击绿色的三角号, IDEA 就会自动进行编译, 部署, 启动 Tomcat 的过程.
在这里插入图片描述
(此时 Tomcat 日志就会输出在 IDEA 的控制台中, 可以看到现在就不再乱码了. )

访问页面:
在浏览器中使用 http://127.0.0.1:8080/hello102/hello 访问页面.(这次在代码中加上了显示当前时间戳的功能,以验证动态页面的实现)
在这里插入图片描述

注意路径的对应关系.
在这里插入图片描述
使用 Smart Tomcat 部署的时候, 我们发现 Tomcat 的 webapps 内部并没有被拷贝一个 war 包, 也没有看到解压缩的内容.
Smart Tomcat 相当于是在 Tomcat 启动的时候直接引用了项目中的 webapp 和 target 目录.

在这里插入图片描述

  • over ~ ✨
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、Unix基础知识....7 三、Unix常用命令....8 四、 文件系统权限.21 五、软硬连接的区别..........................22 六、范例程序...........22 七、网络基本命令...26 八、Shell scripts:脚本编程.................28 Core Java学习笔记...........31 第一章 JAVA前言..31 第二章 标识符,关键字,类型........35 第三章 表达式与流控制....................41 第四章 数组.............50 第五章 对象和类(OO思想).........53 第六章 高语言特性........................59 第七章 异常.............74 第八章 图形用户接口:GUI.............78 第十一章 事件处理模型....................79 第十三章 线程(Threads)....................80 第十四章 标准I/O流与文件.............84 第十五章 网络编程.89 Tiger学习笔记..................94 第一章 Java5.0新特性.......................94 第二章 基础知识.....96 第三章 泛型...........101 第四章 Annotation.102 XML学习笔记...............106 XML前言...............106 第一章 XML Overview....................107 第二章 DTD...........109 第三章 XML Namespaces................111 第四章 XML Schema.....................115 第五章 XML解析...................119 Oracle学习笔记...............121 前言....................................121 第一章 Selecting Rows.....................124 第二章 Limiting Selected Rows.......127 第三章 Single Row Functions..........127 第四章 Displaying Data from Multiple Tables......................130 第五章 Group Function(组函数)......130 第六章 Sub queries(子查询)............132 第七章 指定运行时变量..................133 第八章 数据模型和数据库设计......134 第九章 Creating Tables(创建表)......135 第十章 Oracle Data Dictionary(数据字典表)........................138 第十一章 Manipulating Data(对表的操作)140 第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回..........149 第十七章 Summary..........................151 :::::::::::::: 精点课上实例::::::::::::......152 JDBC学习笔记...............165 第一章 JDBC Overview(JDBC综述).........166 第二章 Using JDBC(JDBC的使用)167 第四章 JDBC Advanced Topics(JDBC高特性)................170 第五章 JDBC2.0 Core Features(JDBC2.0 新特性)...............171 第六章 JDBC2.0 Standard Extensions........174 第七章 Row Set Implementation......176 第三章 OOAD and Database Design..........176 第八章 JDBC and Application Architecture..........................178 Hibernate学习笔记..........180 第一章 Hibernate入门.....................180 第二章 对象/关系映射基础.............183 第三章 关联关系映射......................185 第四章 操纵持久化对象..................190 第五章 事务控制...191 第六章 高映射...192 第七章 高查询...196 HTML&java; script学习笔记.....................198 HTML: 超文本标记语言.......................198 1、html简介...........198 2、动态网页开发技术......................199 3、html的基本构成..........................199 4、HTTP-EQUIV...200 5、html的标签.......202 6、CSS...................205 JavaScript...................206 一、JS概述............206 二、JS的基础语法208 三、JS常用内置对象(11种)............209 四、DHTML(动态HTML对象)......210 五、JavaScirpt高技巧..................210 Servlet学习笔记..............212 Servlet前言.............212 第一章 Servlet Basic ........................214 第二章 Form表单.219 第三章 Servlets生命周期................222 第四章 资源访问 ......................225 第五章 状态跟踪...230 第六章 过滤器 ...234 第七章 Web Application Life Cycle Events ........................235 JSP学习笔记..................236 JSP前言.................236 第一章 Introduction to JSP...............238 第二章 Creating,Deploying and Executing a JSP..................239 第三章 JSP Scriplets,Directives and Action .................240 第四章 Working with Reusable Components(重用的组件)..241 第五章 Handling Exceptions(异常的处理)243 第六章 Advanced Topics(高主题)..........243 第七章 Custom Tags(自定义标记) .246 第八章 EL元素(Expression Language)......247 第九章 Java Server Page Tag Libraries(JSTL)......................248 Struts学习笔记...............263 Struts2.0..263 第一章 MVC Model.........................263 第二章 Struts Basic264 第三章 Action,Result & Struts2 Tag Library......................267 第四章 Data Transfer & Type Converter..273 第五章 Validation(数据格式验证)..276 第六章 Internationalization(I18N:国际化)..........................283 struts1.x...283 一、开发struts1应用的基本步骤...283 二、Struts的工作流程......................284 三、struts-config.xml配置文件主要的元素和属性.........286 四、RequestProccessor.....................287 五、Struts1的执行流程....................289 六、struts1的高部分....................290 七、struts1的国际化处理............291 Ajax学习笔记.................291 Ajax前言...............291 Ajax正文 ......292 Ajax在线聊天室的实现...................294 OOAD & UML学习笔记295 第一章 OOAD概述.........................295 第二章 UML..........299 第三章 需求与初始化分析..............300 第四章 分析阶段的静态建模..........302 第五章 分析阶段的动态建模..........306 第六章 设计原则与模式..................307 EJB学习笔记..................314 EJB前言................314 EJB2.0.....315 第一章 EJB介绍 .315 第二章 First EJB....318 第三章 EJB原理.320 第四章 Session Bean(会话Bean).....322 第五章 消息驱动Bean(MDB).........327 EJB3.0.....329 第一章 EJB3.0 Foundation...............329 第二章 Session Bean........................330 第三章 消息驱动Bean(MDB).........332 第四章 JPA(Java Persistence API)...332 第五章 Advanced Persistence Concepts(JPA-高持久化)..336 第六章 事务...........341 Spring学习笔记...............345 第一章 Spring概述..........................345 第二章 Spring IOC(控制反转)........347 第三章 Spring AOP(面向切面编程)..........351 第四章 Spring的数据访问..........353 CVS学习笔记.................355 PL/SQL学习笔记............358 第一章 PL/SQL概述........................358 第二章 PL/SQL程序结构................359 第三章 PL/SQL数据类型................362 第四章 PL/SQL的控制语句........368 第五章 PL/SQL游标........................370 第六章 PL/SQL异常........................373 第七章 PL/SQL存储过程................374 第八章 PL/SQL包.380 第九章 PL/SQL触发器....................382 第十章 动态PL/SQL........................383 ant学习笔记...................387 Web Service学习笔记.....388
JavaEE的Eclipse是一个集成开发环境,用于开发Java Enterprise Edition(JavaEE)应用程序。它提供了许多功能和工具,包括代码编辑器、调试器、自动完成、版本控制和部署工具等,方便开发人员进行JavaEE应用程序的开发和管理。 在使用JavaEE的Eclipse时,可能会遇到一些问题。根据你提供的引用内容,我可以为你提供一些建议来解决其一个问题。引用提到了解决"javax.servlet.jsp.JspException cannot be resolved to a type"错误的方法。可以尝试右键项目,选择"Build Path",然后选择"Configure Build Path",在弹出的对话框重新加载JRE。这可能是由于新版本Eclipse的一个bug导致的。提到了在Windows的Eclipse配置Tomcat服务器的方法。可以在Eclipse的"Preferences"搜索"server",然后选择"Runtime Environments",点击"Add"按钮,选择Tomcat的版本,然后浏览并选择Tomcat的解压目录。这样就可以将Tomcat服务器配置到Eclipse提到了创建一个专门的文件夹用于存放环境配置和开发支持文件的方法。在创建文件夹时,请不要放在C盘,也不要使用文命名,并且注意命名规范。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Javaee Eclipse新项目换电脑导入遇到问题](https://blog.csdn.net/AudienceT/article/details/84333373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [javaEE开发,eclipse环境搭建](https://blog.csdn.net/hza419763578/article/details/91443462)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【软件安装与配置】【Java】Eclipse For Java EE的安装](https://blog.csdn.net/ks2686/article/details/124031498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值