1.4 Servlet的概念和使用(重点)
1.4.1 基本概念 Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是Java语言编写 的服务器端程序,换句话说,Servlet就是运行在服务器上的Java类。 Servlet用来完成B/S架构下客户端请求的响应处理,也就是交互式地浏览和生成数据,生成动态 Web内容。
1.4.2 Servlet的编程步骤 建立一个Java Web Application项目并配置Tomcat服务器。 自定义类实现Servlet接口或继承 HttpServlet类(推荐) 并重写service方法。 将自定义类的信息配置到 web.xml文件并启动项目,配置方式如下: 在浏览器上访问的方式为:
1.4.3 Servlet接口 (1)基本概念 javax.servlet.Servlet接口用于定义所有servlet必须实现的方法。 (2)常用的方法 HelloServlet com.lagou.task01.HelloServlet HelloServlet /hello http://localhost:8080/工程路径/url-pattern的内容 方法声明 功能介绍 void init(ServletConfig config) 由servlet容器调用,以向servlet指示servlet正在 被放入服务中 void service(ServletRequest req, ServletResponse res) 由servlet容器调用,以允许servlet响应请求 ServletConfig getServletConfig() 返回ServletConfig对象,该对象包含此servlet的初 始化和启动参数 String getServletInfo() 返回有关servlet的信息,如作者、版本和版权 void destroy() 由servlet容器调用,以向servlet指示该servlet正 在退出服务 方法声明 功能介绍 abstract void service(ServletRequest req, ServletResponse res) 由servlet容器调用允许servlet响应 请求 方法声明 功能介绍 void doGet(HttpServletRequest req, HttpServletResponse resp) 处理客户端的GET请求 void doPost(HttpServletRequest req, HttpServletResponse resp) 处理客户端的POST请求 void init() 进行初始化操作 void service(HttpServletRequest req, HttpServletResponse resp) 根据请求决定调用doGet还是 doPost方法 void destroy() 删除实例时释放资源
1.4.5 GenericServlet类 (1)基本概念 javax.servlet.GenericServlet类主要用于定义一个通用的、与协议无关的servlet,该类实现了 Servlet接口。 若编写通用servlet,只需重写service抽象方法即可。 (2)常用的方法 1.4.6 HttpServlet类 (1)基本概念 javax.servlet.http.HttpServlet类是个抽象类并继承了GenericServlet类。 用于创建适用于网站的HTTP Servlet,该类的子类必须至少重写一个方法。 (2)常用的方法 1.4.7 Servlet 的生命周期 构造方法只被调用一次,当第一次请求Servlet时调用构造方法来创建Servlet的实例。 init方法只被调用一次,当创建好Servlet实例后立即调用该方法实现Servlet的初始化。 service方法被多次调用,每当有请求时都会调用service方法来用于请求的响应。 destroy方法只被调用一次,当该Servlet实例所在的Web应用被卸载前调用该方法来释放当前占用 的资源。
package com.d1; import javax.servlet.*; import java.io.IOException; import java.io.PrintWriter; public class heslt implements Servlet { /*有一个接口 Servlet 实现类 GenericServlet HttpServlet * Alt+回车 自动导入包 Alt+insert 生成的快捷键 * */ @Override public void init(ServletConfig servletConfig) throws ServletException { /* 初始化*/ System.out.println("Servlet初始化.."); } @Override public ServletConfig getServletConfig() { return null; //获取Servlet配置信息 } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //Servlet服务 System.out.println("Servlet服务可调用多次"); String protocol=servletRequest.getProtocol(); System.out.println("获取协议"+protocol); int servletport=servletRequest.getLocalPort(); System.out.println("获取服务端口号"+servletport); servletResponse.setCharacterEncoding("utf-8");//设置编码方式 String characterEncoding=servletRequest.getCharacterEncoding(); System.out.println("请求的编码方式"+characterEncoding); //响应方法 // 设置响应类型 和字符编码方式 可以解决中文乱码 servletResponse.setContentType("text/html;charset=utf-8"); //文件/格式text/html text/plain(txt) text/css //image/png image/jpeg image/svg PrintWriter writer=servletResponse.getWriter();//响应字符串 writer.write("响应此页面"); } @Override public String getServletInfo() { return null; //获取Servlet 信息 } @Override public void destroy() { //Servlet 服务销毁 System.out.println("Servlet 服务销毁"); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--在配置文件中配置映射--> <servlet> <!--Servlet 名字就是类名--> <servlet-name>heslt</servlet-name> <servlet-class>com.d1.heslt</servlet-class> </servlet> <!--Servlet映射配置--> <servlet-mapping> <servlet-name>heslt</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> hello </body> </html>