文章目录
6.1servlet的部署、创建与运行
6.2servlet的工作原理
6.3通过jsp页面访问servlet
6.4共享变量
6.5doGet和doPost方法
6.6重定向与转发
6.7使用session
6.1 servlet的部署、创建与运行 在JSP中创建和运行Servlet是非常简单的。Servlet需要在Web服务器上运行,因此首先需要一个Web服务器。一些流行的Web服务器包括Apache Tomcat,JBoss和Jetty。在安装并启动Web服务器之后,可以按照以下步骤创建和部署Servlet:
1.编写Servlet代码,可以使用Java编写Servlet,该Servlet应该扩展HttpServlet类,并重写其中一个或两个方法(doGet或doPost)。
2.将Servlet代码编译为.class文件。
3.将.class文件复制到Web服务器上的特定目录,这通常在Web服务器安装目录下的webapps /目录中。
4.在Web服务器配置文件中添加Servlet的映射,指定Servlet的URL模式和Servlet类的名称。 5.重新启动Web服务器以加载新的Servlet。
在 JSP 中使用 Servlet,需要进行如下步骤: 1. 部署 Servlet 在 Web 项目的 WEB-INF 目录下创建 web.xml 文件,配置 Servlet:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
这里创建了一个名为 MyServlet 的 Servlet,映射到 /myservlet 路径。 2. 创建 Servlet 在 Java 项目中,需要创建一个继承 HttpServlet 类的 Servlet 类,实现 doGet() 或 doPost() 方法:
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello, World!</h1>");
out.println("</body></html>");
}
}
这里的 Servlet 类名为 MyServlet, doGet() 方法输出一个简单的 HTML 页面。 3. 运行 Servlet 在 JSP 中通过如下方式调用 Servlet:
<form action="myservlet" method="get">
<input type="submit" value="Click Me!">
</form>
在点击按钮后,JSP 会通过 /myservlet 路径访问 MyServlet Servlet,并触发其 doGet() 方法。最终将在浏览器中显示 Hello, World!。
6.2 servlet的工作原理 Servlet被设计为Web服务器上的Java组件,可以处理HTTP请求和响应。Servlet在Web服务器上创建并管理一个实例,可以处理多个HTTP请求。每个HTTP请求都由Web服务器发送到Servlet,并且Servlet可以生成HTTP响应。Servlet在Web服务器生命周期中一直处于活动状态。 当一个HTTP请求被发送到Web服务器时,Web服务器根据请求URL来确定哪个Servlet应该处理该请求。然后Web服务器将HttpServletRequest和HttpServletResponse对象传递给Servlet,并调用doGet或doPost方法,其中一个或两个方法必须被Servlet重写。 Servlet生成HTTP响应,并将其发送回Web服务器,Web服务器将HTTP响应发送回客户端浏览器。
以下是一个简单的例子: index.jsp:
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<form method="POST" action="HelloServlet">
Name: <input type="text" name="name" /><br/><br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
HelloServlet.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello, " + name + "!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello, " + name + "!</h1>");
out.println("</body>");
out.println("</html>");
}
}
当用户在 index.jsp 中输入姓名并提交表单时,会向 HelloServlet 发送一个 POST 请求。 HelloServlet 会从请求中获取姓名参数,并输出一个包含该姓名的 HTML 页面。这个页面将作为响应发送回给浏览器,并在浏览器中显示。 通过这个例子,我们可以更好地理解 JSP 和 Servlet 之间的交互关系。
6.3 通过jsp页面访问servlet 要从JSP页面访问Servlet,需要使用JSP表单和JSP页面中的HTML表单控件,例如提交按钮或文本框等。在JSP页面上定义表单时,需要将“action”属性设置为Servlet的URL。当用户单击提交按钮时,将向Servlet发送HTTP请求,并将表单数据作为HTTP请求参数发送给Servlet。Servlet可以读取这些参数,并在HTTP响应中向客户端浏览器发送结果。
6.4 共享变量 JSP页面和Servlet可以共享变量,以便在应用程序中传递数据。要共享变量,可以使用ServletContext对象、HttpSession对象或HttpServletRequest对象。ServletContext对象用于共享全局应用程序数据,HttpSession对象用于共享会话数据,HttpServletRequest对象用于共享请求数据。
6.5 doGet和doPost方法 doGet和doPost方法是Servlet中最常用的方法。这两个方法用于处理HTTP GET请求和POST请求。 doGet方法通常用于读取数据(例如Web页面),而doPost方法通常用于更新数据(例如Web表单)。在doGet方法中,Servlet从HttpServletRequest中读取请求参数,然后将响应发送回客户端浏览器。在doPost方法中,Servlet从HttpServletRequest中读取POST请求的表单数据,然后将响应发送回客户端浏览器。
6.6 重定向与转发 重定向和转发是在Web服务器和客户端之间传递控制的常用机制。重定向是指当Web服务器接收到一个HTTP请求时,Web服务器将请求重定向到另一个URL。转发是指Web服务器将HTTP请求从一个Servlet发送到另一个Servlet。在Servlet中,可以使用response.sendRedirect方法来重定向HTTP请求,也可以使用request.getRequestDispatcher方法来转发HTTP请求。
6.7 使用session并用代码举例 HttpSession是Servlet API中的一个关键对象,它用于在不同的HTTP请求之间保持会话状态。例如,在Web应用程序中,当用户在不同的页面之间导航时,可能需要在各个页面之间共享数据。为了解决这个问题,可以使用HttpSession对象将数据存储在Web服务器上,并在HTTP请求之间保持持久性。 以下是使用session的示例代码:
// 在Servlet中获取HttpSession对象
HttpSession session = request.getSession();
// 向session中存储数据
session.setAttribute("username", "john");
// 从session中读取数据
String username = (String) session.getAttribute("username");
在上面的示例中,创建了一个HttpSession对象,并将“username”属性设置为“john”。在下一个HTTP请求中,可以使用相同的HttpSession对象访问“username”属性,并获取其值。这使得在Web应用程序的不同部分之间传递数据非常容易。
总结
Java Servlet的核心是在服务器端创建响应用户请求的对象,即创建servlet对象。servlet 对象第一次被请求加载时,服务器创建一个servlet 对象,这个对象调用init方
法完成必要的初始化工作。init方法只被servlet 对象调用一次,当后续的客户请求该servlet对象服务时,服务器将启动一个新的线程,在该线程中,servlet对象调用service 方法响应客户的请求。每个客户的每次请求都导致service方法被调用执行,调用过程运行在不同的线程中,互不干扰。
光
Servlet类继承的service方法检查HTTP的请求类型(get、post等),并在service方法
中根据用户的请求方式,对应地调用doGet或doPost方法。因此,Servlet 类不必重写service方法,直接继承该方法即可。可以在Servlet类中重写doPost或doGet方法来响应用户的请求。
RequestDispatcher对象可以把用户对当前JSP页面或servlet的请求转发给另一个JSP页面或servlet,而且将用户对当前JSP页面或servlet 的请求和响应传递给转发到的JSP页面或servlet。也就是说,当前页面所要转发到的目标页面或servlet对象可以使用request获取用户提交的数据。