首页 > 编程语言 >java学习笔记—ServletConfig、ServletContext接口(13)

java学习笔记—ServletConfig、ServletContext接口(13)

时间:2022-11-30 12:39:30浏览次数:40  
标签:13 java config request public ServletContext servlet response

ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象。

该对象主要描述的时候一个servlet的配置信息。

如:

<servlet>         配置一个servlet
<servlet-name>helloservlet</servlet-name>  指定servlet的名字(任意)
 指定servlet具体的类的全限定名(包名.类名)
<servlet-class>cn.itcast.servlets.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>  映射一个servlet
<servlet-name>helloservlet</servlet-name>  需要映射的servlet名
<url-pattern>/helloservlet</url-pattern>  浏览器需要访问的路径
</servlet-mapping>

以上配置就是一个servlet的配置信息,如果开发者需要获取其中的数据,那么tomcat已经创建好的ServletConfig接口对象来方面开发者获取信息。

举例1:获取指定servlet的配置的名字。

public class Demo1 extends HttpServlet {
private ServletConfig config = null;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取servlet的配置名
String name = this.config.getServletName();
response.getOutputStream().write(name.getBytes());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
// 重写init方法
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
this.config = config;
}
}

举例2:获取servlet的配置参数。

在实际的编程过程中需要将所有可变的数据封装到配置文件中去,这样便于软件的后期的维护。Android。

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

servlet的配置名

        String name = this.config.getServletName();

        response.getOutputStream().write(name.getBytes());

        // 获取配置参数

        String ip = this.config.getInitParameter("ip");

        String dbtype = this.config.getInitParameter("dbtype");

        response.getOutputStream().write("<br/>".getBytes());

        response.getOutputStream().write((ip+" , "+dbtype).getBytes());

        // 使用循环获取所有的配置参数

        Enumeration<String> names = this.config.getInitParameterNames();

        while(names.hasMoreElements()){

        String ini_name = names.nextElement();

        String ini_value = this.config.getInitParameter(ini_name);

        response.getOutputStream().write((ini_name+"="+ini_value+"<br/>").getBytes());

        }

    }

总结:发现tomcat创建并传递过来的servletconfig对象接收比较繁琐。

// 获取servletconfig对象
ServletConfig config = this.getServletConfig();
System.out.println(this.config == config);

为了方便开发者获取servletconfig对象,那么HttpServlet直接提供了getServletConfig(),

两种方式获取的对象是同一个对象。

ServletContext接口

ServletContext接口对象主要实现的是servlet之间的通信。该对象可以和web服务器进行通信。转发请求。

ServletContext接口是对网站的抽象描述。一个ServletContext代表一个web应用(网站)。

该对象是由Tomcat创建出来连同ServletConfig对象一并通过初始化方法传递过来的。

1实现servlet的通信

1. 放数据

// 获取ServletContext对象
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
ServletContext context1 = this.getServletConfig().getServletContext();
ServletContext context2 = this.getServletContext();
System.out.println(context1 == context2); // true
// 主要作用之一是实现servler之间的数据通信
context1.setAttribute("news_title", "北京的灰霾天气");
}

2. 取数据

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String name = (String) this.getServletContext().getAttribute("news_title");
response.getOutputStream().write(name.getBytes());
}

2 实现服务器通信

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 和tomcat进行通信获取MIME类型
ServletContext context = this.getServletContext();
String type = context.getMimeType("/jnb.doc");
System.out.println(type);
}

1  获取网站资源(重点)

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 获取网站对象
ServletContext context = this.getServletContext();
// 获取网站中的静态资源
InputStream in = context.getResourceAsStream("/123.bmp");
// 获取输出流
FileOutputStream out = new FileOutputStream(new File("d:/123.bmp"));
// 边读 边写
byte[] bs = new byte[1024];
int len = 0;
while((len = in.read(bs)) != -1){
out.write(bs, 0, len);
out.flush();
}
// 释放资源
in.close();
out.close();
}

3请求转发

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 获取网站对象
ServletContext context = this.getServletContext();
// 转发
System.out.println("不好意思没钱!,找老汤去....");
context.getRequestDispatcher("/lt").forward(request, response);
}

请求转发:请求转发是服务器自己做的事情,那么在客户端是展现不出来的,因此浏览器的地址栏是不发生变化的。

源码面前,了无秘密



标签:13,java,config,request,public,ServletContext,servlet,response
From: https://blog.51cto.com/zhenghongxin/5898223

相关文章

  • java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)
    实现不同的用户登录以后可以看到不同的菜单。(后台可以实现对用户菜单的管理。)第一步:分析数据结构    1:用户表表名:users列名类型说明idVarchar(32)主键nameVarchar(......
  • 7种最佳JavaScript日期库
    英文|https://blog.logrocket.com/javascript-date-libraries/从理论上讲,向您的应用程序添加工作日期似乎总是一件容易的事,除非您尝试这样做。总是会遇到麻烦,无论是在尝试......
  • 【文章精选集锦】Java 内存模型与 volatile :happens-before,重排序,内存屏障
    【文章精选集锦】Java内存模型与volatile:happens-before,重排序,内存屏障Kotlin开发者社区 3天前很多时候,千言万语不如一张图:  停停停,发错了,看下面的JVM内存模型图: ......
  • Java并发编程实战: AQS 源码 史上最详尽图解+逐行注释
    Java并发编程实战:AQS源码史上最详尽图解+逐行注释引言:学习一个java并发编程工具的时候,我们首先要抓住这三点:状态一般是一个state属性,它基本是整个工具的核心,通常整个......
  • JAVA变量
    http://developer.51cto.com/art/200907/137104.htm关于JDK+Tomcat+eclipse+MyEclipse的配置方法2009-07-1616:47cinderellacinderella.javaeye.com我要评论(0)字号......
  • Java JIT小记
    来自这篇文章的小总结。  Java程序的大致执行流程: 两类即时编译器,对比:ClientCompiler:启动快、运行慢(因为只注重简单的局部编译优化),例如HotSpot虚拟机的C1Compi......
  • java学习笔记DOM4J解析(7)
    DOM4J即DocumentObjectModelforJava使用java技术以文档方式解析XML数据的模型。DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需......
  • Java学习笔记XML(3)
    XML简介XML即可扩展的标记语言。因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定。目前为止所有的标记的语言都属于开源的语言。由W3C组织进行一个基本......
  • Java中将double转换为int
    可以通过三种方式将double转换为int1、将double转换为int—使用类型转换2、将double转换为int—使用Math.round()3、将double转换为int—使用Double.IntValue()1.......
  • 你必须要知道的JavaScript数据结构与面试题解答
    英文原文|https://dev.to/educative/7-javascript-data-structures-you-must-know-4k0m原文作者|RyanThelin和AmandaFawcett译文翻译|web前端开发(web_qdkf)解决编码......