【写一个hello的html页面,将页面放到服务器,通过浏览器访问页面,这个过程是怎么实现的?】第一个 servlet 程序

第一个 servlet 程序

写一个hello的html页面,将页面部署到服务器,通过浏览器访问页面,这个过程是怎么实现的?

首先,我们使用的是tomcat服务器
这个服务器下载到本地硬盘,硬盘容量,就作为服务器容量

然后回答上述问题,怎么实现的呢?是通过servlet程序,把浏览器发送出来的请求 读取 然后 通过读取的信息 访问服务器,实现出来

那么 如何实现 servlet 程序

1. 创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建好后的 默认目录 解析

在这里插入图片描述
main 底下存放的是 业务代码,java 目录底下存放的是 java 代码。
resources 里存放的是程序依赖的文件,此处再是不涉及。
test 目录下的 java 存放的是 测试代码
pom.xml 是 maven 项目的配置文件,后面会经常用到

2. 引入依赖
为什么要引入依赖?

因为servlet是要依赖 tomcat 才能运行
但是 我们在 maven中 使用 servlet 所以 我们需要 引入 tamcat 但是呢 我们之前已经把 tomcat 下载到 本地硬盘了,所以 我们只需要 去官网 找到tomcat 提供的 依赖的代码,也就是 其他程序中 ,写入 tomcat 提供的依赖的 代码,就能 使用tomcat了

那么 在 maven中 也就是用 pom.xml 配置了


搜索 https://mvnrepository.com/ 打开 maven 仓库。
在这里插入图片描述
搜索 servlet 选择当前的圈出的。
在这里插入图片描述
点击进去,选择 3.1.0 版本
在这里插入图片描述
在这里插入图片描述
选中当前的 maven,将上述的代码复制到 pom.xml 里,要复制到 dependencies 标签里。
在这里插入图片描述

    <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>

如果复制后 是 红色字体,表示还没下载完

3. 创建目录结构

虽然 maven 已经帮我们自动的创建了一些目录,但是还是不够。
此处需要使用 maven 开发一个 web 程序,还需要别的目录。

1、在 main 目录下创建一个 webapp 目录

在这里插入图片描述
选择 Directory,创建 webapp 目录。

2、在 webapp 下创建一个 WEB-INF 目录

在这里插入图片描述
选择 Directory,创建 WEB-INF 目录。

3、在 WEB-INF 目录下创建一个 web.xml 文件

在这里插入图片描述
选择 File 创建文件。

4、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>

直接将上面的这段代码复制到 web.xml 文件中。
在这里插入图片描述
圈出的部分可能会是红色的,但是不一定是错误的,可以使用 alt + enter 使使。

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

4. 代码编写

创建一个 HelloServlet 类。
在这里插入图片描述
HttpServlet 是 servlet api 里提供的现成的类,一般写 servlet 代码一般都是继承 HttpServlet

这个类需要重写 doGet 方法,如果是一个 Post 请求,那就是重写一个 doPost 请求。

public class HelloWorld extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //super.doGet(req, resp);
    }
}

@Override 表示的是方法重写,
HttpServletRequest request 这个参数表示一个 http 请求。
HttpServletResponse response 这个参数表示一个 http 响应。

doGet 方法的效果就是 根据请求计算响应Tomcat 收到 get 请求就会触发 doGet 方法Tomcat 就会构造好两个参数,
一个是 rep一个是 resp。

repTCP socket 中读出来的字符串,按照 http 协议解析得到的对象。
resp 则只是一个 空的对象

super.doGet(req, resp); 这儿条语句一定要注释掉。

编写业务代码,也就是我们的 hello world 。

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 {
        //super.doGet(req, resp);
        System.out.println("Hello World"); // 这是控制台打印
        // 返回到客户端的打印
        // getWriter 会得到一个 Writer 对象
        resp.getWriter().write("Hello World");
    }
}

需要注意的是,doGet 是 Tomcat 收到 GET 请求的时候就会调用。
具体要不要调用 doGet,还要看当前的 GET 请求的路径是什么,不同的路径可以触发不同的代码。
(关联到不同的类上)

一个 Servlet 程序中,可以有很多的 Servlet 类,每个 Servlet 都可以关联到不同的路径,也就是对应到不同的资源,因此多个 Servlet 就实现了不同的功能,但是一个 Servlet 类是不可以对应多个路径的。对应的,一个路径也不能对应多个 Servlet,路径 和 Servlet 类之间是一对一之间的关系。

5. 打包程序
为什么要打包

在这里插入图片描述

程序编译好之后,会得到一些.class 文件,此时要把这文件打成 war 包。
war 是 tomcat 专属的用来描述 webapp 的程序,一个 war 就是一个 webapp。

1、点击右侧的 maven ,打开面板

在这里插入图片描述

2、选中此时的 Lifecyle 下的 package

在这里插入图片描述
可以直接双击运行。

也可以右键选中上面的 Run 运行。

打完之后再左侧的 target 目录里就包含了 所打的包,默认情况下打的是一个 jar 包

在这里插入图片描述

3、成功之后就会显示 build success
4、修改 jar 包 为 war 包

先在 pom.xml 文件中的 project 标签里加入一个 packaging 标签。
在这标签里写下指定的包是哪一种,我们打的是 war 包,此处就写的是 war 包。

 <packaging>war</packaging>

还需要有一个 build 标签,在 这个 build 标签里也要有一个 finalName 标签。
此处的 finalName 标签里写的就是包的名字。

<build>
    <finalName>test01</finalName>
</build>

再次打包
发现
在这里插入图片描述

5、右键打开 war 包

在这里插入图片描述

6. 部署

部署就是将之前的 war 文件 拷贝到 tomcat 的 webapps 目录即可,无论 tomcat 是不是在你的同一个电脑上,都是如此拷贝。

拷贝后,启动 tomcat。

如果 tomcat 正在运行,直接拷贝的时候 tomcat 也可以识别,但是在 windows 中可能存在 bug,
实际工作中,tomcat 基本都是在 linux 上运行的。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
之后启动 tomcat 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 验证

打开地址栏,输入 url ,测试写好的代码。

127.0.0.1:8080 服务器的ip 也就是部署在自己本机上的tomcat服务器IP

在这里插入图片描述
20230507 是 第一级目路径,也叫做 context path / application path,这个目录就代表了一个 webapp,也就是一个网站。

/hello 是 第二级路径 也叫做 servlet path,如果这两个路径有一个出现了错误,就会出现 404

第一级路径对应的是 war 包名,第二级路径对应的是 注解 里的内容。

可以看到在服务器和客户端都打印出了 Hello World。

在这里插入图片描述

更方便的部署方式

在idea中安装 tomcat插件

在Ubuntu上搭建Tomcat服务器实现Java应用的基本步骤如下: 1. **安装软件**: - 首先更新系统包列表并安装必要的软件包:`sudo apt-get update && sudo apt-get install software-properties-common` - 添加Tomcat官方ppa:`sudo add-apt-repository ppa:webupd8team/tomcat9` - 安装Tomcat:`sudo apt-get install tomcat9` 2. **启动服务**: - 查看Tomcat状态:`systemctl status tomcat9` - 启动服务:`sudo systemctl start tomcat9` - 设置自动启动:`sudo systemctl enable tomcat9` 3. **创建Java项目**: - 使用文本编辑器(如`nano`)创建一个简单的Java项目结构,包含一个`HelloWorldServlet.java`文件,内容类似: ```java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>Hello from Tomcat</title></head>"); out.println("<body>"); out.println("<h1>Hello, World!</h1>"); out.println("</body>"); out.println("</html>"); } } ``` 4. **部署到Tomcat**: - 将`HelloWorldServlet.java`编译成`.class`文件,并将它们放入`WebContent/WEB-INF/classes`目录下(如果不存在,需要新建这个目录)。 - 在`WebContent`目录下创建一个名为`WEB-INF`的隐藏目录,再在这个目录下创建一个`web.xml`文件,添加以下内容以配置servlet: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>HelloWorldServlet</servlet-name> <class>com.example.HelloWorldServlet</class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> ``` 5. **测试访问**: - 打开浏览器,输入`http://[your-server-ip]:8080/your-context-root/hello`(默认端口是8080,如果你修改过,需替换为实际值)。你应该能看到显示的"Hello, World!"页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值