一.获取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()+"");