0308 Servlet类
在Servlet类中有三个方法
1、init(ServletConfig config) 在servlet对象创建的时候执行
该方法中传入了一个ServletConfig 对象参数,那么该对象是Servlet配置对象,里面封装的是Servlet类中的配置信息,
通过getInitParameter方法获取到在配置文件中的配置信息,getServletContext方法创建一个ServletContext对象
2、service(ServletRequest request,ServletResponse response)每次请求都会执行
ServletRequest 代表请求封装的都是http请求信息
ServletResponse 代表响应,封装的都是响应信息
3、destroy() servlet销毁的时候执行
代码展示 用实现接口的方法
public class MyServlet implements Servlet{ public ServletConfig getServletConfig() { return null; } public String getServletInfo() { return null; } public void init(ServletConfig arg0) throws ServletException { //ServletConfig 是Servlet配置信息 System.out.println("MyServlet创建了"); //获取初始化参数 String init=arg0.getInitParameter("driver"); System.out.println(init); //获取Servletcontext对象 ServletContext context=arg0.getServletContext(); } public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("MyServlet被访问了"); } public void destroy() { System.out.println("MyServlet被销毁了"); } }
xml文件中配置信息
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>WEB01</display-name> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.oracle.demo01.MyServlet</servlet-class> <!-- Servlet初始化参数 --> <init-param> <param-name>driver</param-name> <param-value>com.oracle.jdbc.Driver</param-value> </init-param> <!-- 设置服务器启动时创建该类对象 内写优先级 --> <!-- <load-on-startup>3</load-on-startup> --> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
当客户端请求时 的运行结果
流程图之 解析请求地址
运行流程
servlet声明周期
Servlet何时创建 默认(服务器启动时)第一次访问servlet时创建该对象(也可以设置启动服务器的时候就创建 就是在xml文件中servlet标签中加一个load-on-startup 标签 内写优先级 优先级高先执行
Servlet何时销毁 服务器关闭servlet就销毁了
每次访问必然执行的方法 service(ServletRequest req, ServletResponse res)方法
问题:对XXXServlet进行了10次访问,init(),destory(),service(),doGet(),doPost() 一共执行力多少次?request对象创建几个?response创建几个
init() 一次 destory() 一次 service() 十次 doGet() 十次 doPost()十次 request对象创建10个 response创建10个
那我们使用实现接口的方式去实现 那这样创建我们要覆盖的方法过多,那么在实际开发中我们应用创建类去继承HttpServlet类 重写doGet和doPost方法
代码展示
public class Servlet01 extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("servlet被访问了"); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>WEB02</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Servlet01</servlet-name> <servlet-class>com.oracle.web.Servlet01</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet01</servlet-name> <url-pattern>/Servlet01</url-pattern> </servlet-mapping> </web-app>
我们也可以有更简便的方法,我们不创建类了 我们直接创建servlet
在src下包名上右击---new---servlet
那么在xml文件中自动添加关于servlet02的配置信息
当然我们创建的这个servlet02格式很乱并不是我们想要的格式 那我们可以配置一下
首先 windows-->preperence
这样我们创建的servlet就是我们想要的格式了
package com.oracle.web; 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 Servlet02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("hello dandan..."); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
看一下自动生成的xml文件内容
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>WEB02</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Servlet01</servlet-name> <servlet-class>com.oracle.web.Servlet01</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet01</servlet-name> <url-pattern>/Servlet01</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>Servlet02</display-name> <servlet-name>Servlet02</servlet-name> <servlet-class>com.oracle.web.Servlet02</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet02</servlet-name> <url-pattern>/Servlet02</url-pattern> </servlet-mapping> </web-app>
运行结果
xml文件中基本配置中
其中url-pattern的配置方式
(1)完全匹配 就是url-pattern标签中写的什么 当服务器请求的时候就得写什么一点都不能错 才能访问到
(2)目录匹配 格式:/虚拟的目录../* *代表任意 只要前边虚拟目录对 后边可以随便写 都可以访问到
(3)扩展名匹配 格式:*.扩展名 前边可以随便写,但是后边的扩展名必须跟这个一样 才能访问
欢迎页面
我们发现xml文件中自动有一个 welcome-file-list标签
有这些内容
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
当我们浏览器地址栏 只输入 项目名称 例如:http://localhost:8080/WEB02/,那么就会查找xml文件中的welcome-file-list标签中的这些内容,如果项目中没有新建上述标签中的文件 就会报404,如果有 就会显示这文件中的内容
例如 我们在Web-content文件夹下创建一个index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> aaa </body> </html>
那当我们浏览器请求的时候
那我们说 如果把welcome-file-list标签中的<welcome-file>index.jsp</welcome-file>删掉 ,浏览器中还是会正常显示,因为先查找当前项目中的xml文件 如果没有这个,那就去全局xml文件中查找,那如果有就显示,没有就404