零基础入门JavaWeb——Servlet知识 柔光的暖阳◎ 2024-03-27 11:58 30阅读 0赞 ## 一、Servlet的概念 ## ### 1.1 什么是Servlet? ### Servlet是运行在服务端的Java小程序,是SUN公司提供一套定义动态资源规范。 ### 1.2 Servlet的作用 ### 用来接收、处理客户端请求、响应给浏览器的动态资源。在整个Web应用中,Servlet主要负责处理请求、协调调度功能。可以把Servlet称为Web应用中的**控制器**。 ### 1.3 Servlet入门 ### #### 目标 #### 在页面上点击超链接,由Servlet处理请求,并返回一个响应字符串:Hello,T am Servlet。 #### 实现步骤 #### ##### 1、 创建Web module ##### ##### 2、 创建html页面 ##### <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <a href="http://localhost:8080/web05/demo01">访问ServletDemo01</a> </body> </html> ##### 3、创建ServletDemo01类 ##### public class ServletDemo01 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("ServletDemo01对象被创建"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("ServletDemo01接收到了客户端的请求..."); // 向客户端响应一个字符串 servletResponse.getWriter().write("Hello,T am Servlet"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("ServletDemo01对象被销毁"); } } ##### 4、在web.xml中配置ServletDemo01 ##### <!-- 配置ServletDemo01的映射路径--> <servlet> <!-- 给要配置的Servlet去一个别名,一般建议就是当前Servlet的名字首字母小写--> <servlet-name>servletDemo01</servlet-name> <!-- 要进行配置的Servlet的全限定名--> <servlet-class>com.hxl.servlet.ServletDemo01</servlet-class> <!-- 配置它提前到服务器启动的时候创建,数字只代表优先级--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <!-- 和上面的Servlet-name是一致的--> <servlet-name>servletDemo01</servlet-name> <!-- 就是要给ServletDemo01配置的映射路径--> <!-- 一定要加/--> <url-pattern>/demo01</url-pattern> </servlet-mapping> ## 二、Servlet的生命周期 ## Servlet的生命周期就是Servlet从创建到销毁的过程。 \*\*创建:\*\*默认情况下是在第一次有请求访问该Servlet实例的时候才会创建该Servlet对象。 \*\*销毁:\*\*在服务器关闭,或者当前项目从服务器中移除的时候会销毁当前项目中的所有Servlet对象。 ### 2.1 Servlet的生命周期方法 ### 在Servlet的生命周期中必然会经历的方法称之为Servlet的生命周期方法,总共包含三个方法:init、service、destory。 #### 2.1.1 init方法 #### 该方法会在Servlet实例对象被创建出来之后执行,可以在该方法中获取当前Servlet的初始化参数,以及进行一些读取配置文件之类的操作。 #### 2.1.2 service方法 #### 该方法会在Servlet实例对象每次接收到请求的时候均执行,可以在该方法中接收、处理请求,以及将客户端需要的数据响应给客户端。 #### 2.1.3 destroy方法 #### 该方法会在Servlet实例对象销毁之前执行,可以在该方法中做一些资源回收、释放、关闭等等操作。 ### 2.2 配置Servlet提前创建 ### 有时候需要在Servlet创建的时候做一些资源加载等等耗时操作,所以如果Servlet在第一次接收请求的时候才创建的话必然会影响用户的访问速度,所以此时需要让Servlet提前创建,将Servlet的创建提前到服务器启动的时候。 通过修改web.xml中Servlet的配置可以实现: <!-- 配置ServletDemo01的映射路径--> <servlet> <!-- 给要配置的Servlet去一个别名,一般建议就是当前Servlet的名字首字母小写--> <servlet-name>servletDemo01</servlet-name> <!-- 要进行配置的Servlet的全限定名--> <servlet-class>com.hxl.servlet.ServletDemo01</servlet-class> <!-- 配置它提前到服务器启动的时候创建,数字只代表优先级--> <load-on-startup>1</load-on-startup> </servlet> ### 2.3 ServletConfig的介绍 ### #### 2.3.1 接口方法介绍 #### <table> <thead> <tr> <th>方法名</th> <th>作用</th> </tr> </thead> <tbody> <tr> <td>getServletName()</td> <td>获取<code><servlet-name>HelloServlet</servlet-name></code>定义的Servlet名称</td> </tr> <tr> <td>getServletContext()</td> <td>获取ServletContext对象</td> </tr> <tr> <td>getInitParameter()</td> <td>获取配置Servlet时设置的初始化参数,根据名字获取值</td> </tr> <tr> <td>getInitParameterNames()</td> <td>获取所有初始化参数名组成的Enumeration对象</td> </tr> </tbody> </table> #### 2.3.2 获取Servlet的初始化参数 #### 可以在web.xml中对Servlet配置初始化参数,可以在Servlet的init方法中获取配置的初始化参数的值。 代码如下: <!-- 配置ServletDemo01的映射路径--> <servlet> <!-- 给要配置的Servlet去一个别名,一般建议就是当前Servlet的名字首字母小写--> <servlet-name>servletDemo01</servlet-name> <!-- 要进行配置的Servlet的全限定名--> <servlet-class>com.hxl.servlet.ServletDemo01</servlet-class> <!-- 添加一个初始化参数--> <init-param> <param-name>username</param-name> <param-value>huangxinglin</param-value> </init-param> <!-- 配置它提前到服务器启动的时候创建,数字只代表优先级--> <load-on-startup>1</load-on-startup> </servlet> package com.hxl.servlet; import javax.servlet.*; import java.io.IOException; /** * 使用Servlet的时候可能会遇到一个问题:没有可以使用的Servlet接口 * 因为Servlet接口不是JDK中的,需要导入额外的jar包才能使用Servlet * * 编写Servlet的步骤: * 1. 编写一个类实现Servlet接口,并重写service()方法接收和处理请求 * 2. 给Servlet配置映射路径: * 2.1 方式一:使用xml配置(重点掌握) * 2.2 方式二:使用注解配置(了解) * * 3. Servlet的生命周期 * 3.1 创建:Tomcat在第一次接收到访问该Servlet的请求的时候,会创建出该Servlet的对象 * 3.2 销毁:Tomcat服务器关闭的时候销毁它里面所有的Servlet * * 4. Servlet的生命周期方法: * 4.1 init()方法:该方法会在Servlet对象被创建出来之后执行;通常在该方法中做一些初始化工作或者耗时工作 * 4.2 service()方法:该方法会在该Servlet每次接收到请求的时候执行; * 4.3 destroy()方法:该方法会在该Servlet对象被销毁之前执行 * * 5. 将Servlet的创建时机提前到服务器启动的时候,在web.xml中配置 */ public class ServletDemo01 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { // 使用ServletConfig对象读取初始化参数 String username = servletConfig.getInitParameter("username"); System.out.println("读取到的username是:"+username); System.out.println("ServletDemo01对象被创建"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("ServletDemo01接收到了客户端的请求..."); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("ServletDemo01对象被销毁"); } } ### 2.4 Servlet的三种映射路径配置 ### Servlet的映射路径是提供一个让别人能够访问该Servlet的路径,里如Servlet的映射路径是"/test",那么在浏览器上访问该Servlet的路径就是http://localhost:8080/项目部署名/test 一个Servlet可以配置多个映射路径,但是多个Servlet不能配置相同的映射路径 #### 2.4.1 映射路径的分类 #### ##### 1、完全路径匹配 ##### 访问当前Servlet的路径需要和配置的映射路径完全一致。 例如:Servlet的配置是`/demo1`,访问该Servlet的时候的路径也必须是`http://localhost:8080/项目部署名/demo1`才可以访问到。 ##### 2、目录匹配 ##### 以/开始需要以\*结束。 例如: 配置`/*`,访问的路径可以写成`/任意字符串`。 配置`/aa/*`,访问的路径可写成`/aa/任意字符串`。 ##### 3、 扩展名匹配 ##### 以`*`开头,以`.扩展名`结束,能够匹配所有以`.相同扩展名`结尾的请求路径。 例如: `*.action`:访问路径可以是`任意字符串.action`。 ## 三、ServletContext ## 服务器为其部署的每一个应用(项目)都创建了一个ServletContext对象。ServletContext属于整个项目,项目中的所有Servlet都可以共享同一个ServletContext对象。 ### 3.1 、获取ServletContext的API ### // 获取ServletContext对象 // 第一种获取ServletContext对象的方法 ServletContext servletContext = getServletContext(); // 第二种获取ServletContext对象的方法 ServletContext servletContext1 = getServletConfig().getServletContext(); ### 3.2、 ServletContext获取全局的初始化参数 ### ##### 1、在web.xml中配置Web应用级别的初始化参数 ##### <context-param> <param-name>username</param-name> <param-value>machao</param-value> </context-param> ##### 2、在Servlet的doGet方法中获取全局参数 ##### // ServletContext的作用一:获取全局的初始化参数 // 获取全局的初始化参数 String username = getServletContext().getInitParameter("username"); System.out.println("在ServletDemo04中获取全局的初始化参数username=" + username); ### 3.3、ServletContext作为全局的域对象 ### 域对象就是在一定的作用域范围内进行数据共享的对象,ServletContext作为全局域对象可以在整个项目的所有动态资源中进行数据共享。 示例如下: ServletContext servletContext = getServletContext(); String str ="刘备"; // 将str存储到ServletContext中 servletContext.setAttribute("str",str); // 获取域对象ServletContext中存放的数据 String str = (String) getServletContext().getAttribute("str"); System.out.println("在ServletDemo03中获取域对象中的str="+str); ### 3.4、 获取资源的真实路径 ### String realPath = servletContext.getRealPath("img/前端.jpeg"); System.out.println(realPath); 是要使用了ServletContext ### 学海无涯苦作舟 ###
还没有评论,来说两句吧...