Servletconfig和ServletContext(附mac下eclipse添加Servlet模版)(2017.9.28第一次修改版)

Servlet中url-pattern配置

绝对匹配/aaa 举例: /Test

目录匹配 /aaa/bbb/*.   /Test/aaa/a

有后缀的路径  .jsp   .do      .action     注意前面不能有/        /Test/aaa/a.do

优先级:绝对匹配>目录匹配>有后缀的路径

 

 

Servletconfig对象

在这个servlet初始化的时候Tomcat容器将这个对象作为参数传递给了init方法

 对这个servlet的描述的一些数据或是它初始化时候携带的数据

<init-param>
      <param-name>a</param-name>
      <param-value>a1</param-value>
    </init-param>
    <init-param>
      <param-name>b</param-name>
      <param-value>b1</param-value>
    </init-param>

获取初始化参数。 使用servletconfig对象的两个方法

String a = config.getInitParameter("a");
		System.out.println(a);
//		获取所有的初始化参数的name
		Enumeration<String> names = config.getInitParameterNames();
		while(names.hasMoreElements()){
			String name = names.nextElement();
			System.out.println(name);

ServletConfig对象常用方法

getInitParamterNames()

getInitParamter()

 

 

ServletContext对象(了解)

一个web项目里面有且只有一个ServeltContext对象

创建的时候

在这个web应用发布到Tomcat容器中,Tomcat就会为这个应用创建一个ServletContext对象

 


配置中写在哪里?

web.xml中,servlet标签前面

<context-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
  </context-param>

 

怎么获取这个对象?

 

	ServletContext context = this.getServletConfig().getServletContext();
		ServletContext context2 = this.getServletContext();

第一种麻烦,多数用第二种

 

 

 

作用

1.获取全局的初始化参数(重要)见上

2.作为全局的唯一的一个对象,作为此应用程序的一个数据容器,实现整个应用程序的数据共享(重要)

本次项目中,通过ContextObject3写入,ContextObject3和ContextObject2都可以读取。

Object3源码

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		获取对象
		ServletContext context = this.getServletContext();
//		向域对象中放置数据
		context.setAttribute("name","张三");
//		从域中取数据
		 Object object = context.getAttribute("name");
		System.out.println(object);
	}

Object2源码

protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ServletContext context2 = this.getServletContext();
		// String string = context2.getInitParameter("encoding");
		// System.out.println(string);
		// 从域中取数据
		String name = (String) context2.getAttribute("name");
		System.out.println(name);
	}

此时,3写入之后2才可以读,不写入读到的就是null,通过servletContext对象实现了数据的共享。

3.获取项目名(了解)写在Service中

//		获取对象
		ServletContext context = this.getServletContext();
//		获取项目名
		String string = context.getContextPath();

/WEB09

4.获取文件真实路径 读取流 拿到内容(重要) 

// 获取文件的真实路径 content
		// String Path = context.getRealPath("/WEB-INF/classes/db.properties");
		// 获取文件的读取流 666
		// String Path = context.getRealPath("/WEB-INF/db.properties");
		// 获取文件的内容 123
		String Path = context.getRealPath("/db.properties");

db.properties位置在src下,文件位置在/WEB-INF/classes/db.properties

在WEB-INF下,文件位置在/WEB-INF/db.properties

在WebContent下,文件位置在/db.properties

5.读取web流

InputStream in =context.getResourceAsStream("/db.properties")

6.实现转发(了解)

特点:

1.地址不会改变

2.是服务器的内部行为,客户端并不知道

WEB-INF里面的资源不允许外部访问,此时可以利用功能

	    // 获取对象
		ServletContext context = this.getServletContext();
		// 获取转发器
		RequestDispatcher dispatcher = context.getRequestDispatcher("/WEB-INF/1.html");
		// 转发
		dispatcher.forward(request, response);

实现了1.html,地址栏仍然是转发页面本身的地址

 

ServletContext常用方法

对域中的数据进行操作

getAttributeNames()

getAttribute()           取出数据

setAttribute()            放入数据

removeAttribute()    从域中移除数据

 

获取全局的初始化参数

getInitParameter()

getInitParameterNames()

 

获取文件的类型

getMiMeType()

 

获取

getRealPath()真实地址

getResourceAsStream()读取web流

getRequestDispatcher()获取转发器,调用forward实现转发

 

 

 

注:关于重置新建Servlet的内容(mac+eclipse环境下)

搜索templates,找到java目录下对应的模版

add一个Servlet,Pattern中填入对应代码,可自定义。

 

package ${enclosing_package};

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ${primary_type_name} extends HttpServlet {
    private static final long serialVersionUID = 1L;

   

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
    }

}


保存即可

 

新建Servlet后全选删除。输入Servlet,补全代码就出现模板了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值