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请求中获取名为username
和password
的参数值,并将其存储在对应的字符串变量中。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 定义一个唯一的名称,这个名称在整个
<servlet-class>
标签:- 该标签指定了 Servlet 类的完整类名,包括包名。在这个例子中,Servlet 类是
com.niit.LoginServlet
。 - 当服务器启动时,会根据这个类名去加载对应的 Servlet 类。
- 该标签指定了 Servlet 类的完整类名,包括包名。在这个例子中,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
来处理。
- 该标签指定了一个 URL 模式,在这个例子中是
五、创建 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¶m2=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
非常感谢您的阅读,喜欢的话记得三连哦 |