黑马程序员技术交流社区
标题:
ServletContext,response,request
[打印本页]
作者:
LLLXXX
时间:
2018-4-6 23:34
标题:
ServletContext,response,request
ServletContext:
创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象.
销毁:服务器关闭的时候,或者项目从服务器中移除的时候.
如何获得:this.getServeltContext()
功能一:作为域对象存取数据:
范围:整个web应用的范围
创建:服务器启动的时候,服务器为每个web项目创建一个单独的ServletContext对象.
销毁:服务器关闭的时候销毁ServletContext.
存取数据的方法:
setAttribute(String name,Object value);用来向ServletContext中存入数据.
Object getAttribute(String name); 用来向ServletContext中存入数据.
注意:取出的数据是Object类型,所以要得到想要的类型,需要强制转换
功能二:读取web项目下的文件:
InputStream getResourceAsStream(String path);根据提供路径读取文件返回一个文件的输入流.
InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");
String getRealPath(String path);返回一个路径的磁盘绝对路径.
String realPath = context.getRealPath("/WEB-INF/classes/db.properties");
类加载器读取文件:
获得类加载器:类名.class.getClassLoader()
读取文件的方法:
InputStream 类名.class.getClassLoader().getResourceAsStream(String path);
InputStream is=a.class.getClassLoader().getResourceAsStream("db.properties");
功能三:读取全局初始化参数:
String password = this.getServletContext().getInitParameter("password");
Enumeration<String> e = this.getServletContext().getInitParameterNames();
while(e.hasMoreElements()){
String name = e.nextElement();
String value = this.getServletContext().getInitParameter(name);
System.out.println(name+" "+value);
}
功能四:获得文件的MIME的类型(用于文件下载)
String getMimeType(String file)
response:
文件下载:response.getOutputStream()
response.setContentType("text/html;charset=utf-8")
response.getWriter().print() -----以后不怎么常用
1.response.setStatus()//设置状态码
2.response.setHeader()//设置响应头
3.response.getOutputStream();//获取字节流 主要使用于下载文件获得response的输出流 OutputStream os = response.getOutputStream();
4.resposne.getWriter();//获取字符流
这两个方法是互斥的.做出响应的时候只能使用其中的一种流响应.
输出中文乱码的处理:
* 字节流:
* 设置浏览器默认打开的编码:
* resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
* 设置中文字节取出的时候编码.
* “中文”.getBytes(“UTF-8”);
* 字符流:
* 设置浏览器打开的时候的编码
* resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
* 设置response的缓冲区的编码
* response.setCharacterEncoding(“UTF-8”);
***** 简化的写法:response.setContentType(“text/html;charset=UTF-8”);
request:
作用范围:
作用范围就是一次请求的范围.
创建和销毁:
创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
销毁:当服务器对这次请求作出了响应之后.
功能一:获得客户端的信息:
获得请求方式:String getMethod();
获得ip地址: String getRemoteAddr();
获得工程名 : String getContextPath();
功能二:接受参数:
String getParameter(String name) 用于接收一个名称对应一个值的数据,得到字符串类型的数据
String [] getParameterValues(String name)用于接收一个名称对应多个值的数据.得到一个字符串数组
Map<String,String[]> getParameterMap();用于接收表单中的所有的数据,Map的key是表单提交的参数名,得到一个map<String,String []>类型的map,称,Map的value是提交参数的值.
请求的乱码问题:
get:
String aa = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8")
post:
POST的参数在请求体中,直接到达后台的Servlet.数据封装到Servlet中的request中.request也有一个缓冲区.request的缓冲区也是ISO-8859-1编码.
设置request的缓冲区的编码:
request.setCharacterEncoding("UTF-8") 一定要在接收第一个参数之前设置编码就OK.
功能三:作为域对象存取数据:
范围:一次请求响应的范围
存取数据的方法:
setAttribute(String name,Object value);
Object getAttribute(String name);
1.String method=request.getMethod()//获取请求方式get,post....
2.String requestURI = request.getRequestURI();//得到的不包含域名和项目名
3.String requestUIL= request.getRequestURL()://得到的是完整的连接http:/…….
3.String remoteAddr= request.getRemoteAddr()//获取客户机地址
4.String contextPath = request.getContextPath();//获取项目名
5.getAttribute();//存数据
6.setAttribute();//取数据
7.removeAttribute();
转发和重定向的区别:
转发:request.getRequestDispatcher("不带工程名的地址").forward(request,response);
重定向:response.sendRedirect("带工程名的地址") 这个地方注意:工程名应该动态的获取
区别:
地址栏:重定向变化转发不变
请求响应的次数:重定向是两次请求两次响应,转发是一次请求和一次响应 (如果放入request域中的数据转发能够取出,重定向取不出)
所以转发使用request域
路径的写法:重定向带工程名 转发不带
跳转发范围:重定向可以跳转任意地址,转发只能在同一工程下跳转
作者:
tom19970323
时间:
2018-4-7 12:11
作者:
小皖妹妹
时间:
2018-5-27 20:38
你自己记住了吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2