response
response的OutputStream输出数据
1 | String data = "中国"; |
或者利用html的meta标签模拟一个HTTP响应头,来控制浏览器行为
1 | out.write("<meta http-equiv='Content-type' content='text/html;charset=UTF-8'>".getBytes()); |
response的Writer输出数据
1 | String data = "中国"; |
response下载文件
1 | String path = this.getServletContext().getRealPath("/download/1.jpg"); //得到资源文件1.jpg在硬盘中的地址 |
response控制浏览器定时刷新
1 | response.setHeader("refersh",3); //每隔3s刷新一次 |
实际开发中,一般这么写
1 | String message = "<meta http-squiv='refresh' content='3;url=/ProjectName/index.jsp'>恭喜你,登陆成功,本浏览器将在3s后跳转到主页面"; |
response控制浏览器缓存
1 | response.setDateHeader("expires", System.currentTimeMillis()+1000*3600); //缓存1h |
response实现请求重定向
1 | response.setStatus(302); |
重定向向服务器发送两次请求,通过浏览器地址栏自动改变就可以看出来,这样对服务器压力较大,所以除了登录跳转和购物下单跳转购物车一般不介意采用。
response一些细节
getOutputStream()和getWriter()方法分别用于得到输出二进制数据、输出文本数据的ServletOutputStream、Printwriter对象,这两个方法互斥,调用了其中一个就不能调用另一个;
Servlet程序向ServletOutputStream或Printwriter对象写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端;
Servlet的service方法结束后,Servlet引擎将检查getWriter()或getOutputStream()方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关于该输出流对象;
request
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求投中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户端的信息。
RUL和URI
URL:用于标识某个互联网资源,如http://www.sina.com/news/1.html;
URI:用于标识某个资源,如/news/1.html;C:\abc\d.txt;
判断这两个区别的用处:权限拦截、访问次数统计等
request获取请求头和请求数据
获取请求头:request.getHeader()/request.getHeaders()/request.getHeaderNames();
获取客户端带来的数据:
首先,客户端一般有两种方式带数据
1.
1 | //通过超链接 |
2.
1 | //通过表单 |
request获取:
1 | String value = request.getParameter("username"); |
request中文乱码
1 | request.setCharacterEncoding("UTF-8"); //只对post提交有效 |
request实现请求转发
请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。
request对象提供了一个getRequestDispatcher方法,该方法返回一个 RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。
1 | String data = "aaaaa"; |
request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其他web资源处理。
MVC:model-javabean;view-jsp;controller-servlet,流程:jsp收到请求产生数据,数据通过JavaBean封装,JavaBean不适合做输出,会存在request域,jsp再从request中取出进行输出。
细节一:
如果在调用forward方法之前,在servlet程序中写入的部分内容已经被真正的传送到了客户端,forward方法将抛出IIIegalStateException异常,例如。
1 | if(true){ |
细节二:
如果在调用forward方法之前向servlet引擎的缓冲区,即response中写入了客户端,只要写入到缓冲区中的内容还没有被真正输出到客户端,forward方法就可以被正常执行,原来写入response的内容将被清空,但是,已写入到HttpServletResponse对象中的响应头字段信息保持有效。
细节三:
RequestDispatcher对象除了forward方法之外还有一个方法,include方法,例如。
1 | //例如,每个界面的头脚都一样,单独写一个head.jsp和foot.jsp,在需要的界面引用即可 |
web工程各类地址写法
1 | //1. |
总结:
写地址先写一个斜杠(/),如果地址是写给服务器用的,这个斜杠就代表web应用;如果地址是写给浏览器的,这个斜杠就代表网站;
利用referer防盗链
1 | String referer = request.getHeader("referer"); //获得访问链接 |
注:转载文章请注明出处,谢谢~