java web开发 第6章 Java Servlet基础

目录

servlet的部署、创建与运行

部署:

创建:

运行:

servlet的工作原理

servlet 对象的生命周期

通过JSP页面访问servlet

共享变量

doPost和doGet方法

重定向与转发

1.sendRedirect方法

2.forward方法

使用session


servlet的部署、创建与运行

JSP(Java Server Pages)和Servlet是Java Web开发中常用的技术,下面介绍它们的部署、创建与运行。

部署:

1. 安装Java环境:在部署JSP和Servlet之前,需要先安装Java环境。

2. 安装Web服务器:JSP和Servlet需要运行在Web服务器上,常用的Web服务器有Tomcat、Jetty、WebLogic等。

3. 部署应用程序:将编写好的JSP和Servlet程序打包成war包,然后将war包放到Web服务器的webapps目录下,Web服务器会自动解压并启动应用程序。

创建:

1. 创建JSP文件:使用文本编辑器或IDE工具创建JSP文件,并编写JSP代码。

2. 创建Servlet类:使用文本编辑器或IDE工具创建Servlet类,并编写Servlet代码。

3. 配置web.xml文件:将JSP和Servlet类配置到web.xml文件中,以便Web服务器能够正确地加载和运行它们。

运行:

1. 启动Web服务器:启动Web服务器,访问应用程序的URL地址。

2. 请求JSP页面:在浏览器中输入JSP页面的URL地址,Web服务器会将JSP页面编译成Servlet并执行。

3. 请求Servlet:在JSP页面中使用表单或超链接等方式请求Servlet,Web服务器会调用Servlet类中的doGet或doPost方法处理请求,并返回处理结果。

servlet的工作原理

Servlet是Java编写的服务器端程序,用于处理客户端的HTTP请求并生成相应的HTTP响应。下面是Servlet的工作原理:

1. 客户端发送HTTP请求到Web服务器。
2. Web服务器接收到请求后,将其转发给Servlet容器(例如Tomcat)。
3. Servlet容器根据请求的URL映射找到对应的Servlet。
4. 如果Servlet对象尚未实例化,容器会创建Servlet实例并调用其`init()`方法进行初始化。
5. 一旦Servlet实例化并初始化完成,容器会调用`service()`方法,将HTTP请求和响应对象作为参数传递给该方法。
6. 在`service()`方法中,Servlet可以根据请求的类型(GET、POST等)执行相应的逻辑处理。
7. Servlet可以通过HTTP请求对象(`HttpServletRequest`)获取请求的参数、头信息等,并通过HTTP响应对象(`HttpServletResponse`)生成响应内容。
8. Servlet可以访问数据库、调用其他Java类等进行更复杂的业务逻辑处理。
9. 处理完成后,Servlet将生成的HTTP响应发送回Web服务器。
10. Web服务器将HTTP响应发送给客户端浏览器,展示在用户界面上。

需要注意的是,Servlet是多线程的,容器可能会为每个请求创建一个新的线程来处理,以便同时处理多个请求。此外,Servlet还具有生命周期方法(`init()`、`service()`、`destroy()`),可以在初始化和销毁阶段执行特定的操作。

servlet 对象的生命周期

servletTomcat服务器负责创建并完成初始化工作。当多个用户请求一个servlet时,服务器为每个用户启动一个线程。

一个servlet的生命周期主要有下列三个过程组成:

(1) servlet第一次被请求加载时,服务器创建servletservlet调用init方法完成必要的初始化工作。

(2) 新诞生的servlet再调用service方法响应用户的请求。

(3) 当服务器关闭时,调用destroy方法销毁servlet

init方法只被调用一次。当后续的用户请求servlet服务时,Tomcat服务器将启动一个新的线程,在该线程中,servlet调用service方法。也就是说,每个用户的每次请求都导致service方法被调用执行,其执行过程分别运行在不同的线程中。

通过JSP页面访问servlet

通过JSP页面访问Servlet是一种常见的Java Web开发模式。以下是通过JSP页面访问Servlet的基本步骤:1. 创建一个Servlet类:首先,您需要创建一个继承自javax.servlet.http.HttpServlet的Java类,该类将处理与JSP页面的交互。确保在类中重写doGet()或doPost()方法,以处理来自JSP页面的请求。
 

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

public class MyServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 处理GET请求的逻辑
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 处理POST请求的逻辑
    }
}

2. 配置web.xml文件:接下来,您需要在web.xml文件中配置Servlet类和URL映射。打开位于您的Web应用程序的WEB-INF目录下的web.xml文件,并添加以下代码:
 

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/servlet</url-pattern>
</servlet-mapping>

这将把URL模式"/servlet"映射到名为"MyServlet"的Servlet类。

3. 创建一个JSP页面:现在,您可以创建一个JSP页面,它将包含与Servlet的交互逻辑。在Web应用程序的Web内容目录中创建一个新的JSP文件,例如index.jsp,并添加以下代码:

<html>
<body>
    <form action="servlet" method="post">
        <!-- 在这里添加表单元素和其他内容 -->
        <input type="submit" value="Submit">
    </form>
</body>
</html>

此JSP页面包含一个表单,其中的action属性设置为"servlet",这与web.xml文件中的URL模式相匹配。

  1. 启动Web服务器:将您的Web应用程序部署到一个Java Web服务器,例如Apache Tomcat。

  2. 访问JSP页面:启动Web服务器后,在浏览器中访问您的JSP页面。您可以通过URL直接访问该页面,例如:http://localhost:8080/yourwebapp/index.jsp。

  3. 提交表单:当您在JSP页面上填写表单并点击"Submit"按钮时,表单数据将被提交到指定的Servlet。Servlet将处理请求并返回响应。

共享变量

Servlet类是HttpServlet的一个子类,在编写子类时就可以声明某些成员变量,那么,请求servlet的用户将共享该servlet的成员变量

service方法可能被多次的调用。也就是说,当后续的用户请求该servlet时,Tomcat服务器将启动一个新的线程,在该线程中servlet调用service方法响应用户的请求,即每个用户的请求都导致service方法被调用执行,调用过程运行在不同的线程中,互不干扰。因此,不同线程的service方法中的局部变量互不干扰,一个线程改变了自己的service方法中局部变量的值不会影响其他线程的service方法中的局部变量。

doPostdoGet方法

在JSP页面中,您可以使用<form>元素将数据提交到服务器。当提交表单时,可以选择使用POST方法或GET方法。在JSP中,可以使用以下方法处理POST和GET请求:

1.doPost()方法:当使用POST方法提交表单时,服务器会调用JSP页面中的doPost()方法来处理请求。在该方法中,您可以获取表单数据、执行相应的操作,并生成响应。以下是一个示例:

<%@ page language="java" %>
 <%@ page import="java.io.*, java.util.*" %>
 <%@ page import="javax.servlet.*, javax.servlet.http.*" %>
 <% // 设置响应的内容类型
 response.setContentType("text/html"); // 获取表单数据
 String username = request.getParameter("username"); String password = request.getParameter("password");
 // 执行其他操作,例如验证用户信息、处理数据等
 // 生成响应
 PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("Welcome, " + username + "!");
 out.println("</body>"); out.println("</html>");
 %>

2.doGet()方法:当使用GET方法提交表单或直接访问JSP页面时,服务器会调用JSP页面中的doGet()方法来处理请求。在该方法中,您可以执行相应的操作,并生成响应。以下是一个示例:

<%@ page language="java" %> <%@ page import="java.io.*, java.util.*" %>
 <%@ page import="javax.servlet.*, javax.servlet.http.*" %> 
<% // 设置响应的内容类型
 response.setContentType("text/html");
 // 执行其他操作,例如处理数据等 // 生成响应
 PrintWriter out = response.getWriter(); out.println("<html>"); 
out.println("<body>"); out.println("Hello, World!"); 
out.println("</body>"); out.println("</html>");
 %>

在上述示例中,无论使用POST还是GET方法提交表单,服务器都会调用相应的方法来处理请求。您可以根据需要在doPost()和doGet()方法中编写逻辑来处理请求和生成响应。

重定向与转发

1.sendRedirect方法

重定向方法void sendRedirect(String location)

将用户重新定向到另一个JSP页面或servlet。重定向方法仅仅是将用户从当前页面或servlet定向到另一个JSP页面或servlet,但不能将用户对当前页面或servlet的请求(HttpServletRequest对象)转发给所定向的资源。即重定向的目标页面或servlet无法使用request获取用户提交的数据。

执行sendRedirect方法(重定向,也见4.2.3)时,Tomcat服务器还是要把当前的servlet代码执行完毕后才实施重定向(跳转)操作,但Tomcat服务器不再给用户看当前servlet代码的执行效果。如果在执行sendRedirect(URL url)方法后,servlet紧接着执行了return返回语句,那么Tomcat服务器会立刻结束当前servlet的执行。

2.forward方法

  RequestDispatcher dispatcher =

  request.getRequestDispatcher(JSP页面的URLservleturl-pattern);

例如:

RequestDispatcher dispatcher = request.getRequestDispatcher("target.jsp");

转发。在步骤(1)中获取的RequestDispatcher对象调用

void forward(ServletRequest request,ServletResponse response)             throws ServletException,ava.io.IOException

方法可以将用户对当前JSP页面或servlet的请求转发给RequestDispatcher对象所指定的JSP页面或servlet,例如:

dispatcher.forward (request,response);

把用户对当前JSP页面或servlet的请求转变为对转发到的JSP页面或servlet的请求

RequestDispatcher对象可以把用户对当前JSP页面或servlet的请求转发给另一个JSP页面或servlet,而且将用户对当前JSP页面或servlet的请求传递给转发到的JSP页面或servlet。也就是说,当前页面所转发到的标页面或servlet可以使用request获取用户提交的数据

使用session

在JSP中,您可以使用`session`对象来管理会话数据,以便在不同的页面之间共享和保持用户信息。以下是在JSP中使用`session`对象的示例:

1. 在JSP页面中获取`session`对象:
 

<%@ page session="true" %>

通过上述指令,您可以启用`session`对象,并在JSP页面中使用它。2. 在JSP页面中设置和获取`session`属性:
 

<%
    // 设置session属性
    session.setAttribute("username", "John");

    // 获取session属性
    String username = (String) session.getAttribute("username");
%>

在上述示例中,我们使用`session.setAttribute()`方法设置了一个名为`username`的属性,并将其值设置为"John"。然后,我们使用`session.getAttribute()`方法获取该属性的值。

3. 在JSP页面中销毁`session`:
 

<%
    // 销毁session
    session.invalidate();
%>

通过调用`session.invalidate()`方法,您可以销毁当前会话,从而清除所有会话数据。在JSP中,`session`对象是一个`HttpSession`类型的对象,它提供了一些其他有用的方法来管理会话数据。您可以使用这些方法来获取会话ID、设置会话超时时间、移除属性等。以下是一些示例:
 

<%
    // 获取会话ID
    String sessionId = session.getId();

    // 设置会话超时时间(以秒为单位)
    session.setMaxInactiveInterval(1800); // 设置为30分钟

    // 移除session属性
    session.removeAttribute("username");
%>

通过上述方法,您可以在JSP页面中使用`session`对象来管理会话数据,使其在不同的页面之间共享和保持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值