什么是servlet
- Servlet其实就一个运行在web服务器上的小的Java程序,用于处理从web客户端发送的请求,并且对请求作出响应。
Servlet技术概述
JavaEE技术有13规范,其中之一就是Servlet规范,本质就是接口
Servlet是JavaEE技术平台的规范,Servlet 运行在服务端的Java小程序只能运行在WEB服务器(Tomcat).
Servlet是JavaWeb三大组件之一(Servlet、Filter、Listener),且最重要。
作用: 接收请求,进行响应
广义的Servlet: Servlet接口所有实现类
狭隘的Servlet: 专门指的是Servlet接口
Servlet程序快速入门
实现Servlet程序入门,Servlet成为Java服务器端程序,由客户端浏览器访问的.
- 实现步骤:
- 定义类实现接口Servlet
- 重写接口中的全部抽象方法(5个)
- 在web.xml中配置Servlet
下面是定义了一个QuickStartServlet类实现接口Servlet:
package com.ccc.servlet;
/*
* 实现Servlet快速入门
* 1、创建一个类实现Servlet接口(Tomcat)
* 2、重写Servlet接口中的所有抽象方法(5个)
* 3、在当前项目的web.xml文件中,对Servlet进行配置
*/
public class QuickStartServlet implements Servlet{
/*
service方法用于接收客户端的请求,给客户端进行响应
ServletRequest:接收客户端的请求
ServletResponse:给客户端进行响应
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet快速入门");
// 参数servletResponse方法getWriter()获取字符输出流
Writer w = servletResponse.getWriter();
//输出流的方法write,数据写到客户端浏览器
w.write("hello world");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
在web.xml中配置这个类
<servlet>
<!--quick这个名字随便起,但要跟下面的<servlet-name>内的名字对应-->
<servlet-name>quick</servlet-name>
<!--这个名字是前面那个实现接口Servlet的类的全路径-->
<servlet-class>com.ccc.servlet.QuickStartServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--quick这个名字随便起,但要跟上面的<servlet-name>内的名字对应-->
<servlet-name>quick</servlet-name>
<!--使用浏览器访问Servlet的虚拟路径-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
访问servlet
http://localhost:8080/day01/hello
这个day01是package com.ccc.servlet这个包所属的模块名称。
Servlet程序执行原理(重要)
Servlet对象生命周期
Servlet生命周期:Servlet对象从创建到销毁的过程。
- Servlet何时被创建又是何时被销毁的?
Servlet中有init,service,destroy方法,这几个方法称为是Servlet生命周期相关的方法。
-
init(ServletConfig config)Servlet对象的初始化方法,对象被创建的时候调用
Servlet对象什么时候被创建
-
Servlet默认第一次访问的时候,对象被创建
-
Tomcat服务器启动的时候创建对象,需要修改web.xml (一般不配置)
<!-- Tomcat服务器启动的时候,自动创建Servlet对象 配置的数字是设置启动的优先级 可以写任意的整数,数字越小,优先级越高 --> <load-on-startup>5</load-on-startup>
-
-
service(request,response)客户端访问一次,执行一次
-
destory()Servlet对象销毁之前调用
-
Servlet对象什么时候被销毁
- 停止Tomcat服务器
- WEB项目从服务器移除
Servlet的Web.xml配置
<!--
Servlet的详细配置
-->
<servlet>
<!-- name,定义名字,随意-->
<servlet-name>path</servlet-name>
<!-- class 配置类的全名,反射-->
<servlet-class>com.itheima.servlet.PathServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- name 必须和上面name相同-->
<servlet-name>path</servlet-name>
<!-- url-pattern 配置的是浏览器访问的虚拟路径,需要最后将“\”后的名字输入到浏览器-->
<url-pattern>/path</url-pattern>
</servlet-mapping>
url-pattern的配置
-
1、完全匹配
/abc : 浏览器地址栏必须写 /abc(abc只是方便为了举例)
<url-pattern>/path</url-pattern>
-
2、目录匹配
/aaa/bbb/* : 浏览器地址栏可以写 /aaa/bbb/任意
-
3、后缀名匹配
*.abc : 浏览器地址栏可以写 任意.abc
目录匹配和后缀名匹配不能同时使用
/aaa/bbb/*.abc 冲突
IDEA创建Servlet(重要)
public class MyServlet extends HttpServlet {
/**
* doGet方法对应了客户端浏览器的提交方式GET
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("MyServlet run");
}
/**
* doPost方法对应了客户端浏览器的提交方式POST
* 无论:是POST提交,还是GET,统一处理,都使用doGet
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用doGet
doGet(request,response);
}
}
继承HttpServlet原理
Servlet是JavaEE规范,Servlet接口中的标准方法 service方法
修改Servlet模版(了解)
ServletConfig对象
ServletConfig对象,表示的是Servlet配置对象
有一个Servlet程序,就会出现一个对应的ServletConfig对象
-
获取ServletConfig对象
- init方法参数(ServletConfig servletConfig),调用者是Tomcat引擎,ServletConfig对象是由Tomcat引擎创建
- 父类中,定义了方法 ServletConfig getServletConfig()
-
对象能做什么
-
获取Servlet的名字,String getServletName()
<servlet-name>config</servlet-name>
-
获取Servlet的初始化参数,String getInitParameter(“键名”)
<init-param> <param-name>heima</param-name> <param-value>java</param-value> </init-param>
public class ConfigServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* 使用父类的方法getServletConfig()方法,获取ServletConfig对象 ServletConfig是接口 org.apache.catalina.core.StandardWrapperFacade 接口的实现类(Tomcat重写) */ ServletConfig config = getServletConfig(); System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@63b85cd //获取Servlet名字 String servletName = config.getServletName(); System.out.println(servletName);//config //获取Servlet初始化参数 String value = config.getInitParameter("heima"); System.out.println(value);//340 } }
-