Servlet
servlet = server+applet运行在服务器端的java程序
servlet是一个接口,一个类如果想通过服务器访问到,那么这个类就必须直接间接的实现Servlet接口
作用是:接受请求,处理逻辑,响应结果
快速开始
定义类实现Servlet接口,并重写该Servlet接口的抽象方法
public class HelloServlet extends HttpServlet { /** * 构造器执行顺序 * 优先执行 */ public HelloServlet(){ System.out.println("构造器执行了"); } /** * 前端发送的请求会在service方法中做逻辑处理 * 一般在开发中不会这样写 * @param req * @param res * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("hello requestServlet"); } /** * 当web服务器关闭时会执行该方法 */ @Override public void destroy() { System.out.println("销毁容器"); } /** * 当前端发送请求时会执行该方法,初始化容器 * @throws ServletException */ @Override public void init() throws ServletException { System.out.println("开始初始化容器"); } }
配置xml
<!--配置HelloServlet的映射--> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.lifly.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping>
servlet的生命周期
生命周期是指一个对象从创建到销毁的过程
init方法,servlet对象创建时,调用此方法
service方法,用户访问servlet,调用此方法,每访问一次,执行一次
destory方法,servlet对象小回迁,调用此方法(Servlet被销毁执行,服务器正常关闭,才会执行destroy方法,destory方法在servlet销毁之前执行,一般用于释放资源)
servletConfig对象
主要用于读取web.xml配置文件servlet中<init-param>信息,实现参数和代码的解耦
例如读取xml中的字符编码配置</init-param>
public class ServletConfigServlet implements Servlet { // 定义成员变量 private ServletConfig servletConfig; @Override public void init(ServletConfig servletConfig) throws ServletException { // 将init中的servletConfig对象,复制给成员变量 this.servletConfig = servletConfig; System.out.println("ServletConfigServlet 初始化开始"); } @Override public ServletConfig getServletConfig() { // 获取全局的ServletConfigServlet对象 return servletConfig; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { // 获取web.xml文件中配置的编码 String encode = getServletConfig().getInitParameter("encode"); System.out.println(encode); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("ServletConfigServlet 销毁"); } }
xml配置
<!--ServletConfigServlet映射--> <servlet> <servlet-name>ServletConfigServlet</servlet-name> <servlet-class>com.lifly.servlet.ServletConfigServlet</servlet-class> <!--配置局部编码--> <init-param> <param-name>encode</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletConfigServlet</servlet-name> <url-pattern>/ServletConfigServlet</url-pattern> </servlet-mapping>
Servlet3.0
简化web.xml配置servlet复杂性,提高开发效率
只需要编写类实现servlet接口,在类上添加@WebServlet("资源路径")即可
例如以下代码
@WebServlet("/ServletDemo01") public class ServletDemo01 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("初始化开始"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("服务开始"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("销毁"); } }