6.1 Servlet的部署、创建与运行
6.1.1 源文件及字节码文件
在开始编写Servlet之前,我们需要配置Java开发环境并确保已经正确安装了Java Development Kit(JDK)。在编写Servlet之后,我们需要将Java源文件编译成字节码文件(.class文件),以便在Web服务器上运行。
写一个创建 servlet 的类就是编写一个特殊类的子类,这个特殊的类就是 javax.servlet.http 包中的 HttpServlet 类。HttpServlet 实现了 Servlet 接口,实现了响应用户的方法。HttpServlet 的子类被习惯性地称作一个 Servlet 类,这样的类创建的对象习惯性的被称作一个 servlet。例如:
package moon.sun;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Example6_1 extends HttpServlet{
public void init(ServletConfig config)throws ServletException{
super.init(config);
}
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException{
response.setContentType("text/html;charset = utf-8");
printWriter out = response.getWriter();
out.println("<html><body bgcolor = #ffccff>");
out.println("<h1>hello servlet,你好 servlet</h1>");
out.println("</body></html>")
}
}
6.1.2 编写部署文件web.xml
在将Servlet部署到Web服务器上之前,我们需要创建一个部署描述文件(Deployment Descriptor)web.xml。这个文件是一个XML文件,用于配置Servlet的属性、URL映射以及其他相关设置。
编写的 web.xml 文件必须保存到 Web 服务目录的 WEB-INF子目录中,例如:
<?xml version = "1.0" encoding = "utf-8">
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>moon.sun.Example6_1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lookHello</url-pattern>
</servlet-mapping>
</web-app>
6.1.3 Servlet的创建与运行
要创建一个Servlet,我们需要编写一个Java类
目录
,并继承javax.servlet.http.HttpServlet
类。在Servlet类中,我们可以实现一些特定的方法,例如doGet()
和doPost()
,用于处理HTTP请求。
要运行Servlet,我们需要将编译后的字节码文件(.class文件)部署到Web服务器中。这通常涉及将文件复制到Web服务器的特定目录下,例如Tomcat服务器的webapps
目录。一旦部署完成,Web服务器将负责处理客户端请求并执行相应的Servlet代码。
6.1.4 向Servlet传递参数的值
为了向Servlet传递参数值,我们可以通过URL查询字符串、表单数据、HTTP头等方式将数据发送到Servlet。Servlet可以通过HttpServletRequest对象来获取这些参数值,并根据需要进行处理。
6.2 Servlet的工作原理
6.2.1 Servlet对象的生命周期
Servlet对象的生命周期包括初始化、服务和销毁三个阶段。
在初始化阶段,Servlet容器负责创建Servlet实例并调用其init()
方法。在这个方法中,我们可以进行一些必要的初始化操作,例如建立数据库连接或加载配置文件。
一旦初始化完成,Servlet容器将调用service()
方法来处理客户端请求。在service()
方法中,我们可以根据请求的类型(GET、POST等)执行相应的业务逻辑,并生成响应内容。
最后,在Servlet容器关闭或应用程序重新部署时,将调用Servlet的destroy()
方法来进行善后处理,例如释放资源或保存状态。
6.2.2 init方法
在Servlet的init()
方法中,我们可以执行一些初始化操作,例如读取配置文件、建立数据库连接或加载必要的资源。这个方法在Servlet实例创建后只会被调用一次,通常用于准备Servlet的运行环境。
6.2.3 service方法
Servlet的service()
方法是处理客户端请求的核心方法。在这个方法中,我们可以根据请求的类型(GET、POST等)执行相应的业务逻辑,并生成响应内容。在处理完请求后,Servlet容器会负责将生成的响应发送回客户端。
6.2.4 destroy方法
在Servlet的destroy()
方法中,我们可以进行一些善后处理操作,例如释放资源、保存状态或关闭数据库连接。这个方法在Servlet实例销毁之前被调用,通常用于清理Servlet的运行环境。
6.3 通过JSP页面访问Servlet
JavaServer Pages(JSP)是一种动态Web页面技术,它允许我们在HTML页面中嵌入Java代码。通过JSP页面,我们可以方便地访问Servlet并与其交互。
要在JSP页面中访问Servlet,我们可以使用JSP的内置对象request
和response
。通过这些对象,我们可以获取Servlet传递过来的参数值,并将结果显示在JSP页面上。
6.4 共享变量
Servlet容器允许在不同的Servlet之间共享数据,以便实现信息的交换和共享。我们可以使用ServletContext对象来存储和获取这些共享变量。ServletContext对象在整个Web应用程序中是唯一的,并且可以在所有的Servlet中访问到。
6.5 doGet和doPost方法
在Servlet中,doGet()
和doPost()
方法用于处理HTTP的GET和POST请求。当客户端发送GET请求时,Servlet容器将调用doGet()
方法来处理请求;当客户端发送POST请求时,容器将调用doPost()
方法。
我们可以根据需要选择在这两个方法中实现相应的业务逻辑,并生成响应内容。
6.6 重定向与转发
在处理客户端请求时,Servlet可以使用重定向(redirect)或转发(forward)的方式将请求发送到其他资源。
重定向是通过发送特定的HTTP响应代码来告诉客户端将请求重新定向到另一个URL。这种方式适用于需要将请求发送到不同的Web应用程序或其他服务器的情况。
转发是将请求传递给另一个资源(如Servlet、JSP页面或静态文件)进行处理,并将其响应返回给客户端。转发是在服务器内部完成的,客户端对此一无所知。
6.7 使用Session
Servlet的HttpSession对象允许我们在多个请求之间存储和检索用户特定的信息。通过使用Session,我们可以跟踪用户的会话状态,并在不同的请求之间共享数据。
我们可以使用getSession()
方法获取当前会话的HttpSession对象,并使用它来存储和获取会话数据。
总结
该章节介绍了Servlet的部署、创建和运行过程,讨论了Servlet的工作原理和生命周期。还探讨了如何通过JSP页面访问Servlet、共享变量的使用、不同HTTP请求方法的处理,以及重定向、转发和使用会话等方面的知识。通过深入了解Servlet的相关内容,我们可以更好地开发灵活、高效的Web应用程序。