标签: javawebhtml
[TOC]java
API:git
程序以什么码表输出,就必定要控制浏览器以什么码表打开。可有以下两种写法:github
response.setHeader("Content-type","text/html;charset=UTF-8")
response.setContentType("text/html;charset=UTF-8")
(默认调用setHeader
和setCharacterEncoding
)把分号;
错写成逗号,
,浏览器会提示下载web
用html技术的<meta>
标签能够模拟一个http响应头, <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
apache
response可用setCharacterEncoding
方法设置码表。字符流输出:PrintWritet->response->浏览器
,response->浏览器
默认使用iso-8859
编码设计模式
使用ServerContext
的getRealPath
方法,再InputStream
和OutputStream
api
若是下载文件是中文名为中文,则文件名须要通过url编码URLEncoder.encode
浏览器
使用BufferedImage
在内存生成图片,再使用ImageIO
输出。缓存
画图使用Graphics
,旋转使用Graphics2D
汉字的区间:\u4e00
-\u9fa5
refresh
头,而是在jsp加入<meta>
头模拟。expires
头,当前时间+要缓存的时长重定向:设置状态码和location
头便可,或者直接使用response
的sendRedirect
方法。向服务器两次请求。浏览器会改变地址栏,通常适用于登陆、购物等场景。
转发:则是调用ServletContex
对象的getRequestDispatcher
方法,再调用forward
方法。向服务器一次请求,浏览器地址栏不变。
一些细节:
getOutputStream
和getWriter
方法跟别用于输出二进制数据、输出文本数据的ServletOutputStream
、Printwriter
对象,这两个方法相互排斥,只能调用其中一个,不然抛IllegalStateException
异常。Servlet
的service
方法结束后,Servlet引擎会检查并调用close
方法关闭该输出流对象。一些方法
getRequestURI
用于权限拦截,访问统计getRemoteAddr
用于获得客户机IP地址getMethod
获得客户机请求方式requst对象获取数据的四种方式
getParameter
getParameterNames
getParameterValues
getParameterMap
(可结合JavaBean使用)(getInputStream
用于文件上传)
url后面若是有中文数据,须要编码后再提交
表单提交的数据使用的码表和该页面的码表一致,而getParameter
方法默认使用ISO-8859
码表。
解决:
request
对象的setCharacterEncoding
设置码表。getBytes("ISO-8859-1")
获取二进制字节,再用特定码表构建字符串。也能够经过改服务器配置来解决乱码问题,但通常不建议使用。
URIEncoding
:改tomcat的配置文件conf/server.xml
的链接器<Connector>
中的URIEncoding
属性useBodyEncodingForURI
:将conf/server.xml
的链接器<Connector>
中的useBodyEncodingForURI
置为true
应用场景:MVC设计模式
使用request域对象把数据带给转发资源。调用request
对象的getRequestDispatcher
方法,再调用forward
方法。一次请求,浏览器地址栏不变。
forward
一些细节
forward
方法,原来写入到缓冲区的内容被清空,但响应头字段信息保持。include
方法能够用于包含一些公共页面(通常不在servlet中包含)
以斜杠/
开头。若是是给服务器用,则/
表明当前web应用;若是给浏览器用,则/
表明网站。
例子:目录结构以下
mail---------------------------Web应用所在目录 |----form1.html |----WEB-INF目录 |---------classes目录 |---------lib目录 |---------web.xml
request.getRequestDispatcher("/form1.html")
response.sendRedirect("mail/form1.html")
this.getServletContext().getRealPath("/form1.html")
this.getServletContext().getResourceAsStream("/form1.html")
<a href="/mail/form1.html">
<form action="/mail/form1.html">
其中,1,3,4是给服务器用;2,5,6是浏览器用
读取referer
请求头,不合要求则重定向。