侧边栏壁纸
博主头像
快乐江湖的博客博主等级

更多内容请点击CSDN关注“快乐江湖”

  • 累计撰写 127 篇文章
  • 累计创建 33 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

第三章Java网络编程-第七节1:Servlet介绍及第一个Servlet程序

快乐江湖
2023-09-23 / 0 评论 / 0 点赞 / 10 阅读 / 28513 字

一:什么是Servlet

(1)动态页面和静态页面

静态页面:是指在服务器上事先创建好的固定内容的网页。它的内容在用户请求时直接被发送给用户,无需进行额外的处理或计算。静态页面的内容对所有用户来说是一样的,无法根据用户的个性化需求进行动态变化。静态页面通常使用 HTML、CSS 和 JavaScript 等静态的网页语言来编写,这些文件保存在服务器上并直接被发送给客户端

例如Tomcat主页就是一个静态页面

动态页面:是在服务器上根据用户的请求和其他动态数据生成的网页。它的内容是根据用户的请求、用户信息、数据库查询等动态生成的,可以根据用户的不同需求呈现不同的内容。动态页面通常使用服务器端编程语言(如Java、PHP、Python等)编写,通过在服务器上运行程序来生成页面内容,然后将生成的内容发送给客户端

例如B站首页就是动态页面,不同用户看到都是个性化定制的内容

动态页面具有更强的交互性和个性化定制能力。它可以根据用户的登录状态、权限、输入参数等动态地生成页面内容,例如根据用户的搜索关键词显示相关的结果、根据用户的购物车内容生成结算页面等。通过动态页面,网站可以实现更丰富和灵活的功能,并提供更好的用户体验

(2)Servlet是什么

Servlet:Servlet 是一种 Java 编写的服务器端组件,用于处理请求和生成响应,而 Tomcat 是一个服务器软件,作为 Servlet 容器,用于管理和运行 Servlet。通过将 Servlet 部署到 Tomcat 中,可以创建动态的 Web 应用程序。Tomcat 提供了对 Servlet 的生命周期管理、请求处理和线程池等功能,使得开发者可以方便地构建和部署基于 Java 的 Web 应用。所以简单来说,Servlet就是Tomcat这个HTTP服务器提供给Java的一组API,来完成构建动态页面这个任务,这会使程序员无需关注Socet,HTTP协议格式、多线程等内容,大大降低了开发Webapp的难度,提高了开发效率

二:第一个Servlet程序

(1)创建项目

打开IDEA,创建一个Maven项目

  • 之前我们写代码,都是直接在IDEA里,点击main方法前面的三角号后就自动编译运行了。这样做,针对一些比较简单的项目是可行的,但是对于一些复杂的程序就显得不那么合适了,尤其是面对有多个模块并且形成相互依赖的情况。因此像Maven这样的构建工具就出现了,能使我们在开发较为复杂的项目的时候,可以方便地进行编译和打包操作
  • Maven 是一个项目管理工具,用于构建、发布和管理 Java 项目的软件工程工具。Maven 提供了一种统一的方式来管理项目的构建过程、依赖关系、文档生成、测试和部署等方面
  • Maven有一个非常好用且核心的功能就是依赖管理,它可以帮助我们自动引入所需依赖,而省去繁杂的下载(中央仓库)、安装等操作

创建后目录结构如下图所示

  • src:源代码所在目录
    • main
      • java:源代码根目录,后面创建的.java文件就放在此处
      • resources:项目的一些资源文件
    • test
      • java:测试代码根目录
  • pom.xml:项目中的“阵眼”,放置全局配置文件,写了很多关于项目的相关配置属性

(2)引入Servlet依赖

  • 注意:Servlet不是Java标准库自带的,所以要想正常使用,就需要额外的下载安装,然后引入到项目中

进入Java中央仓库,然后搜索Servlet,选择第一个搜索结果

版本不要乱选,这里选择3.1.0(因为涉及一个版本配套问题)

点击进去后不要选择下载(没必要),下拉页面,选择Maven,然后将文本框中的内容复制

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

然后进入pom.xml文件,创建一个<dependencies></dependencies>,再将所复制内容粘贴在该标签内

上图中有部分内容IDEA标红,这表示IDEA未检测到本地存在这个依赖。一般来说,Maven会自动进行加载,但如果等待一段时间后下方还是没有进度条,那么可以手动刷新。方法是:点击右侧Maven面板上的刷新按钮

下载完毕

(3)创建目录结构

  • 注意:虽然maven已经给我们创建出了一些目录,但这还远远不够。我们需要的是一个符号Tomcat的目录结构

①创建webapp目录:在main目录下创建一个和java目录并列的webapp目录

②创建web.xml:在webapp目录内部创建一个WEB-INF目录,然后在该目录下创建web.xml文件

由于Tomcat是依靠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>

(4)编写代码

现在可以正式编写代码了,在java目录下创建一个类HelloServlet(也可以先创建Package再创建该类)

接着我们编写代码,下面代码虽然只有寥寥几行,但是包含很多信息

  • 创建一个类HelloServlet,让其继承HttpServletHttpServlet就来自刚才引入的依赖)
  • 然后重写HttpServletdoGet方法(在IDEA中输入doGet然后按下Tab键即可快速生成,注意一定删除自动生成的super.doGet(req, resp)
    • doGet表示当前Tomcat在收到某些GET请求时,会调用此方法根据HTTP请求构造HTTP响应
    • 参数reqresp分别表示收到的HTTP请求和要构造的HTTP响应
    • Tomcat已经帮助我们把解析HTTP请求、构造HTTP响应等一些繁杂的操作代为完成了,而我们的重点关注对象就是业务逻辑
  • resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器
  • @WebServlet("/hello")的意思是Tomcat只会针对路径为/hello的GET请求生效

另外需要注意,现在的代码并不是通过main方法来作为入口,main方法已经被包含在Tomcat里面了,我们写的代码在合适的时机被Tomcat调用。所以下面的代码并不是一个完整的程序,而是Tomcat这个程序的一小部分逻辑

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);  
  
        // Tomcat显示  
        System.out.println("Hello");  
        // 给客户端返回  
        resp.getWriter().write("hello");  
    }  
}

(5)打包程序

  • 注意:我们之前学习时所写的代码,都是带有main方法的,这就像一个“小汽车”,它是自己带有发动机的。刚才写的Servlet代码,相当于一个“车厢”,它并没有发动机,但是我们可以把这个车厢挂到车头后面,让车头拉着它跑,这里车头其实就是Tomcat。这便是打包操作

点击maven面板,展开lifecycle目录,双击Pacage即可打包

如果打包成功,就会看见下面的BUILD SUCCESS字样

然后你就可以在target目录下看见.jar

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

  • jar:是普通Java程序打包的结果,里面会包含一些.class文件
  • war:是Java web的程序,除了包含一些.class文件外,还会包括HTML、CSS、JavaScript,图片等其他文件

要想打包成.war包也非常简单,只需要修改pom.xml,在project标签内加入以下内容(finalName可以指定包名)

<packaging>war</packaging>  
<build>  
    <finalName>HelloServlet</finalName>  
</build>

然后重新打包

(6)部署程序

现在将之前打包后的war包拷贝至Tomcat的webapps目录下

然后启动Tomcat,Tomcat就会自动进行解压缩

(7)验证程序

现在在浏览器中输入http://127.0.0.1:8080/HelloServlet/hello构造出HTTP请求进行访问

三:Smart Tomcat插件使用

上面所涉及的步骤中,第(5)、(6)步是需要频繁使用的,因为只要你的程序改动(哪怕只有一行)就需要重新打包和步数,所以十分繁琐,这里介绍一个一键化部署插件Smart Tomcat的安装和使用

在Settings-Plugins中搜索“Smart Tomcat”,安装完毕后重启IDEA

然后点击Add Configuration,接着点击左侧加号,然后选择Smart Tomcat

进行如下配置,其中Context path本来应该是webapps里面的war包或目录名,但由于SmartTomcat并不是真的在拷贝war包,所以不会涉及到war包名这样的概念,这里可以任意填写,但是一定要保证后面请求中的路径和这里的Context Path是一致的

配置完成后,点击上面的run,就可以一键启动

0

评论区