JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用
2022/1/18 11:33:56
本文主要是介绍JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第六节 ServletContext对象及其应用
目录
- 第六节 ServletContext对象及其应用
- 6.2 ServletContext简介
- 6.1 ServletContext的应用
- 6.1.1 共享数据
- 6.1.2 getInitParameter()方法获取初始化对象
- 6.1.3 请求转发
- 6.1.4 读取资源文件
6.2 ServletContext简介
web容器在启动时,它会为每个web程序创建对应的ServletContext对象,它代表了当前的web应用
6.1 ServletContext的应用
6.1.1 共享数据
一个web工程(servlet)只有唯一一个全局的ServletContext对象,这里可以存储一些数据并取出
在ServletContext中存储数据的方法
ServletContext context = this.getServletContext(); String username = "mjj"; //将一个数据保存在ServletContext中,名字:username,值:username变量(即“mjj”) context.setAttribute("username",username);
从ServletContext获取数据的方法
ServletContext context = this.getServletContext(); //这里传入ServletContext中一个数据的名字name(实为键key),获取到这个名字的值(实为值value) String username = (String) context.getAttribute("username");
我们可以把这个获取到的数据显示在我们的web页面上去
resp.getWriter().print(username);
在web.xml注册servlet后即可实现请求和响应
<servlet> <servlet-name>getServlet</servlet-name> <servlet-class>com.mjj.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>getServlet</servlet-name> <url-pattern>/get</url-pattern> </servlet-mapping>
6.1.2 getInitParameter()方法获取初始化对象
不但可以获取此类中的String类型的数据
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String s = "xxx"; servletContext.getInitParameter(s); }
还可以获取web.xml里的一些配置web应用的初始化参数
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String url = servletContext.getInitParameter("url"); resp.getWriter().print(url); }
在class中写好后,记得在web.xml中注册servlet
<servlet> <servlet-name>demo</servlet-name> <servlet-class>com.mjj.servlet.ServletDemo3</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo</servlet-name> <url-pattern>/demo</url-pattern> </servlet-mapping>
6.1.3 请求转发
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("进入了demo04,这里面的内容是从/demo中转发过来的"); ServletContext servletContext = this.getServletContext(); //RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/demo"); //requestDispatcher.forward(req,resp); servletContext.getRequestDispatcher("/demo").forward(req,resp);
同样要在web.xml中注册这个class
<servlet> <servlet-name>demo04</servlet-name> <servlet-class>com.mjj.servlet.ServletDemo04</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo04</servlet-name> <url-pattern>/demo04</url-pattern> </servlet-mapping>
转发与重定向:
6.1.4 读取资源文件
在maven配置时,有时会出现配置文件失败的情况
Properties:
- 在java中新建properties
- 在resources中新建properties
发现:都被打包到了同一路径下classes,我们俗称这个路径为classpath
新建ServletDemo05用来读取资源:
思路:使用一个文件流来读取数据
要找的不是IDEA中的文件,而是导出的web应用的文件,最上面的classes是编译产生的,打包的时候只打包了servlet-02-1.0-SNAPOSHOT
public class ServletDemo05 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //把资源变成一个流,传入的即为路径 InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/dp.properties"); Properties properties = new Properties(); //加载这个流 properties.load(resourceAsStream); String un = properties.getProperty("username"); String pw = properties.getProperty("password"); resp.getWriter().print(un+":"+pw); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
依旧去web.xml做一个servlet映射
<servlet> <servlet-name>demo05</servlet-name> <servlet-class>com.mjj.servlet.ServletDemo05</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo05</servlet-name> <url-pattern>/demo05</url-pattern> </servlet-mapping>
启动测试
如果文章对你有帮助,一键三连支持一下哦~
这篇关于JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)