Java-servlet(五)手把手教你利用Servlet配置HTML请求与相应


前言

  • Servlet 配置是实现 Web 交互的关键桥梁,通过配置可将客户端请求精准映射到 Java 代码处理逻辑。
  • 在前一篇环境搭建的基础上,我们将进一步探索如何通过 Servlet 处理HTML 表单请求与动态响应生成。
  • 本文将通过代码示例演示如何配置 GET/POST 请求的处理逻辑,并解决常见的中文乱码与路径配置问题。

我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

一.加载新的模板

  • 在上一节中,我们配置好了Java-servlet的运行环境,然后得到以下结果
  • 环境配置博客地址

https://blog.csdn.net/2402_83322742/article/details/145998804

在这里插入图片描述

  • 没看过配置环境的强烈建议看一下如何配置Java-servlet环境
  • 之后我们单击SE3文件重新加载一个模板
    在这里插入图片描述
    在这里插入图片描述
  • 接着删除新创建的文件里java底下的所有包
    在这里插入图片描述
  • 然后创建新的包名com.niit和新的类LoginServlet,变成了以下这样
    在这里插入图片描述
  • 在类里面输入以下代码
package com.niit;

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

public class LoginServlet extends HttpServlet {
    
    

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        //解决乱码
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");

        //获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //返回到页面显示
        resp.getWriter().write("欢迎"+username+"你的密码是:"+password);
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        doGet(req, resp);
    }
}

二、LoginServlet 代码解释

下面我们来解释一下上面的代码

doGet方法

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
    //解决乱码
    resp.setContentType("text/html");
    resp.setCharacterEncoding("UTF-8");

    //获取请求参数
    String username = req.getParameter("username");
    String password = req.getParameter("password");

    //返回到页面显示
    resp.getWriter().write("欢迎"+username+"你的密码是:"+password);
}
  • @Override:表示该方法是重写父类HttpServlet中的doGet方法,用于处理HTTP的GET请求。
  • resp.setContentType("text/html");:设置响应的内容类型为HTML,告诉客户端服务器返回的是HTML格式的数据。
  • resp.setCharacterEncoding("UTF-8");:设置响应的字符编码为UTF-8,避免中文等字符出现乱码。
  • req.getParameter("username");req.getParameter("password");:从HTTP请求中获取名为usernamepassword的参数值,并将其存储在对应的字符串变量中。
  • resp.getWriter().write("欢迎"+username+"你的密码是:"+password);:通过响应的输出流将欢迎信息和用户输入的用户名、密码发送给客户端。

doPost方法

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
    doGet(req, resp);
}
  • @Override:表示该方法是重写父类HttpServlet中的doPost方法,用于处理HTTP的POST请求。
  • doGet(req, resp);:调用doGet方法来处理POST请求,这意味着无论客户端发送的是GET请求还是POST请求,最终都会由doGet方法来处理。

三、Web 项目配置

  • 配置好代码后,在ch4下找到打开模板设置
    在这里插入图片描述
    点击ch4文件找到上面的+号。然后找到web项目,单击添加
    在这里插入图片描述
    在这里插入图片描述
  • 单击应用点击然后确定
  • 在回到这个界面,找到工件按钮,找到添加
    在这里插入图片描述
    找到Web应用程序,点击原模块

在这里插入图片描述

找到ch4文件,点击确定
在这里插入图片描述
然后单击ch4的WEB文件,单击页面上的文件夹按钮,创建一个lib文件

在这里插入图片描述
单击lib文件,点击上面的+号,找到库文件,ctrl+a全选,然后点击确定

在这里插入图片描述

在这里插入图片描述

  • 然后点击应用,点击确定,这样就配置好Web文件
    在这里插入图片描述
  • 之后在ch4下的web.xml里面添加以下代码
    在这里插入图片描述
<servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.niit.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

四、web.xml 代码解析

下面来解析一下上面的代码
这段代码是在 web.xml 配置文件中对 Servlet 进行配置的内容,web.xml 是 Java Web 应用中用于部署描述的核心文件,

<servlet> 标签

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.niit.LoginServlet</servlet-class>
</servlet>
  • <servlet> 标签:这是一个容器标签,用于定义一个 Servlet 组件。每个 <servlet> 标签对应一个具体的 Servlet 类。
  • <servlet-name> 标签
    • 该标签用于为 Servlet 定义一个唯一的名称,这个名称在整个 web.xml 文件中必须是唯一的。在这个例子中,Servlet 的名称被定义为 login
    • 这个名称主要用于在 web.xml 文件的其他部分引用该 Servlet,比如在 <servlet-mapping> 标签中。
  • <servlet-class> 标签
    • 该标签指定了 Servlet 类的完整类名,包括包名。在这个例子中,Servlet 类是 com.niit.LoginServlet
    • 当服务器启动时,会根据这个类名去加载对应的 Servlet 类。

<servlet-mapping> 标签

<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>
  • <servlet-mapping> 标签:这是一个容器标签,用于将一个 Servlet 映射到一个或多个 URL 模式。通过这个映射,当客户端发送请求到指定的 URL 时,服务器会知道应该由哪个 Servlet 来处理该请求。
  • <servlet-name> 标签
    • 这里的 <servlet-name> 标签的值必须与前面 <servlet> 标签中定义的 <servlet-name> 标签的值一致,也就是 login
    • 它的作用是指定要映射的 Servlet 是哪个。
  • <url-pattern> 标签
    • 该标签指定了一个 URL 模式,在这个例子中是 /login
    • 当客户端发送的请求 URL 匹配这个模式时,服务器会将该请求转发给对应的 Servlet 进行处理。例如,当客户端访问 http://localhost:8080/yourApp/login 时(yourApp 是你的 Web 应用的上下文路径),服务器会将请求交给 com.niit.LoginServlet 来处理。

五、创建 HTML 文件

  • 之后找到ch4的web文件夹,右键新建一个HTML文件,名字为login1.HTML
    在这里插入图片描述
    在这里插入图片描述

  • 在HTML文件里加入一下代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<h1>HTTP 请求方式说明</h1>
    <p style="color: blueviolet; font-size: 20px;">
        <strong>GET 请求</strong>:GET 请求通常用于从服务器获取数据,它会将请求参数附加在 URL 后面。以下是几种发起 GET 请求的方法:
        <br>
        方法一:在 HTML 的 `form` 表单中,将 `method` 属性设置为 `get`,当用户提交表单时,就会发起 GET 请求。这种方式会把表单中的数据编码后添加到 URL 的查询字符串中。
        <br>
        方法二:直接在浏览器地址栏输入包含请求参数的 URL 并回车,浏览器会自动发起 GET 请求。例如,在地址栏输入 `http://example.com/api?param1=value1&param2=value2`。
        <br>
        方法三:超链接(`<a>` 标签)默认就是发起 GET 请求。当用户点击超链接时,浏览器会向链接的目标地址发起 GET 请求。
    </p>
    <p style="color: blue; font-size: 20px;">
        <strong>POST 请求</strong>:POST 请求通常用于向服务器提交数据,它会将请求参数放在请求体中,而不是 URL 后面。以下是发起 POST 请求的方法:
        <br>
        方法一:在 HTML 的 `form` 表单中,将 `method` 属性设置为 `post`,当用户提交表单时,就会发起 POST 请求。这种方式适合提交大量数据或包含敏感信息的数据,因为参数不会显示在 URL 中。
    </p>
    <h2>使用超链接发起 GET 请求示例</h2>
    <p>点击下面的链接,将发起一个 GET 请求到登录页面:</p>
    <a href="http://localhost:8080/login?username=testuser&password=testpass">点击这里登录</a>
    <h2>使用表单发起 GET 请求示例</h2>
    <form action="/login" method="get">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username" placeholder="请输入用户名">
        <br><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password" placeholder="请输入密码">
        <br><br>
        <input type="submit" value="登录">
    </form>
    <h2>使用表单发起 POST 请求示例</h2>
    <form action="/login" method="post">
        <label for="post-username">用户名:</label>
        <input type="text" id="post-username" name="username" placeholder="请输入用户名">
        <br><br>
        <label for="post-password">密码:</label>
        <input type="password" id="post-password" name="password" placeholder="请输入密码">
        <br><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

六、项目启动与问题解决

  • 然后单击最上面的编辑配置

在这里插入图片描述

  • 在部署里点击+号,找到工件

在这里插入图片描述
在这里插入图片描述
点击我们配置好的ch4文件,然后点击引用点击确定,然后启动项目在这里插入图片描述
在这里插入图片描述
在最上面输入我们刚刚的配置好的login1.HTML文件会进行跳转

在这里插入图片描述

  • 然后随便用下面的输入密码和账号进行跳转
    在这里插入图片描述
  • 会出现一个bug
    在这里插入图片描述
    这是为什么呢?
    在这里插入图片描述
    此时我们需要回到编辑配置里面

在这里插入图片描述

找到部署里面的应用程序上下文,删除里面的所有内容,只留下一个/就可以了

在这里插入图片描述

在这里插入图片描述

  • 然后重启服务在这里插入图片描述

继续上面的操作,随便选一个登录,这样变配置好了HTML请求与相应
在这里插入图片描述

配置成功!!!


以上就是这篇博客的全部内容,下一篇我们将继续探索 Java-servlet 的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述