@martin0207
2017-11-24T15:23:24.000000Z
字数 2916
阅读 885
JavaWeb
使用.Properties文件时,需要获取真实路径
在Servlet中,可以直接获取ServletContext,然后获取RealPath,拼接文件名以及后缀
在其他Service文件中,没有父类方法可以直接获取ServletContext,需要用类加载器去获取路径:
Srvice.class.getClassLoader.getResource("config.preproties").getPath()
../
代表上一级
类加载器是加载class目录的内容,如果文件所在地不是,需要进行文件路径调整。
通用的
输出具有字符流和字节流两种。
使用中文时,会存在编码格式问题
如果编码格式不同,则可以通过请求头
Content-Type
,text/html;charset=utf-8
设置编码格式来解决乱码问题
如果要使用字符流输出:response.getWriter().write("这是中文")
,需要通知服务器的编码格式:response.setCharacterEncoding("gbk")
当然,使用response.setHeader("Content-Type","text/html;charset=gbk")
也可以通知客户端的编码格式,服务器在执行该语句的时候,也会自动设置服务器的编码格式为gbk
下载功能
使用请求头的
Content-Disposition
和值attachment;filename=1.jpg
来实现文件下载
response.setHeader("Content-Disposition","attachment;filename=1.jpg")
请求头中的内容,都不可以包含中文。
如果文件名必须使用中文,则需要使用百分号编码格式(浏览器只认utf-8
):中文.jpg
转化成URLEncoder.encode("中文.jpg","utf-8")
编码以及解码 → 使用URLEncoder编码
、URLDecoder解码
刷新功能
也是使用请求头来实现
Refresh
response.setHeader("Refresh","1;url")
,1代表的刷新秒数,url是跳转地址,可以不传,则刷新自己。
在使用HTML做页面的时候,可以使用<meta>
:<meta http-equiv="refresh" content="1;url">
缓存机制
不缓存
response.setIntHeader("Expires", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma","no-cache");缓存
response.setDateHeader("Expires", System.currentTimeMillis() + 1000l * 3600 * 24 * 30);
重定向
利用Header来实现————请求重定向
response.setStatus(302);
response.setHeader("Location", "/Day03/index.jsp");API方法————请求转发
response.sendRedirect("/Day03/index.jsp");
推荐使用请求转发,只请求一次服务器,请求重定向需要请求两次服务器
输出验证码图片
使用
BufferedImage
类来画图
贼麻烦,先不整理了
零碎知识
getOutputStream 和 getWriter 只能调用一个。
因为这两个方法都是面向缓存区,缓存区只能缓存一种数据,不能同时缓存字节流和字符流。
请求转发:
getServletContext().getRequestDispatcher("/Demo2").forward(request, response)
.JSP 文件
这个文件很像.html文件,但实际上,是个Servlet,可以使用
<%=Java代码 %>
来编写Java代码以及逻辑路径分析
绝对路径:以/
开头的路径,绝对路径在相对于的路径上直接拼接得到最终的路径
相对路径:不以/
开头的路径,基于当前所在的路径计算得到新的路径
硬盘路径:以盘符开头的路径,是哪个路径就是那个路径写虚拟路径时,都使用绝对路径
写真实路径时,都使用相对路径
获取客户端信息——通过Request
//全部URL
String url = request.getRequestURL().toString();
//资源部分
String uri = request.getRequestURI();
//请求参数
String qStr = request.getQueryString();
//请求ID
String ip = request.getRemoteAddr();
//请求方式
String type = request.getMethod();
//Web应用名称
String name = request.getContextPath();
获取请求头信息
request.getHeader("name");
request.getHeaders("name");
request.getHeaderName();
request.getIntHeader("name");
request.getDateHeader("name");
获取请求参数
//全部URL
String url = request.getRequestURL().toString();
//资源部分
String uri = request.getRequestURI();
//请求参数
String qStr = request.getQueryString();
//请求ID
String ip = request.getRemoteAddr();
//请求方式
String type = request.getMethod();
//Web应用名称
String name = request.getContextPath();
设置服务器解码格式
通知服务器 实体内容的编码格式(只对POST提交有用)
request.setcharacterEncoding("utf-8");
对于get提交,只能手动解决乱码问题
name=new String(name.getBytes("iso8859-1"),"utf-8"
利用请求域传递对象
Attribute
作用范围:整个请求链上
生命周期:当服务器接收到请求,则创建该请求的Request,当请求结束,则销毁Request
作用:在整个请求链中共享数据,通常我们在Servlet中处理好的数据,会存到Request域中,请求转发到.JSP页面来进行展示
实现 请求转发/请求包含
请求转发
request.getRequestDispatcher("url").forword(request,response);
请求包含
request.getRequestDispatcher("url").incloud(request,response);