学习如何使用servlet

88 阅读9分钟

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。 当客户向作为参数通过服务方法的网络服务器发送请求时,服务容器为ServletRequestServletResponse 创建对象。请求对象提供了对查询信息的访问,如头和被请求数据库的信息。

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并安装,如图所示。

download eclipse

第2步:安装TomCat当前版本。在我的案例中,我将使用TomCat 9.0.10版本,用于Windows。你可以在这里下载它。

download Apache TomCat version 9

把它解压到你选择的一个新文件夹中。

Extracted TomCat files

第3步:为Java EE开发者打开Eclipse IDE。通过选择文件,新建,然后是动态网页项目,然后按回车键,创建一个动态网页项目,如图所示。

create new web project

第4步:我们将把我们的项目命名为LogInDemo ,其他字段保留默认值,然后选择Finish

Project name

第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,如图所示。

creating sevlate page

  • 最后给你的servlet类起个名字。LoginAction1 是我要用的名字。

servlet class

  • 将下面的代码替换成你刚刚创建的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文件,如图所示。

new jsp file

  • 最后给你的jsp页面取一个类名。在这个例子中,我们就叫它welcomePage1.jsp

naming jsp file

  • 用下面的代码替换你刚刚创建的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服务器并运行该项目

  • 从服务器标签中选择 "没有服务器可用",如图所示。

Servers Tab

  • 接下来,选择Tomcat v9.0服务器或你选择的任何版本,但我推荐使用当前版本。

Choose the server version that you want to use.

  • 添加Apache安装目录

Apache installation directory

添加完Apache安装目录后点击完成。

  • Login.html 页面上点击右键,选择Run As,然后选择Run on Server。

Run web project on server

  • 当TomCat服务器被选中时,如下图所示。选择Finish ,并在弹出的屏幕上重新启动服务器。

Run web project on server

  • 在内部浏览器中,将出现以下页面。尝试用我们在LoginAction1.java中指定的凭证登录(用户名India ,密码1234 )。

Login page.

解释

从上面的例子来看,如果用户在登录页面上输入了正确的凭证,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岁以上或以下。

如果用户选择Above18Above18 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 方法,以及如何在例子的帮助下实现它们。我们讨论了这两个接口(ServletRequestServletDispatcher )以及它们的组成。

这篇文章将帮助你开始学习servlet,了解用户如何向服务器发送请求。从这里开始,你应该能够使用servlet和JSP技术来建立自己的动态网站。