ServletContext和JSP 读文件问题
路径问题:
根据JVM运行路径为当前路径(启动tomcat路径)
ServletContext
InputStream getResourceAsStream(String path) 根据传入的路径返回一个输入流
路径在项目发布到tomcat后的根路径,必须斜杠开头 (表示根路径)
String getRealPath(String path) 获取磁盘开头绝对路径
String getMimeType(String name) 获得文件MIME类型
String getInitParameter(String name) 获取初始化参数
Enumeration getInitParameterNames() 获取所有Init参数
类加载器读WEB工程中文件
在获取不到ServletContext对象时使用
获取一个类加载器:InputStream 对象.class.getClassLoader().getResourceAsStream();
类加载器内部会判断,如果是WEB项目,默认会去WEB-INF下找文件,传统项目是项目根路径
文件下载方式
一种:超链接下载, 直接把文件类型放到链接中,--浏览器必须不支持这个文件才会自动下载
二种:手动编写代码完成下载
设置两个头和一个流:
Content-type 文件MIME类型
先通过.getMimeType()获取文件类型
Content-Disposition 以下载形式打开文件 attachment;filename=文件名
InputStream 文件输入流
文件名乱码问题
根据浏览器解决:
判断浏览器:
获取浏览器头文件s
火狐浏览器:
下载时需要把文件名转换成Base64
其他浏览器:
String URLEncoder.encode(文件名);
Servelt响应到浏览器乱码问题:
字节
在把字符串转成字节时设置编码,设置编码和浏览器打开时声明编码一致
字符
输出字符前必须设置字符编码
设置字符编码:setHeader("Content-Type","text/html;charset=UTF-8");
设置response缓冲区编码/POST解决乱码
response.setCharacterEncoding("UTF-8");
setContentType("text/html;charset=UTF-8");
ServletRequest
功能一
String getMethod() 获取请求方式
StringBuffer getRequestURL() 获取请求路径(http://开始)
String getRequestURI() 获取当前路径从工程路径开始
String getRemoteAddr() 获取IP地址
String getContextPath() 获取工程名
功能二
String getParameter(String) 获取请求过来的参数
-- getAttribute和setAttribute只用WEB内部服务器请求时
void setAttribute(String)
String getAttribute(String)
void removeAttribute(String)
作为域对象
范围:一次请求的范围
创建和销毁:客户端向服务器发送请求后,
创建一个Request对象
服务器做出响应后销毁
重定向和转发区别
重定向
重定向后浏览器地址会改变成重定向后的地址
客户端 请求地址到 服务器
服务器 返回重定向 客户端
客户端 在请求重定向 服务器
重定向可以到任意网站
需要写工程名
转发
getRequestDispatcher(String path).foward();
转发后地址栏还是不会改变
转发只能到当前工程页面
转发路径不用带工程名
字符流
字节流和字符流互斥,只能用其中一种
from提交表单中有中文时乱码
Post解决方案:
把参数放在请求体中了
HttpServelt下的setCharacterEncoding(String);
Get解决方案:
中文到地址栏浏览器会自动把中文解码,服务器收到中文解码数据后在进行ISO8859-1编码,所以需要先进行ISO8859-1解码,在URLDncoder编码
会话技术
Cookie
存储在客户端中
客户端请求服务器时,把Cookie数据保存在请求中,服务器响应时把Cookie返回给浏览器
Cookie操作
以键值对形式存储
创建Cookie
Cookie cookie = new Cookie(String key,String value)
String getName() 获取Cookie名字
String getValue() 获取Cookie值
String setDomain(String) 设置有效域名
String setPath(String) 设置Cookie有效路径
void setMaxAge(int maxAge) Cookie有效时间(秒)
指定时间内不操作才会销毁
会话级别Cookie:默认关闭浏览器Cookie自动销毁
持久级别Cookie:设置Cookie有效时间。手动销毁持久级别Cookie
Cookie存储中文问题
通过URLEncoder编码和URLDncoder解码实现存储中文问题
HttpServletResponse
响应给浏览器Cookie
void addCookie(Cookie cookie)
HttpServeltRequest
获取所有浏览器端Cookie
Cookie[] getCookies()
Session
范围:从创建到浏览器关闭
客户端和服务器交换Session数据时,都会通过Cookie提供给一个SessionID(类似钥匙),保证一个客户端一个Session
JSP
动态网页开发技术
JSP = HTML+JAVA+JSP内置
打开JSP网页时,会翻译成一个.java文件
JSP嵌入JAVA代码
一种:
<!% JAVA代码; %> :翻译成类中成员部分,定义变量,定义方法,定义类
<% JAVA代码; %> :Java代码,翻译到Servlet方法内部中内部
<%= 表达式 %>(out.print()) :JSP内部表达式
${ 变量 }
pageContext.request.contextPath 获取当前工程名
|
|