• Web应用开发 - 实训三 B Servlet基础


    前言:

    eclipse 是不可能用的,并不是说它界面丑,也不是说它难用,而是它实在不适合我,idea 还能用一用,界面还挺符合我审美的,一些操作也比较合适。

    注意:本篇文章使用的是工具是 IDEA,搭配 tomcat 10.1 使用

    零、前期准备

    此教程是以 idea专业版 为教程,请自行教程破解版

    准备工具

    下载地址:https://tomcat.apache.org/download-10.cgi
    在这里插入图片描述

    创建项目

    直接新建项目,选择 Jakara EE,模板为“Web 应用程序”,接下来就直接下一步,创建。
    在这里插入图片描述

    导入 jar 包

    1. 找到 tomcat 的安装目录
      (默认是:C:\Program Files\Apache Software Foundation\Tomcat 10.1)
      在这里插入图片描述
    2. 回到 idea 中点击左上角的“文件” -> “项目结构”
      在这里插入图片描述
    3. 点击左侧的 “库” -> 点击 “+” -> 选择 java
      在这里插入图片描述
    4. 在弹出来的窗口中找到刚刚找到的 tomcat 安装目录,并找到 lib 文件夹下的 “servlet-api.jar ”,然后确认就好了
      在这里插入图片描述

    配置运行设置

    1. 点击上方的“当前文件”,选择 “编辑配置”
      在这里插入图片描述
    2. 点击左上角的 “+”,找到 “Tomcat 服务器”本地
      在这里插入图片描述
    3. 点击 “部署”,选择 “工件”,并点击 “Servlet_war_exploded”
      在这里插入图片描述
      在这里插入图片描述
    4. 将下面的 “/Servlet_war_exploded” 改为 “/chapter03”
      在这里插入图片描述
      基本工作就到此结束,开始进入正题!!!

    一、实训第一部分

    第一张图(实现第一个Servlet程序)

    在图中目录创建 “HelloWorldServlet.java” ,代码如下:

    package com.example.servlet;
    
    import jakarta.servlet.*;
    import jakarta.servlet.annotation.WebServlet;
    
    import java.io.*;
    
    @WebServlet(name = "HelloWorldServlet", value = "/HelloWorldServlet")
    public class HelloWorldServlet extends GenericServlet {
        public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
            // 得到输出流 PrinterWriter 对象,Servlet 使用输出流来产生响应
            PrintWriter out = response.getWriter();
            // 使用输出流对象向客户端发送字符数据
            out.println("Hello World");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    点击右上角的三角形就可以运行项目了
    在这里插入图片描述
    在浏览器中打开 http://localhost:8080/chapter03/cn/itcast/firstapp/servlet/HelloWorldServlet
    效果图如下所示
    在这里插入图片描述

    第二张图(对文件3-1 HelloWorldServlet.java进行修改)

    将 “HelloWorldServlet.java” 中的代码修改成下面:

    package com.example.servlet;
    
    import jakarta.servlet.*;
    import jakarta.servlet.annotation.WebServlet;
    
    @WebServlet(name = "HelloWorldServlet", value = "/HelloWorldServlet")
    public class HelloWorldServlet extends GenericServlet {
        public void init(ServletConfig config) throws ServletException {
            System.out.println("init methed is called");
        }
    
        public void service(ServletRequest request, ServletResponse response) throws ServletException {
            System.out.println("Hello World");
        }
    
        public void destroy() {
            System.out.println("destroy method is called");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    重新运行程序

    在这里插入图片描述

    重新运行程序并在浏览器中打开 http://localhost:8080/chapter03/HelloWorldServlet

    可以看到终端,这边是我们需要的截图(只需要截终端的那部分)
    在这里插入图片描述
    示意图:
    在这里插入图片描述

    第三张图(在目录webapps\chapter03下编写一个名为form.html的文件)

    分别在图中的两个路径中创建 “RequestMethodServlet.java” 和 “form.html”

    在这里插入图片描述

    RequestMethodServlet.java 文件中的代码如下:

    package com.example.servlet;
    
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.*;
    
    @WebServlet(name = "RequestMethodServlet", value = "/RequestMethodServlet")
    public class RequestMethodServlet extends HttpServlet {
        public void doGet(HttpServletRequest request,
                          HttpServletResponse response) throws IOException {
            PrintWriter out = response.getWriter();
            out.write("this is doGet method");
        }
    
        public void doPost(HttpServletRequest request,
                           HttpServletResponse response) throws IOException {
            PrintWriter out = response.getWriter();
            out.write("this is doPost method");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    form.html 文件中的代码如下:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    <form action="/chapter03/RequestMethodServlet" method="post">
        姓名<input type="text" name="name"/><br/>
        密码<input type="text" name="psw"/><br/>
        <input type="submit" value="提交"/>
    form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    重新运行程序并在浏览器中打开 http://localhost:8080/chapter03/form.html 截图,点击“提交”后截图
    在这里插入图片描述
    在这里插入图片描述

    二、实训第二部分

    第一张图(ServletConfig接口实例)

    在如图文件夹中创建 “TestServlet02.java”

    在这里插入图片描述
    TestServlet02.java 文件代码如下

    package com.example.servlet;
    
    
    import jakarta.servlet.ServletConfig;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebInitParam;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet(name = "TestServlet02", value = "/TestServlet02",
            initParams = {@WebInitParam(name = "encoding", value = "UTF-8")})
    public class TestServlet02 extends HttpServlet {
        protected void doGet(HttpServletRequest request,
                             HttpServletResponse response) throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            // 获得 ServletConfig 对象
            ServletConfig config = this.getServletConfig();
            // 获得参数名为 encoding 对应的参数值
            String param = config.getInitParameter("encoding");
            out.println("encoding=" + param);
        }
    
        protected void doPost(HttpServletRequest request,
                              HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    重新运行程序并在浏览器中打开 http://localhost:8080/chapter03/TestServlet02 并截图

    在这里插入图片描述

    第二张图(ServletContext接口实例)

    在如图路径中新建文件 “TestServlet03.java”

    在这里插入图片描述
    TestServlet03.java 文件代码如下:

    package com.example.servlet;
    
    import jakarta.servlet.ServletContext;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    
    @WebServlet("/TestServlet03")
    public class TestServlet03 extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html; charset=utf-8");
            PrintWriter out = response.getWriter();
            // 得到 ServletContext 对象
            ServletContext context = this.getServletContext();
            // 得到包含所有初始化参数名的Enumeration 对象
            Enumeration<String> paramNames = context.getInitParameterNames();
            out.println("all the paramName and paramValue are following: ");
            // 遍历所有的初始化参数名,得到相应的参数值并打印
            while (paramNames.hasMoreElements()) {
                String name = paramNames.nextElement();
                String value = context.getInitParameter(name);
                out.println(name + ": " + value);
                out.println("
    "
    ); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在如图文件 “web.xml” 中添加如图部分代码

        <context-param>
            <param-name>companyName</param-name>
            <param-value>itcast</param-value>
        </context-param>
        <context-param>
            <param-name>address</param-name>
            <param-value>beijing</param-value>
        </context-param>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    重新运行程序并在浏览器中打开 http://localhost:8080/chapter03/TestServlet03 并截图

    在这里插入图片描述

    第三张图(ServletContext接口实例)

    在如下目录中创建文件 TestServlet04.java 和 TestServlet05.java
    在这里插入图片描述
    TestServlet04.java 文件内容如下

    package com.example.servlet;
    
    import jakarta.servlet.ServletContext;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    @WebServlet("/TestServlet04")
    public class TestServlet04 extends HttpServlet {
        public void doGet(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
            ServletContext context = this.getServletContext();
            // 通过 setAttribute()方法设置属性值
            context.setAttribute("data", "this servlet save data");
        }
    
        public void doPost(HttpServletRequest request,
                           HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    TestServlet05.java 文件内容如下

    package com.example.servlet;
    
    import jakarta.servlet.ServletContext;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/TestServlet05")
    public class TestServlet05 extends HttpServlet {
        public void doGet(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            ServletContext context = this.getServletContext();
            // 通过 getAttribute()方法获取属性值
            String data = (String) context.getAttribute("data");
            out.println(data);
        }
    
        public void doPost(HttpServletRequest request,
                           HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    重新运行项目并在浏览器中打开 http://localhost:8080/chapter03/TestServlet04 ,然后打开 http://localhost:8080/chapter03/TestServlet05 并截图

    在这里插入图片描述

    第四张图(ServletContext接口实例)

    在如下目录中创建文件 TestServlet06.java

    在这里插入图片描述
    TestServlet06.java 文件内容如下

    package com.example.servlet;
    
    import jakarta.servlet.ServletContext;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.util.Properties;
    
    @WebServlet("/TestServlet06")
    public class TestServlet06 extends HttpServlet {
        public void doGet(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html; charset=utf-8");
            ServletContext context = this.getServletContext();
            PrintWriter out = response.getWriter();
            //获取相对路径中的输入流对象
            InputStream in = context
                    .getResourceAsStream("/itcast.properties");
            Properties pros = new Properties();
            pros.load(in);
            out.println("Company=" + pros.getProperty("Company") + "
    "
    ); out.println("Address=" + pros.getProperty("Address") + "
    "
    ); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    重新运行项目并在浏览器中打开 http://localhost:8080/chapter03/TestServlet06 并截图

    在这里插入图片描述

    恭喜! 该实训到此结束!!!

  • 相关阅读:
    第三期:那些年,我们一起经历过的链表中的浪漫
    python学习笔记——序列
    攻防演习防御体系构建之第三篇之建立实战化的安全体系
    MFC+OSG(Open Secene Graph)场景实现中文HUD(head up display)效果,防止中文乱码
    中国传统美食网页HTML代码 学生网页课程设计期末作业下载 美食大学生网页设计制作成品下载 DW餐饮美食网页作业代码下载
    【校招VIP】前端ES6相关之Symbol
    mysql中concat拼接的时候一个为空,另一个不为空,导致结果为null,处理措施
    后台管理项目--如何搭建框架
    SpringMvc向request域中设置数据
    基于 Docker 构建轻量级 CI 系统:Gitea 与 Woodpecker CI 集成
  • 原文地址:https://blog.csdn.net/qq_46373141/article/details/132867168