Servlet:Server applet
*概念:运行在服务器端的小程序,Servlet就是一个接口,定义了java类被浏览器访问(容器)的规则
快速入门创建servlet:
1.创建javaEE项目
2.定义一个类,实现Servlet接口
3.实现Servlet的抽象方法
4.配置Servlet
在web.xml文件的跟标签<web-app>中配置
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>com.xiaoqiang.web.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>firstServlet.do</url-pattern>
</servlet-mapping>
package com.xiaoqiang.web;
import javax.servlet.*;
import java.io.IOException;
/**
* Servlet:Server applet
* *概念:运行在服务器端的小程序,Servlet就是一个接口,定义了java类被浏览器访问(容器)的规则
*
* 快速入门:
* 1.创建javaEE项目
* 2.定义一个类,实现Servlet接口
* 3.实现Servlet的抽象方法
* 4.配置Servlet
* 在web.xml文件的跟标签<web-app>中配置
* <servlet>
* <servlet-name>firstServlet</servlet-name>
* <servlet-class>com.xiaoqiang.web.FirstServlet</servlet-class>
* </servlet>
* <servlet-mapping>
* <servlet-name>firstServlet</servlet-name>
* <url-pattern>/firstServlet.do</url-pattern>
* </servlet-mapping>
*
*
* servlet的方法:
* 1.init 初始化方法,在Servlet被创建时执行一次,默认首次访问servlet时,容器会加载servlet,在加载的时候执行init方法。
* 在servlet标签中,可以使用load-on-startup标签定义servlet创建时机,值为负数访问时创建,值为>=0时启动时创建。
*
* servlet的init方法只执行一次,证明servlet是单例对象,为避免线程安全问题,尽量不要在Servlet中定义成员变量,或修改成员变量的值
*
* 2.service 提供服务的方法,每次被访问的时候执行
*
* 3.destroy 销毁方法,在服务器正常关闭时执行一次
* 在servlet销毁前执行,用于销毁资源
* 4.ServletConfig 获取servlet的配置对象
* 5.getServletInfo 获取servlet的一些信息,例如版本、作者等
*
* servlet生命周期:
* init初始化servlet、service提供处理客户端调用请求 、destroy在服务器正常关闭时销毁servlet
*
* servlet 注解
* 好处:支持注解配置,可以不需要 web.xml
* 步骤:
* 1.创建javaEE项目,选择servlet版本3.0以上
* 2.定义java类,实现servlet接口
* 3.复写方法
* 4.在类上使用@WebServlet注解
*/
//定义servlet请求路径写法1:@WebServlet(urlPatterns = "/TwoServlet")
//定义servlet请求路径写法2:@WebServlet(value = "/TwoServlet")
//定义servlet请求路径写法3:@WebServlet("/TwoServlet")
public class FirstServlet implements Servlet {
/**
* init 初始化方法,在Servlet被创建时执行一次
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init:servlet被加载");
}
/**
* service 提供服务的方法,每次被访问的时候执行
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service:servlet被调用");
}
/**
* ServletConfig 获取servlet的配置对象
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* getServletInfo 获取servlet的一些信息,例如版本、作者等
*/
@Override
public String getServletInfo() {
return null;
}
/**
* destroy 销毁方法,在服务器正常关闭时执行一次
*/
@Override
public void destroy() {
System.out.println("destroy:servlet被销毁");
}
}
servlet3.0版本:支持注解配置可以不使用 web.xml
1.创建javaEE项目,使用3.0以上servlet版本,可以不创建servlet
2.定义实现servlet接口的类
3.复写抽象方法
4.在类上使用@WebServlet("资源路径")
代码示例
package com.xiaoqiang.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* servlet3.0版本:支持注解配置可以不使用 web.xml
* 1.创建javaEE项目,使用3.0以上servlet版本,可以不创建servlet
* 2.定义实现servlet接口的类
* 3.复写抽象方法
* 4.在类上使用@WebServlet("资源路径")
*/
@WebServlet(urlPatterns = "/twoServlet")//urlPatterns资源路径,注解默认属性可以省略简化为 @WebServlet("/ThreeServlet")
public class TwoServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet3.0注解配置");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
servlet的方法:
1.init 初始化方法,在Servlet被创建时执行一次,默认首次访问servlet时,容器会加载servlet,在加载的时候执行init方法。
在servlet标签中,可以使用load-on-startup标签定义servlet创建时机,值为负数访问时创建,值为>=0时启动时创建。
servlet的init方法只执行一次,证明servlet是单例对象,为避免线程安全问题,尽量不要在Servlet中定义成员变量,或修改成员变量的值
2.service 提供服务的方法,每次被访问的时候执行
3.destroy 销毁方法,在服务器正常关闭时执行一次,在servlet销毁前执行,用于销毁资源
4.ServletConfig 获取servlet的配置对象
5.getServletInfo 获取servlet的一些信息,例如版本、作者等
servlet生命周期:
init初始化servlet、service提供处理客户端调用请求 、destroy在服务器正常关闭时销毁servlet
servlet 继承体系结构
抽象类 GenericServlet inplements Servlet
GenericServlet:将Servlet将service方法作为抽象,其他方法空处理,定义servlet可以继承将Servlet将service方法作为抽象实现service接口即可
抽象类 HttpServlet extends GenericServlet
HttpServlet:对http协议的一种封装,复写 doGet / doPost 方法即可,简化操作
1.定义类继承 Httpservlet
2.复写 doGet / doPost 方法
Servlet配置
1.urlPatterns:Servlet访问路径
1.一个servlet可以定义多个路径:@WebServlet({"path1","path2","path3"})
2.路径定义规则
/XXX 单层访问路径
/xxx/xxx... 多层访路径
/* *是通配符,访问优先级最低
*.do 访问后缀
package com.xiaoqiang.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
*servlet 体系结构
* service() Servlet提供服务的方法,每次被访问的时候执行
* 抽象类 GenericServlet inplements Servlet
* GenericServlet:将Servlet将service()方法作为抽象,其他方法空处理,定义servlet类时,可以继承将GenericServlet实现service()方法,在方法中处理不同类型的请求
*
* 抽象类 HttpServlet extends GenericServlet
* HttpServlet 封装了service接口,将不同类型的http请求分发到对应的处理方法中,我们复写对应的处理方法即可处理请求数据
* HttpServlet:对http协议的一种封装,复写 doGet / doPost 方法即可,简化操作
* 1.定义类继承 Httpservlet
* 2.复写 doGet / doPost 方法
*
*
*/
//public class TwoServlet extends GenericServlet{
//
// @Override
// public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// System.out.println("GenericServlet-service");
// }
//}
@WebServlet("/threeServlet")
public class ThreeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HttpServlet:doGet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HttpServlet:doPost");
}
}