• 【JavaWeb - 网页编程】五 XML 介绍



    第六章 Tomcat 服务器 与 Servlet 技术

    创作日期:2021-12-25


    6.1 JavaWeb 的概念

    6.1.1 什么是JavaWeb

            JavaWeb 是指所有通过 Java 语言编写可以通过浏览器访问的程序的总称,基于请求和响应来开发的


    6.1.2 什么是请求与响应

            请求(Request)是指客户端给服务器发送数据,响应(Response)是指服务器给客户端回传数据


    6.1.3 请求和响应的关系

    请求和响应是成对出现的,有请求就有响应


    6.2 Web 资源的分类与常用服务器

    6.2.1 Web 资源的分类

    • web 资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种
      • 静态资源:html,css,js,txt,视频,图片
      • 动态资源:jsp 页面,Servlet 程序

    6.2.2 常用的 Web 服务器

    • Apache 服务器Apache 服务器是开源基金组织Apache提供的一种 Web 服务器,主要是解析 PHP 文件,是一款功能强大的免费软件,支持多个操作系统,如 Windows、Linux、MacOS 等 
    • Tomcat 服务器:Tomcat 服务器也是开源基金组织 Apache 提供的一种支持JSP组件的Web 服务器,它支持 Windows、Linux、Mac OS 等多个操作系统,安装简便,使用也较为方便 
    • 其他服务器:如 JBoss、Weblogic、WebSphere 等

    6.2.3 Tomcat 服务器和 Servlet 版本的对应关系


    6.3 Tomcat 的使用

    6.3.1 安装与目录介绍

    将需要用的 Tomcat 版本对应的 zip 压缩包解压到需要安装 的目录

    • bin 专门用来存放 Tomcat 服务器的可执行程序
    • conf 专门用来存放 Tomact 服务器的配置文件
    • lib 专门用来存放 Tomcat 服务器的 jar 包
    • logs 专门用来存放 Tomcat 服务器运行时输出的日志信息
    • temp 专门用来存放 Tomcat 运行时产生的临时数据
    • webapps 专门用来存放部署的 web 工程
    • work 是 Tomcat 工作时的目录,用来存放 Tomcat 运行时 jsp 翻译为 Servlet 的源码,和 Session 钝化的目录


    6.3.2 启动 Tomcat 服务器       

            找到 Tomcat 目录下的 bin 目录下的 startup.bat 文件,双击就可启动 Tomact 服务器 

    测试是否启动成功:

    • 打开网页,在地址栏中输入:http://localhost:8080 
    • 打开网页,在地址栏中输入:http:/127.0.0.1:8080 
       
    • 打开网页,在地址栏中输入: http:/真实ip:8080 

    能够跳转到以下页面证明 Tomact 服务器 启动成功


    6.3.3 关闭 Tomcat 服务

    方式:

    • 点击 tomcat 服务器窗口的关闭按钮
    • 找到 Tomcat 目录下的 bin 目录下的 shutdown.bat 文件,双击关闭 Tomact 服务器 


    6.3.4 部署 web 工程到 Tomcat 中       

    • 方法一:
      • 把 web 工程的目录拷贝到 Tomcat 的 webapps 目录下
      • 在网址 http://localhost:8080 后输入需要访问的 web 工程网页的路径即可打开
    • 如:http://localhost:8080/Book_store/index.html 

    • 方法二:
      • 当在浏览器的地址栏中输入的访问地址没有工程名时,默认访问的是 ROOT 工程下的 index 页面,如:http://127.0.0.1:8080

      • 当在浏览器的地址栏中输入的访问地址有工程名,没有资源名时,默认访问的是工程下的 index.html 页面,如:http://127.0.0.1:8080/Book_store/


    6.3.5 IDEA 整合 Tomcat 服务器

    在 IDEA 中点击 设置(Setting)进入此页面:

    • 找到 Bulid,Execution,Deployment 选项下的 Application Servers
    • 点击 + 号 找到 Tomcat Server 点击添加
    • 进入 Tomcat 服务器地址设置,进行选择电脑所安装的 Tomcat 地址目录 点击确定


    6.3.6 IDEA 中动态 web 工程的操作

    • 新建一个模块,设置一下内容后,点击下一步

    • 输入项目模块名称,点击完成即可

    目录介绍:

    • src 目录:存放 java 源代码文件
    • webapp 目录:存放 web 工程的资源文件,如 html 页面,css 文件,js 文件等等
    • WEB - INF 目录:受服务器保护的目录,浏览器无法直接访问
    • lib 目录:用来存放第三方的 jar 包
    • web.xml 文件:整个 web 动态工程的配置文件,描述文件,可以配置很多 web 工程的组件

    6.4 Servlet 技术

    6.4.1 Servlet 的概念

    • Servlet 是 JavaEE 规范之一(接口之一)
    • JavaWeb 三大组件之一,分别是:Servlet 程序,Filter 过滤器,Listener 监视器
    • 运行在服务器上的一个 java 程序,可以接收客户端发过来的请求,并响应数据给客户端

    6.4.2 第一个Servlet 程序

    • 编写一个类去实现 Servlet 接口
    • 实现 service 方法,处理请求,并响应数据
    • 在 web.xml 中去配置 servlet 程序的访问地址
    1. <%-- index.jsp --%>
    2. <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    3. DOCTYPE html>
    4. <html>
    5. <head>
    6. <title>JSP - Hello Worldtitle>
    7. head>
    8. <body>
    9. <h1><%= "Hello World!" %>h1>
    10. body>
    11. html>
    1. /* HelloServlet.java */
    2. package com.example.Tomcat_web;
    3. import javax.servlet.*;
    4. import javax.servlet.annotation.WebServlet;
    5. import java.io.IOException;
    6. @WebServlet(name = "helloServlet", value = "/hello-servlet")
    7. public class HelloServlet implements Servlet {
    8. @Override
    9. public void init(ServletConfig servletConfig) throws ServletException {
    10. }
    11. @Override
    12. public ServletConfig getServletConfig() {
    13. return null;
    14. }
    15. /*
    16. * service 方法专门用来处理请求和响应
    17. * */
    18. @Override
    19. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    20. System.out.println("HelloServlet 被访问了!");
    21. }
    22. @Override
    23. public String getServletInfo() {
    24. return null;
    25. }
    26. @Override
    27. public void destroy() {
    28. }
    29. }
    1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    4. version="4.0">
    5. <servlet>
    6. <servlet-name>HelloServletservlet-name>
    7. <servlet-class>com.example.Tomcat_web.HelloServletservlet-class>
    8. servlet>
    9. <servlet-mapping>
    10. <servlet-name>HelloServletservlet-name>
    11. <url-pattern>/hellourl-pattern>
    12. servlet-mapping>
    13. web-app>

    6.4.3 Servlet 生命周期方法

    • 执行 Servlet 构造器方法:在创建 Servlet 程序时会调用
    • 执行 init 初始化方法:在创建 Servlet 程序时会调用
    • 执行 service 方法:每次访问都会调用
    • 执行 destroy 销毁方法:在工程项目停止时会调用
    1. /* HelloServlet.java */
    2. package com.example.Tomcat_web;
    3. import javax.servlet.*;
    4. import javax.servlet.annotation.WebServlet;
    5. import java.io.IOException;
    6. @WebServlet(name = "helloServlet", value = "/hello-servlet")
    7. public class HelloServlet implements Servlet {
    8. public HelloServlet() {
    9. System.out.println("01-执行 Servlet 构造器方法");
    10. }
    11. @Override
    12. public void init(ServletConfig servletConfig) throws ServletException {
    13. System.out.println("02-执行 init 初始化方法");
    14. }
    15. @Override
    16. public ServletConfig getServletConfig() {
    17. return null;
    18. }
    19. /*
    20. * service 方法专门用来处理请求和响应
    21. * */
    22. @Override
    23. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    24. System.out.println("HelloServlet 被访问了!");
    25. }
    26. @Override
    27. public String getServletInfo() {
    28. return null;
    29. }
    30. @Override
    31. public void destroy() {
    32. System.out.println("03-执行 destroy 销毁方法");
    33. }
    34. }

    6.4.4 Get 与 Post 请求的分发处理

    模拟一个页面,嵌套两种请求方式

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>HelloServlettitle>
    6. head>
    7. <body>
    8. <form action="http://localhost:8080/Tomcat_web_war_exploded/hello" method="get">
    9. <input type="submit" >
    10. form>
    11. <form action="http://localhost:8080/Tomcat_web_war_exploded/hello" method="post">
    12. <input type="submit">
    13. form>
    14. body>
    15. html>
            在 service() 方法中使用 getMthod() 方法获取请求方式,然后进行不同请求方式进行分发处理 ,编写 doGet() 方法与 doPost() 方法来执行两种不同请求方式的响应结果

    1. /*
    2. * service 方法专门用来处理请求和响应
    3. * */
    4. @Override
    5. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    6. System.out.println("HelloServlet 被访问了!");
    7. //类型转换 获取 getMethod() 方法
    8. HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    9. //获取请求的方式
    10. String method = httpServletRequest.getMethod();
    11. //Get 与 Post 请求的分发处理
    12. if ("GET".equals(method)) {
    13. doGet();
    14. } else if ("POST".equals(method)) {
    15. doPost();
    16. }
    17. }
    18. /*
    19. * 做 get 请求的操作
    20. * */
    21. public void doGet() {
    22. System.out.println("HelloServlet-get 被访问了!");
    23. }
    24. /*
    25. * 做 post 请求的操作
    26. * */
    27. public void doPost() {
    28. System.out.println("HelloServlet-post 被访问了!");
    29. }
    30. }

    6.4.5 通过继承 HttpServlet 实现 Servlet 程序

    一般在实际开发项目中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序

    • 编写一个类去继承 HttpServlet  类
    • 根据业务需要重写 doGet() 或 doPost() 方法
    • 在 web.xml 中配置 Servlet 程序的访问地址
    1. /* HelloServlet.java */
    2. package com.example.Tomcat_web;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.annotation.WebServlet;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.IOException;
    9. @WebServlet(name = "helloServlet", value = "/hello-servlet")
    10. public class HelloServlet extends HttpServlet {
    11. //doGet() 方法在 get 请求时调用
    12. @Override
    13. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    14. System.out.println("HttpServlet 的 doGet() 方法");
    15. }
    16. //doPost() 方法在 post 请求时调用
    17. @Override
    18. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    19. System.out.println("HttpServlet 的 doPost() 方法");
    20. }
    21. }

    6.4.6 IDEA 快捷创建 Servlet 程序

    java 包 ——> 新建(new)——> Servlet 程序

    ​​​​​​​​​​​​​设置名称与所在类


    6.5 ServletConfig类

    Servlet 程序的配置信息类

    6.5.1 ServletConfig 类的三大作用

    • 可以获取 Servlet 程序的别名 servlet-name 的值
    • 获取初始化参数 init-param
    • 获取 ServletContext 对象
    1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    4. version="4.0">
    5. <servlet>
    6. <servlet-name>HelloServletservlet-name>
    7. <servlet-class>com.example.Tomcat_web.HelloServletservlet-class>
    8. <init-param>
    9. <param-name>usernameparam-name>
    10. <param-value>xfdqparam-value>
    11. init-param>
    12. servlet>
    13. <servlet-mapping>
    14. <servlet-name>HelloServletservlet-name>
    15. <url-pattern>/hellourl-pattern>
    16. servlet-mapping>
    17. web-app>
    1. package com.example.Tomcat_web;
    2. import javax.servlet.*;
    3. import javax.servlet.http.*;
    4. import javax.servlet.annotation.*;
    5. import java.io.IOException;
    6. @WebServlet(name = "HelloServlet", value = "/HelloServlet")
    7. public class HelloServlet extends HttpServlet {
    8. // init 初始化方法
    9. @Override
    10. public void init(ServletConfig config) throws ServletException {
    11. // 1.可以获取 Servlet 程序的别名 servlet-name 的值
    12. System.out.println("HelloServlet程序的别名是:"+config.getServletName());
    13. // 2.获取初始化参数 init-param
    14. System.out.println("程序使用者是:"+config.getInitParameter("username"));
    15. // 3.获取 ServletContext 对象
    16. ServletContext servletContext = config.getServletContext();
    17. System.out.println(servletContext);
    18. }
    19. @Override
    20. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    21. System.out.println("get 请求");
    22. }
    23. @Override
    24. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    25. System.out.println("post 请求");
    26. }
    27. }

    上一节:

    下一节: 

  • 相关阅读:
    【Docker】学习笔记(一)
    从零开始学数据结构系列之第三章《平衡二叉树的旋转类型图文详解》
    用SRM系统实现高效的询价竞价
    关于PHP fgetcsv 函数 读取有中文的CSV文件编码问题!
    ORA-28000: the account is locked
    三、RocketMQ的JAVAAPI的基础概念
    11月15日,每日信息差
    Redis实现分布式锁
    【记录】非常实用,Python编码规范的一些建议(2)
    [附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统
  • 原文地址:https://blog.csdn.net/woailuo8214/article/details/126031413