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

浙公网安备 33010602011771号