本帖最后由 ...句号 于 2018-2-4 17:21 编辑
Tomcat笔记 WEB中路径的编写:
1.浏览器端如果想直接访问Servlet的话
路径的编写:使用: /工程名/servlet的虚拟路径
2.浏览器如果想要直接访问.html.jsp或者其他静态资源
路径的编写:使用: /工程名/资源所在的路径
3.servlet A想要跳转其他servlet B
1.重定向
路径的编写:使用: /工程名/B对应的虚拟路径
2.请求转发
路径的编写:使用: /B对应的虚拟路径
4.servlet A想要跳转到 .html或者.jsp
1.重定向
路径的编写:使用: /工程名/.jsp或者.html所在的子路径
2.请求转发
路径的编写:使用: /.jsp或者.html所在的子路径
5.servlet想要读取项目下文件
1.需要用ServletContext的对象来读取
1.ServletContext.getResouceAsStream("资源路径(不用再加工程名)")
2.ServletContext.getRealPath("资源路径(不用再加工程名)")
服务器向浏览器输出中文的时候乱码解决???
设置响应头
响应头的编码是固定的ISO-8859-1,所有我们需要给浏览器能看懂的东西
if(header.contains("Firefox")){
filename = base64EncodeFileName(filename);
}else{
filename = URLEncoder.encode(filename, "UTF-8");
}
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
设置响应体
getOutputStream
* 字节流:
* 设置浏览器默认打开的编码:
* resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
* 设置中文字节取出的时候编码.
* “中文”.getBytes(“UTF-8”);
getWriter
* 字符流:
* 设置浏览器打开的时候的编码
* resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
* 设置response的缓冲区的编码
* response.setCharacterEncoding(“UTF-8”);
(重点记)setContextType("text/html;charset=UTF-8")---> setHeader("Context-Type","text/html;
重定向和转发的区别:(redirect和forward的区别)
重定向举例:response.sendRedirect(request.getContextPath()+"/demo1-download/login.htm");
转发举例:request.getRequestDispatcher("/DispatherServlet1").forward(request, response);
* 1.重定向的地址栏会发生变化,转发的地址栏不变.
* 2.重定向两次请求两次响应,转发一次请求一次响应.
* 3.重定向路径需要加工程名,转发的路径不需要加工程名.
* 4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
案例:登陆成功后,完成文件的下载
Response的概述
Response:代表响应的对象,从服务器向浏览器输出内容
常用的方法
响应行:
设置状态码:
void setStatus(int sc)
响应头:
response.setContentType("text/html;charset=UTF-8");解决页面输出中文的乱码问题
addHeader(String name,String value); --- 针对一个key对应多个value的响应头.
addDateHeader(String name,long date);
addIntHeader(String name,int value);
* setHeader(String name,String value); --- 针对一个key对应一个value的响应头.
例如://跳转到主页
response.setHeader("Refresh", "3;url=/day12/WEB01/index.html")
* setDateHeader(String name,long date);
* setIntHeader(String name,int value);
例如:头信息: xxx:aaa
* addHeader(“xxx”,”bbb”); -->xxx:aaa,bbb
* setHeader(“xxx”,”bbb”); -->xxx:bbb
响应体:
ServletOutputStream getOutputStream() 字节流
PrintWriter getWriter() 字符流
文件下载的方式
第一种方式: 超链接下载,直接将文件的路径写到超链接的href中,---前提:文件类型,浏览器不支持
第二种方式: 手动编写代码的方式完成文件下载
需要设置两个头和一个流
Content-Type:文件的 MIME的类型
Content-Disposition:以下载的形式打开文件
InputStream :文件的输入流
(请求头里的)User-Agent :代表浏览器的类型. --- 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.
Request的概述
Request代表用户的请求.
Request的API(方法)
功能一:获得客户机相关的信息
获得请求方式:
String getMethod()
获得请求的路径:
String getRequestURI()
StringBuffer getRequestURL()
代码:
String url = request.getRequestURL().toString();获得请求的URL:http://localhost:8080/day13/RequestServlet
String uri = request.getRequestURI();获得请求的URI:/day13/RequestServlet
获得客户机IP地址:
String getRemoteAddr()
获得工程名:
String getContextPath()
功能二:获得从页面中提交的参数:
String getParameter(String name): 用于接收一个名称对应一个值的数据
String[] getParameterValues(String name) :用于接收一个名称对应多个值得数据
Map getParameterMap(): 用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值
功能三:作为域对象存取数据:
void removeAttribute(String name)
void setAttribute(String name,Object 0) 存数据
Object getAttribute(String name) 获取数据
Request作为域对象存取数据:
使用request对象存取数据:
* setAttribute(String name,String value);
* Object getAttribute(String name);
request的作用范围:
* 作用范围就是一次请求的范围.
* 创建和销毁:
* 创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
* 销毁:当服务器对这次请求作出了响应之后.
ServletContext的作用:
1.用来获取全局初始化参数
方法:
String getInitParameter(String name)
例如: <context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
String username = this.getServletContext().getInitParameter("username");获取结果是root
Enumeration getInitParameterNames()
例如: <context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
String username = this.getServletContext().getInitParameter("username");获取结果是 username root
2.用来获得文件的MIME的类型
方法:
String getMimeType(String file) 获得文件的MIME的类型(编写下载文件代码时使用)
3.作为域对象存取数据
ServletContext是一个域对象
作用范围:整个web工程
创建:服务器启动的时候,Tomcat服务器为每个web项目创建一个单独ServletContext对象
销毁:服务器关闭的时候,或者项目从服务器中移除的时候
4.用来读取web项目下的文件.
使用ServletContext对象读取WEB项目下的文件
InputStream getResourceAsStream(String path); --- 根据提供路径读取文件返回一个文件的输入流.
String getRealPath(String path); --- 返回一个路径的磁盘绝对路径.
|
|