request的中文乱码问题
浏览器以什么码表打开网页 就用什么码表提交数据接受数据前加上
request.setCharacterEncoding("UTF-8");
只对post提交有效
get要手动修改 <a>标签都是get提交
username = new String(username.getBytes("ios8859-1"),"UTF-8");
改服务器配置处理乱码(不推荐用)
server.xml中修改服务器配置
在<Connector>中加上URIEncoding="UTF-8"
或useBodyEncodingForURI="true"会使request.setCharacterEncoding("UTF-8")对get也有效
request对象实现请求转发
指一个web资源收到客户端请求后,通知服务器去调用另一个web资源进行处理(request也可以实现转发)应用场景:MVC设计模式
M model javabean 封装数据
V view jsp 输出数据
C cotroller servlet 控制器收到请求产生数据
分工 各司其职
request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发
forward方法用于将请求转发到RequestDispatcher对象封装的资源
如果在调用forward方法之前,在Servlet程序中写入的部分内容已经被真正的传送到了客户端,foward方法将抛出IllegalStateException异常
如果Servlet引擎缓冲区(response)写入了内容,只要没输出到客户端,foward会执行且清空缓冲区内容(已写入HttpServletResponse对象的响应头字段信息保持有效)
养成好习惯 跳转之后加return不执行后面代码
特点:
1.客户端只发一次请求服务器有多个资源调用
2.客户端浏览地址不变
include方法实现页面包含
被包含页面不要出现全局架构标签
request对象同时是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其他web资源处理
setAttribute()
getAttribute()
removeAttribute()
getAttributeNames()
web工程中各类地址的写法
request.getRequestDispatcher("/1.html").forward(request,response);给服务器用response.sendRedirect("/xxx/1.html");给浏览器用
this.getServletContext().getRealPath("/1.html");给服务器用
this.getServletContext().getResourceAsStream("/1.html")给服务器用
<a href="/xxx/1.html">xxx</a>给浏览器用
<form action="/xxx/1.html"></form>给浏览器用
书写顺序:
先写一个/
给服务器用 写WEB应用名
给浏览器用 写网站名(加上项目名称)
uri上资源 / http://
硬盘上资源 \\ c:\\
不能用/的时候 写相对目录 此时具体情况具体分析
防盗链
String referer = request.getHeader("referer");//获取来访的地址if(referer==null || !referer.startsWith("http://localhost")){
//判断来访的地址,为空(直接复制网址访问)或不是从主页来访的,使其重定向到主页面
response.sendRedirect("/xxx/index.jsp");
return;//使后面不执行
}