Servlet请求和Servlet协作
HTTP请求是每一种可能感兴趣的信息,由你的计算机从网络服务器上请求。
servletRequest对象可以转发来自请求的客户端信息,如内容类型、名称和参数值、头信息、属性等。
简介
RequestDispatcher接口允许请求被转发或包含到另一个资源。这可以是从servlet到另一个servlet或servlet到HTML文件,或servlet到JSP文件。
这也可以用来添加其他资源内容。这是与Servlet Collaboration 的一种方法。
前提条件
要跟上这篇文章的步伐,读者需要具备以下条件。
- 一些核心Java的基本知识。
- 对servlet及其生命周期有一个介绍性的路径。
- 还需要一些HTML的基本知识。
你将需要安装以下工具。
- 一个开源的编辑器,如Eclipse,或任何其他相关的Java编辑器。
- Java JDK当前版本或任何。
- 你需要在你的电脑上安装一个网络浏览器。
- 服务器。在我的案例中,我将使用TomCat 9.0.54版,用于Windows。
ServletRequest
当我们与网站互动时,我们不断要求网页为我们做一些事情,例如,客户更新他们的资料等。每当一个客户或用户试图更新他们的资料时。在这种情况下,Java为我们提供了一个ServletRequest接口的对象,它将请求的信息转发到一个Servlet。 当客户向作为参数通过服务方法的网络服务器发送请求时,服务容器为ServletRequest 和ServletResponse 创建对象。请求对象提供了对查询信息的访问,如头和被请求数据库的信息。
ServletRequest的方法
ServletRequest 接口为我们提供了许多方法来处理客户的请求信息。
下面解释一些。
getParameter(String parameterName):该方法返回客户端请求的参数值,String类型。String[] getParameterValues(type parameterName):主要用于获取一个给定的多值参数名称的所有值。在这种情况下,对于在一个单一参数中包含多个值的列表框的工作是很有用的。getContentLength():返回所请求的数据类型的实际大小。Public String getContentType():返回媒体类型,如果未知,则返回空。Enumeration getParameterNames():: 使用目标参数的名称来返回一个枚举。String getCharacterEncoding():如果指定了编码字符,该方法将返回名称。如果没有指定,它在请求体中返回null。public int getServerPort():: 此方法收到的端口号将被返回。public abstract String getServerName():它返回接收请求的服务器名称。ServletInputStream getInputStream():返回查询主体中的二进制数据输入流。String getCharacterQueryString():返回来自类型协议名称的请求的URL路径String.getInputStream():该方法从一个类型的标准输出流中返回信息流ServletInputStream。String getLocalAddr():它返回请求所来自的接口的IP地址。getAttribute(String name):它返回由其名称设置的被请求对象的属性,并且返回类型为Object.Enumeration getAttributeName():它返回当前请求中可用的类型Enumeration的属性名称。ServletContext getServletContext()::它返回当前Servlet请求的内容,返回类型为ServletContext。removeAttribute(String name):当从当前请求的类型中删除属性时使用。void.
ServletRequest接口示例
在这个例子中,我们将用Servlet创建一个用户登录项目。在这种情况下,我们将使用getParameter() 来返回指定的查询参数名称的值。
创建这个项目的步骤
第1步: 下载适用于Java EE开发者的Eclipse IDE并安装,如图所示。
第2步:安装TomCat当前版本。在我的案例中,我将使用TomCat 9.0.10版本,用于Windows。你可以在这里下载它。
把它解压到你选择的一个新文件夹中。
第3步:为Java EE开发者打开Eclipse IDE。通过选择文件,新建,然后是动态网页项目,然后按回车键,创建一个动态网页项目,如图所示。
第4步:我们将把我们的项目命名为LogInDemo ,其他字段保留默认值,然后选择Finish 。
第5步:在项目资源管理器上右击LogInDemo ,选择新建->HTML文件选项并命名为Login.html 。在你创建的HTML页面中,用以下代码替换默认代码。
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>login demo</title>
</head>
<body>
<form action="LoginAction1" method="post">
<input type="text" name="name" placeholder="Enter username" required>
<input type="password" name="password" placeholder="Enter password" required>
<input type="submit" value="submit">
</form>
</body>
</html>
第6步:创建一个新的Servlet文件,如下所示。
- 在项目资源管理器上右键单击
LogInDemo,选择新建->Servlet,如图所示。
- 最后给你的servlet类起个名字。
LoginAction1是我要用的名字。
- 将下面的代码替换成你刚刚创建的servlet页面中的代码。
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet({ "/LogInDemo", "/LoginAction1" })
public class LoginAction1 extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String userName=request.getParameter("name");
String password=request.getParameter("password");
if(userName.equals("India") && password.equals("1234"))
{
response.sendRedirect("welcomePage1.jsp");
}
else
{
response.sendRedirect("Login.html");
}
}
}
第7步:创建一个新的JSP文件,如下所示。
- 右键单击项目资源管理器上的
LogInDemo,选择新建->JSP文件,如图所示。
- 最后给你的jsp页面取一个类名。在这个例子中,我们就叫它
welcomePage1.jsp。
- 用下面的代码替换你刚刚创建的JSP页面中的代码。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Hello World !</h1>
</body>
</html>
在Eclipse IDE中设置Apache Tomcat服务器并运行该项目
- 从服务器标签中选择 "没有服务器可用",如图所示。
- 接下来,选择Tomcat v9.0服务器或你选择的任何版本,但我推荐使用当前版本。
- 添加Apache安装目录
添加完Apache安装目录后点击完成。
- 在
Login.html页面上点击右键,选择Run As,然后选择Run on Server。

- 当TomCat服务器被选中时,如下图所示。选择
Finish,并在弹出的屏幕上重新启动服务器。
- 在内部浏览器中,将出现以下页面。尝试用我们在LoginAction1.java中指定的凭证登录(用户名
India,密码1234)。
解释
从上面的例子来看,如果用户在登录页面上输入了正确的凭证,LoginAction1.java servlet,在Post Request表单中被调用。
doPost () 将设置用户参数,并将其存储在变量userName和password中,如图所示。
String userName=request.getParameter("name");
String password=request.getParameter("password");
如果用户提供了正确的细节,在equals() 方法的帮助下,welcomePage1.jsp 将被执行,否则,客户端浏览器将停留在login.html 页面。
RequestDispatcher
RequestDispatcher接口允许我们将客户端的查询发送到另一个资源。Servlet,Html,JSP 。它还定义了一个接收请求并包括目标资源内容的对象。
RequestDispatcher方法
这里有两个由RequestDispatcher 接口提供的方法,主要是forward() 和include() 方法,解释如下。
-
public void forward(ServletRequest request, ServletResponse response):这个方法提供了一种有效的方式来转发客户的请求。它可以从servlet资源转到HTML文件、Servlet或JSP文件。 -
public void include(ServletRequest request, ServletResponse response):从它的名字include(),它有助于在响应中包括另一个资源的内容。
注意:这两个方法都会抛出IOExceptions。
RequestDispatcher例子
它是如何工作的
这个例子展示了RequestDispatcher 如何转发资源响应或将其包含在服务器上。这里我们使用index.jsp 来获得一个用户响应。在这种情况下,Controller Servlet检查输入的响应,如果用户是18岁以上或以下。
如果用户选择Above18 ,Above18 servlet页面将在forward() 方法的帮助下被执行。否则,客户端浏览器将停留在index.jsp 页面上,并出现一个拒绝信息,表明用户未满18岁。
按照下面的方法构造ServletDispatcherDemo 项目,假设你知道如何使用Eclipse IDE和TomCat服务器创建和运行一个Web项目,如上面ServletRequest接口例子中所解释的那样。
创建这个项目的步骤
第1步:为Java EE开发人员打开Eclipse IDE。通过选择文件 -> 新建 -> 动态 Web 项目来创建一个 Web 项目。
第2步:提供一个项目名称。我们将把我们的项目命名为ServletDispatcherDemo ,然后选择完成。
第3步:在项目资源管理器上右击ServletDispatcherDemo ,选择新建->JSP文件选项。
给你刚刚创建的页面一个名字。在这个例子中,我们把它叫做index.jsp 。用下面的代码替换HTML文件中的代码。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>page verification</title>
</head>
<body>
<body>
<form action="Controller" method="post">
<select name="selectOption" required>
<option value="Select you option">Select you option</option>
<option value="Above18">Above18</option>
<option value="below18">below18</option>
</select>
<input type="submit" value="Submit">
</form>
<%
String msg=request.getParameter("msg");
if("below18".equals(msg))
{
%>
<h1> Access denied! You are below 18 years!<h1>
<%} %>
</body>
</html>
第4步:创建一个新的servlet文件,方法如下。
-
在项目资源管理器上右击
ServletDispatcherDemo,选择新建->servlet,最后给你的servlet类起个名字。在这个例子中,我们就叫它Controller。 -
用下面的代码替换你刚刚创建的servlet页面中的代码。
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 javax.servlet.http.HttpSession;
@WebServlet({ "/ServletDispatcherDemo", "/Controller" })
public class Controller extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("Text/html");
String select=request.getParameter("selectOption");
HttpSession session=request.getSession();
session.setAttribute("userName", select);
response.getWriter().append("<html><body'></body></html>");
if(select.equals("Above18"))
{
RequestDispatcher rd=request.getRequestDispatcher("Above18");
rd.forward(request, response);
}
else
{
RequestDispatcher rd=request.getRequestDispatcher("index.jsp?msg=below18");
rd.include(request,response);
}
}
}
第5步:创建一个新的servlet文件,方法如下。
-
右键点击项目资源管理器上的
ServletDispatcherDemo,选择新建->servlet,最后给你的servlet类起个名字。在这个例子中,我们就叫它Above18。 -
用下面的代码替换你刚刚创建的servlet页面中的代码。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet({ "/Above18" })
public class Above18 extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
PrintWriter out = response.getWriter();
out.print("Welcome to the adult page.");
}
}
在index.jsp 页面上点击右键,选择 "运行"->"在服务器上运行"->"保存所有更改",并重新启动服务器以运行该项目。在内部浏览器中,会出现一个菜单,提示你选择你的年龄类别。
这个例子将为你在项目中使用ServletDispatcher 界面打下坚实的基础。为了改善你的理解和提高你的编码技能,我建议你开始探索更多的例子。
我们假设读者在这个例子中知道如何使用Eclipse IDE和配置Tomcat服务器。
结语
最后,我们学习了一些ServletRequest 方法和ServletDispatcher 方法,以及如何在例子的帮助下实现它们。我们讨论了这两个接口(ServletRequest 和ServletDispatcher )以及它们的组成。
这篇文章将帮助你开始学习servlet,了解用户如何向服务器发送请求。从这里开始,你应该能够使用servlet和JSP技术来建立自己的动态网站。