Javaweb03-Servlet技术1(Servlet,ServletConfig,ServletContext)

2024-06-11 20:12

本文主要是介绍Javaweb03-Servlet技术1(Servlet,ServletConfig,ServletContext),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Servlet技术(Servlet,ServletConfig,ServletContext)

1.Servlet的概述

Servlet是运行在Web服务器端的Java应用程序,它使用Java语言编写。与Java程序的区别是,Servlet 对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器(Tomcat)的支持。

  • Servlet接口的方法(javax.servlet.Servlet)
Servlet,ServletConfig,ServletContext --> GenericServlet
--> HttpServlet(实现Http请求) --> 自定义Servlet
方法声明功能描述
void init(ServletConfig config)Servlet实例化后,Servlet容器调用该方法完成初始化工作
void service (ServletRequest req,ServletResponse resp)负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。在service()方法中,可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息
void destroy()负责释放Servlet对象占用的资源。当服务器关闭或者Servlet对象被移除时,Servlet对象会被销毁,容器会调用此方法
ServletConfig getServletConfig()用于获取Servlet对象的配置信息,返回Servlet的ServletConfig对象
String getServletInfo()返回一个字符串,其中包含关于Servlet的信息,例如,作者、版本和版权等信息
  • 继承HttpServlet的自定义Servlet
@WebServlet("/TextServlet01")
public class TextServlet01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}
  • Servlet的配置

1.web.xml配置Servlet

:用来定义Servlet的名字

:用来定义Servlet类的位置,包括包名和类名

:用来定义Servlet的映射路径,它有两个属性表示要映射的Servlet的名字,表示要映射的路径,要映射的路径前要加"/",表示相对于Tomcat的位置

<servlet><servlet-name>TextServlet01</servlet-name><servlet-class>com.tyut.TextServlet01</servlet-class>
</servlet><servlet-mapping><servlet-name>TextServlet01</servlet-name><url-pattern>/servlet/TextServlet01</url-pattern>
</servlet-mapping>

2.@WebServlet配置Servlet

@WebServlet 注解用于代替web.xml文件中的等标签,该注解将会在项目部署时被容器处理,容器将根据具体的属性配置将相应的类部署为Servlet。可以标注在任意一个继承HttpServlet的类上

属性声明功能描述
String name指定Servlet的name属性,等价于。如果没有显式指定,则该 Servlet的取值即为类的全限定名。
String[] value该属性等价于urlPatterns属性。urlPatterns和value属性不能同时使用,同时存在是忽略value的值。
String[] urlPatterns指定一组Servlet的URL匹配模式。等价于标签。
InitParam[]指定一组Servlet初始化参数,等价于标签。
@WebServlet(name = "TextServlet01", urlPatterns = {"/TextServlet01", "/textServlet01"})
  • Servlet的生命周期

image-20240610202703908

当客户端向Servlet容器发出HTTP请求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,如果有,直接使用该Servlet对象;如果没有,就创建Servlet实例对象,然后通过调用init()方法完成Servlet的初始化。需要注意的是,在Servlet的整个生命周期内,它的init()方法只被调用一次。之后访问Servlet,每一个请求作为一个线程,Servlet对象不会再次创建
/*** Servlet的生命周期*/
@WebServlet(name = "TextServlet02", urlPatterns = "/textServlet02")
public class TextServlet02 extends GenericServlet {public void init(ServletConfig servletConfig) {System.out.println("Servlet is called");}public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("hello Servlet!!!");}public void destroy() {System.out.println("Servlet is destroyed");}
}

2.ServletConfig接口

  • ServletConfig基本概述(每个Servlet的配置信息)

在Servlet运行期间,经常需要一些配置信息,可以在@WebServlet注解的属性中配置或者在web.xml中配置。

当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet。

  • ServletConfig基本方法
方法声明功能描述
String getInitParameter(String name)根据初始化参数名返回对应的初始化参数值
Enumeration getInitParameterNames()返回一个Enumeration对象,其中包含了所有的初始化参数名
ServletContext getServletContext()返回一个代表当前Web应用的ServletContext对象
String getServletName()返回Servlet的名字

1.通过在每个Servlet中的@WebServlet注解的initParams属性中,通过@WebInitParam(name=“”,value=“”)注解设置Servlet的初始化参数

2.通过ServletConfig方法调用每个Servlet的初始化参数

/*** ServletConfig方法练习*/
@WebServlet(name = "ServletConfigText",urlPatterns = "/textServlet03",initParams = {@WebInitParam(name = "encoding", value = "UTF-8"), @WebInitParam(name = "name", value = "tyut")})
public class TextServlet03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();ServletConfig sc = getServletConfig();//方法一:获取ServletConfig的内容String name = sc.getInitParameter("name");String encoding = sc.getInitParameter("encoding");out.write("name=" + name +  " encoding=" + encoding + "<br>");//方法二:获取ServletConfig的内容Enumeration<String> initParameterNames = sc.getInitParameterNames();while (initParameterNames.hasMoreElements()) {String param = initParameterNames.nextElement();String initParameter = sc.getInitParameter(param);out.write(param + ":" + initParameter + "<br/>");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

3.ServletContext接口

  • ServletContext基本概述

当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用。ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。

  • 获取web应用初始化参数

1.通过再web.xml中配置web应用的初始化参数

<!--配置web应用程序的初始化参数--><context-param><param-name>school</param-name><param-value>tyut</param-value></context-param><context-param><param-name>address</param-name><param-value>taiyuan</param-value></context-param>

2.通过ServletContext方法实现对web应用程序初始化参数的调用

方法声明功能描述
String getInitParameter(String name)根据初始化参数名返回对应的初始化参数值
Enumeration getInitParameterNames()返回一个Enumeration对象,其中包含了所有的初始化参数名
@WebServlet("/TextServlet04")
public class TextServlet04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();ServletContext sc = getServletContext();/* 1.获取web应用程序初始化参数 *///方法一:String school = sc.getInitParameter("school");String address = sc.getInitParameter("address");out.write("school=" + school + "<br/>" + "address=" + address + "<br/>");//方法二:Enumeration<String> names = sc.getInitParameterNames();while (names.hasMoreElements()) {String s = names.nextElement();out.write(s + "=" + sc.getInitParameter(s) +"<br/>");}}
  • 实现多个Servlet数据共享(域对象)

一个Web应用中的所有Servlet共享同一个ServletContext对象,ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。

方法声明功能描述
Enumeration getAttributeNames()获取域对象名字的Enumeration对象
Object getAttribute(String name)根据域对象的名字获取域对象的值
void removeAttribute(String name)根据域对象的名字删除域对象
void setAttribute(String name, Object value)添加域对象
@WebServlet("/TextServlet04")
public class TextServlet04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/* 2.实现Servlet之间的数据共享 */List<String> cart = new ArrayList<String>();cart.add("apple");cart.add("orange");sc.setAttribute("cart", cart);sc.setAttribute("food", "beef");}
}@WebServlet("/TextServlet05")
public class TextServlet05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();ServletContext sc = getServletContext();List<String> cart = (List<String>) sc.getAttribute("cart");System.out.println(cart);sc.removeAttribute("food");String food = (String) sc.getAttribute("food");System.out.println(food);}
}
  • 读取web应用下的资源文件

ServletContext接口定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于Web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径

方法说明功能描述
Set getResourcePaths(String path)返回一个Set集合,集合中包含资源目录中子目录和文件的路径名称。参数path必须以正斜线(/)开始,指定匹配资源的部分路径
String getRealPath(String path)返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线(/)开始,“/”表示当前Web应用的根目录,如果Servlet容器不能将虚拟路径转换为文件系统的真实路径,则返回null
URL getResource(String path)返回映射到某个资源文件的URL对象。参数path必须以正斜线(/)开始,“/”表示当前Web应用的根目录
InputStream getResourceAsStream(String path)返回映射到某个资源文件的InputStream输入流对象。参数path传递规则和getResource()方法完全一致
/*** ServletContext实现下载web应用下的资源文件*/
@WebServlet("/TextServlet06")
public class TextServlet06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();//获取资源的绝对路径ServletContext sc = getServletContext();String path = sc.getRealPath("/WEB-INF/tyut.properties");System.out.println(path);//获得文件的流对象InputStream in = sc.getResourceAsStream("/WEB-INF/tyut.properties");Properties pros = new Properties();pros.load(in);System.out.println(pros.getProperty("name"));System.out.println(pros.getProperty("hobby"));}
}

这篇关于Javaweb03-Servlet技术1(Servlet,ServletConfig,ServletContext)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052177

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("