servlet(二)

一.获取servlet的配置对象ServletConfig
方式一
//声明一个成员变量 保存该对象
	private ServletConfig config;
	//初始化方法
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		this.config = config;
	}
private void fun1() {
		System.out.println(this.config);
		//通过servletconfig对象获取servlet的配置信息
		String value = this.config.getInitParameter("wanglong");
		System.out.println(value);
		//获取多个配置信息
		Enumeration<String> names = this.config.getInitParameterNames();
		while (names.hasMoreElements()) {
			System.out.println(names.nextElement());
		}
	}
方式二
//获取方式2(直接调用父类的方法)
		ServletConfig myconfig = this.getServletConfig();
		String value = myconfig.getInitParameter("dahai");
二.域对象
域表示一定范围内 有作用的对象
ServletContext(作用范围最大的域对象)
作用于整个工程(项目) 都能使用该对象
并且整个项目,只有一个该对象 是单例对象
作用:利用单例的特点 可以进行传值
该对象 内部维护一个map集合
注意:所有域对象 内部都是维护一个map集合

用途:
1.存值取值
2.获取全局配置信息     
3.可以获取服务器上所有的资源路径    
getRealPath()
4.请求转发

获取资源路径
//读取a文件
//参数的路径是相对于工程名来填的
String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/a.properties");
		System.out.println(realPath);
		FileInputStream fis = new FileInputStream(realPath);
		Properties properties = new Properties();
		properties.load(fis);
		System.out.println(properties.getProperty("key"));
请求转发
1.用户只发起了一次请求
2.用户请求时,并不知道内部做了什么操作
//通过context对象获取请求转发器
		//请求转发
		//注意:请求转发只能是站内(本工程)转发
		 //    转发的路径相对于工程
		//请求转发器
		System.out.println("借钱");
		RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/demo06");
		dispatcher.forward(request, response);
		System.out.println("钱借到了");

三.响应(response)
响应行 响应的状态码 200 http协议1.1
响应头     告诉浏览器我要做什么操作
告诉浏览器你需要使用什么编码格式来响应我的响应
响应体 响应浏览器的内容  

//接到请求后向浏览器写个字符串
//通过响应对象response 中流对象 回写
//注意:在当前servlet中使用了字符流,就不能使用字节流
PrintWriter writer = response.getWriter();
writer.write("彭于晏");
//tomcat默认的编码格式 iso-8859-1
//response.setCharacterEncoding("utf-8");
//设置响应头(告诉浏览器使用什么格式解析数据)
response.setHeader("Content-type", "text/html;charset=utf-8");
//二合一写法(之后再写servlet 第一句就写这个)
response.setContentType("text/html;charset=utf-8");
如何从服务器下载图片
//获取服务器的图片路径
//一般context域使用application当名字
//读文件
//通过response对象 获取字节流
//回写
String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/哈哈哈.png");
File file = new File(realPath);
String filename = file.getName();
//修改文件名的编码格式
filename = new String(filename.getBytes(), "iso-8859-1");
//设置响应头
response.setHeader("content-disposition ","attachment;filename="+filename );
response.setHeader("content-type", "image/png");
//读文件
FileInputStream fis = new FileInputStream(realPath);
int len = 0;
byte[] b = new byte[1024*1024];
while((len=fis.read(b))!=-1) {
//将图片写回服务器
ServletOutputStream sos = response.getOutputStream();
sos.write(b,0,len);
}
fis.close();
}
设置重定向响应头
//添加请求重定向 响应头
//添加状态码 302
//参数二是重定向的路径(站内站外的网址都可以)
//填站内的路径 需要带工程名
//注意:请求重定向是两次请求
//第二次请求是接到第一次请求的响应头之后发生的
//response.setHeader("location", "/sh-web-02/demo10");
response.setHeader("location", "http://www.baidu.com");
response.setStatus(302);
页面跳转
//3秒后 跳转一个页面
response.setHeader("refresh", "3;url=/sh-web-02/demo10");
页面刷新
response.setIntHeader("refresh", 1);
PrintWriter writer = response.getWriter();
writer.write(Math.random()+"");


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值