ServletConfig(Servlet配置信息)
- 配置信息需要在web.xml进行配置
- 是以键值对形式进行配置 key=value
- 在Servlet初始化时配置
注意:
- 1.每个Servlet都有一个属于自己的ServletConfig对象
- 2.ServletConfig对象内部维护一个map集合
public class Demo02 extends HttpServlet {
//获取方式1
//声明成员变量来保存ServletConfig
private ServletConfig config;
//初始化Servlet配置信息
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
//接收参数中的配置对象
this.config = config;
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//fun1();
//通过父类中的方法 直接获取ServletConfig对象
ServletConfig servletConfig = this.getServletConfig();
String value = servletConfig.getInitParameter("wanglong");
System.out.println(value);
}
private void fun1() {
// 获取servletconfig对象中的初始值
String value = this.config.getInitParameter("wanglong");
System.out.println(value);
Enumeration<String> keys = this.config.getInitParameterNames();
while(keys.hasMoreElements()){
String key = keys.nextElement();
System.out.println(key + " = " + this.config.getInitParameter(key));
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}}
注意:
在web.xml文件中配置路径方式
1.使用绝对路径 /demo01 (常用)
2.使用匹配后缀 .后缀名 .action
3.直接使用 / 匹配 只要是工程下 都能访问到
4.注意:2/3 不要放在一起使用 /.action
5.直接使用 / 匹配
注意:/匹配 一般不使用 系统默认使用的是/匹配
域对象
- 在一定范围内有效的对象
- ServletContext(application域)
- 作用范围(最大范围的域对象):
- 当期工程都有效 并且整个工程有且只有一个ServletContext对象
- 相当于一个单例对象
注意: 所有的域对象都有共同的特点 内部维护了一个map集合
所有域对象共有的方法:
- 1.setAttribute
- 2.getAttribute
- 3.removeAttribute
域对象的作用
- 1.存值取值
- 2.进行单例传值
- 3.可以获取全局配置信息 web.xml
- 4.可以获取项目中所有资源在服务器上的绝对路径 getRealPath
- 5.可以进行请求转发
//获取Context域方式1
//可以通过ServletConfig对象获取
ServletContext application = this.getServletConfig().getServletContext();
//存值
application.setAttribute(“name”, “wanglong”);
System.out.println(“存值”);
//取出全局配置信息
String value = application.getInitParameter(“dajun”);
System.out.println(value);
//获取Context域方式2
ServletContext application = this.getServletContext();
//获取服务器上的真实路径
//参数:使用服务器上相对于项目的相对路径
// / 表示服务器上项目名后面的斜杆
String path1 = application.getRealPath("/WEB-INF/classes/a.properties");
System.out.println(path1);
//读取文件 打印value
FileInputStream fis = new FileInputStream(path1);
Properties properties = new Properties();
properties.load(fis);
System.out.println(properties.getProperty("key"));
fis.close();
利用Context域 进行请求转发 demo06转发给demo07
ServletContext application = this.getServletContext();
//获取请求转发器
//参数:转发的路径
//注意:请求转发 只能转发站内的路径
// 并且传入的地址 相对于工程
//请求转发注意:
// 1.请求转发用户只发送了一次请求
// 2.网址没有发生变化(用户并不知道内部你怎么操作的)
// 3.只能转发站内
RequestDispatcher dispatcher = application.getRequestDispatcher("/demo07");
//发送转发请求
dispatcher.forward(request, response);
响应(response 响应回浏览器(用户))
响应行
-
响应状态码 200(成功) 302(重定向) http协议1.1
响应头
-
转给浏览器 下一步操作
响应体
-
响应的内容
//TomCat默认的编码格式 iso-8859-1
response.setCharacterEncoding("UTF-8");
//设置响应头 告诉浏览器 以什么编码格式来解析响应
response.setHeader("Content-type", "text/html;charset=UTF-8");
//相当于上面两句二合一
response.setContentType("text/html;charset=UTF-8");
//利用response获取 字符流 和 字节流
PrintWriter writer = response.getWriter();
writer.write("张三");
下载图片
//设置响应头 来告诉浏览器 资源用于下载
// content-disposition attachment;filename=
//response.setContentType("png/html");
//获取图片在服务器上的真实路径
ServletContext application = this.getServletContext();
String path = application.getRealPath("/WEB-INF/classes/哈哈.png");
File file = new File(path);
String fileName = file.getName();
//设置图片名的编码格式 iso-8859-1
fileName = new String(fileName.getBytes(), "iso-8859-1");
response.setHeader("content-disposition", "attachment;filename=" + fileName);
//设置下载内容的格式(去web.xml中查找资源后缀的格式)
response.setHeader("content-type", "image/png");
//读取字节流图片
FileInputStream fis = new FileInputStream(path);
//使用响应中的字节流 将图片写回浏览器
ServletOutputStream sos = response.getOutputStream();
//PrintWriter writer = response.getWriter();
byte[] b = new byte[1024];
int len = 0;
while ((len = fis.read(b)) != -1) {
sos.write(b, 0, len);
}
fis.close();
通过响应response 请求重定向
//可以进行站内重定向 相对于8080后的斜杠(需要带上工程名)
//response.setHeader("location", "/sh-web-02/demo11");
//可以进行站外重定向
response.setHeader("location", "http://www.baidu.com");
//添加重定向的状态码
response.setStatus(302);
//注意:
//1.重定向 发送两次请求(网址变了)
//2.重定向 会执行完第一次请求的方法 在进行第二次请求
3秒后 刷新页面(刷新头)
response.setHeader("refresh", "3;url=http://www.baidu.com");
//每个一秒 刷新界面
response.setIntHeader("refresh", 1);
//回写数据测试
PrintWriter writer = response.getWriter();
writer.write(Math.random() + "");
request(请求)
//获取请求的方式(get/post)
String method = request.getMethod();
System.out.println(method);
//获取用户请求的URL(统一资源定位符)
StringBuffer url = request.getRequestURL();
System.out.println(url);
//获取用户请求的URI(统一资源标识符)
String uri = request.getRequestURI();
System.out.println(uri);
//获取相对路径 /sh-web-02(工程名)
String path = request.getContextPath();
System.out.println(path);
获取用户请求的参数
//参数: 传入相当于key
//http://localhost:8080/sh-web-02/demo12?username=wanglong
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username);
System.out.println(password);