Servlet之HttpServletResponse和HttpServletRequest
HttpServletResponse
1.告诉服务器应用使用UTF-8解析文本的两种方式,告诉客户端要使用什么编码
- response.setHeader("content-type", "text/html;charset=UTF-8");
- response.setContentType("text/html; charset=UTF-8");
2.getWriter
- PrintWriter out = response.getWriter();//得到一个字符输出流
- out.write("你好!");//向客户端响应文本内容
3.getOutputStream
- response.setContentType("text/html;charset=UTF-8");
- ServletOutputStream sos = response.getOutputStream();
- sos.write("你好123".getBytes("UTF-8"));//getBytes默认编码为本地编码(即:gbk)
4.下载文件
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //通过路径得到一个输入流
- String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女.jpg");
- FileInputStream fis = new FileInputStream(path);
- //创建字节输出流
- ServletOutputStream sos = response.getOutputStream();
- //得到要下载的文件名
- String filename = path.substring(path.lastIndexOf("\\")+1);
- //设置文件名的编码
- filename = URLEncoder.encode(filename, "UTF-8");//将不安全的文件名改为UTF-8格式
- //告知客户端要下载文件
- response.setHeader("content-disposition", "attachment;filename="+filename);
- response.setHeader("content-type", "image/jpeg");
- //执行输出操作
- int len = 1;
- byte[] b = new byte[1024];
- while((len=fis.read(b))!=-1){
- sos.write(b,0,len);
- }
- sos.close();
- fis.close();
- }
5.告诉客户端不使用缓存
- response.setHeader("pragma", "no-cache");
- response.setHeader("cache-control", "no-cache");
- response.setIntHeader("expires", 0);
6.跳转
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html;charset=UTF-8");
- /*response.setIntHeader("refresh", 1);//设置1秒钟刷新一次
- Random r = new Random();
- response.getWriter().write(r.nextInt()+"");*/
- response.getWriter().write("注册成功!3秒钟跳到主页");
- //设置3秒钟跳转
- response.setHeader("refresh", "3;url=/day09_reques_response/demo6");
- }
7.重定向
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- System.out.println("A:我要借钱!");
- System.out.println("B:我不有,但是我可以告诉你谁有");
- /*//告诉客户端要重新定向新的资源
- response.setStatus(302);
- //告诉浏览器要去访问哪个URL
- response.setHeader("location", "/day09_00_HttpServletResponse/servlet/demo8");*/
- //请求重定向
- response.sendRedirect("/day09_reques_response/demo8");
- System.out.println("A: 我去了");
- }
8.response细节
getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。 会抛异常。
Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态
行和各响应头组合后输出到客户端。
Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关
闭该输出流对象。
HttpServletRequest
1.request常用方法
- 获得客户机信息
- getRequestURL方法返回客户端发出请求时的完整URL。
- getRequestURI方法返回请求行中的资源名部分。
- getQueryString 方法返回请求行中的参数部分。
- getRemoteAddr方法返回发出请求的客户机的IP地址
- getRemoteHost方法返回发出请求的客户机的完整主机名
- getRemotePort方法返回客户机所使用的网络端口号
- getLocalAddr方法返回WEB服务器的IP地址。
- getLocalName方法返回WEB服务器的主机名
- getMethod得到客户机请求方式
- 获得客户机请求头
- getHead(name)方法
- getHeaders(String name)方法
- getHeaderNames方法
- 获得客户机请求参数(客户端提交的数据)
- getParameter(name)方法
- getParameterValues(String name)方法
- getParameterNames方法
- getParameterMap方法 //做框架用,非常实用
- getInputStream
代码示例
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //test1(request);
- //test2(request);
- //获得相关name的消息头
- Enumeration headers = request.getHeaders("accept-language");
- while(headers.hasMoreElements()){
- String e = (String) headers.nextElement();
- System.out.println(e+":"+request.getHeader(e));
- }
- }
- private void test2(HttpServletRequest request) {
- //获得所有请求消息头的name
- Enumeration names = request.getHeaderNames();
- while(names.hasMoreElements()){
- String e = (String) names.nextElement();
- System.out.println(e+":"+request.getHeader(e));
- }
- }
- private void test1(HttpServletRequest request) {
- //获得请求消息头的信息
- String header = request.getHeader("User-Agent");
- System.out.println(header);
- if(header.toLowerCase().contains("msie")){
- System.out.println("你使用的是IE浏览器");
- }else if(header.toLowerCase().contains("firefox")){
- System.out.println("你使用的是火狐浏览器");
- }else if(header.toLowerCase().contains("chrome")){
- System.out.println("你使用的是谷歌浏览器");
- }else{
- System.out.println("你使用的是其它浏览器");
- }
- }
2.获得参数
- private void test1(HttpServletRequest request) throws UnsupportedEncodingException {
- //获取表单数据
- //根据表单中name属性的名,获取value属性的值方法
- String userName = request.getParameter("userName");
- String pwd = request.getParameter("pwd");
- String sex = request.getParameter("sex");
- String[] hobbys = request.getParameterValues("hobby");
- String city = request.getParameter("city");
- userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");
- System.out.println(userName);
- System.out.println(pwd);
- System.out.println(sex);
- for (int i = 0;hobbys!=null && i < hobbys.length; i++) {
- System.out.print(hobbys[i]+"\t");
- }
- System.out.println();
- System.out.println(city);
- }
- private void test2(HttpServletRequest request) {
- //获取所有的表单name的名子
- Enumeration names = request.getParameterNames();
- while(names.hasMoreElements()){
- String name = (String) names.nextElement();//得到每一个name名
- String[] values = request.getParameterValues(name);//根据name名,得到value值
- for (int i = 0;values!=null && i < values.length; i++) {
- System.out.println(name+"\t"+values[i]);
- }
- }
- }
- private void test3(HttpServletRequest request) {
- try {
- User u = new User();
- System.out.println("封装数据前:"+u);
- //获取表单数据
- Map<String,String[]> map = request.getParameterMap();
- for (Map.Entry<String, String[]> m : map.entrySet()) {
- String name = m.getKey();
- String[] value = m.getValue();
- //创建一属性描述器
- PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
- //得到setter属性
- Method setter = pd.getWriteMethod();
- if(value.length==1){
- setter.invoke(u, value[0]);//给一个值的变量赋值
- }else{
- setter.invoke(u, (Object)value);//相关于给复选框赋值
- }
- }
- System.out.println("封装数据后:"+u);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
依赖包commons-beanutils-1.8.3.jar和commons-logging-1.1.1.jar
- private void test4(HttpServletRequest request) {
- try {
- User u = new User();
- System.out.println("封装数据前:"+u);
- BeanUtils.populate(u, request.getParameterMap());
- System.out.println("封装数据后:"+u);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
3.请求转发(请求一次)
- request.getRequestDispatcher("/demo6").include(request, response);
写入需要传递的值
- //将非表单的数据添加到request的域中
- request.setAttribute("s", str);
获取传过来的值
- //将request对象中的移除
- //request.removeAttribute("s");
- //从request对象中获取s的值
- String s = (String) request.getAttribute("s");
4.重定向(请求两次)
- //将请求转发到demo6中
- //request.getRequestDispatcher("/servlet/demo6").forward(request, response);
- //注:请求转发不能跳转到其它应用
- //request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
- //使用重定向
- //response.sendRedirect(request.getContextPath()+"/servlet/demo6");
- //可以跳转到其它应用
- //response.sendRedirect("http://www.baidu.com");
5.请求包含
- //请求包含
- request.getRequestDispatcher("/demo6").include(request, response);
6.解决乱码
- request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
- userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");//解决get乱码
Servlet之HttpServletResponse和HttpServletRequest的更多相关文章
- Java Web之路(二)Servlet之HttpServletResponse和HttpServletRequest
HttpServletResponse 1.告诉服务器应用使用UTF-8解析文本的两种方式,告诉客户端要使用什么编码 response.setHeader("content-type&quo ...
- 找不到javax.servlet.http.HttpServletResponse和javax.servlet.http.HttpServletRequest
导了个项目进eclipse,发现很多文件都报了错,错误提示是没有引入javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServl ...
- Servlet (三)HttpServletResponse
package cn.sasa.serv; import java.io.IOException; import javax.servlet.ServletException; import java ...
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)
HttpServletRequest获取请求头信息 (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHe ...
- servlet学习总结(一)——HttpServletRequest(转载)
原文地址:http://www.cnblogs.com/xdp-gacl/p/3798347.html 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端 ...
- Servlet的HttpServletResponse输出
了解其中的一些字符设置,PrintWriter输出等.. form.html: <!DOCTYPE html> <html> <head> <title> ...
- [spring]启动时报错:NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
Spring V4.1以后的版本在不支持Servlet3.0的应用服务器上跑时会报如下错误: NoSuchMethodError: javax.servlet.http.HttpServletResp ...
- The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly referenced from required .class files
The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly referenced from ...
- javax.servlet.http.HttpServletResponse.getStatus()I
感谢作者分享:http://blog.csdn.net/szwangdf/article/details/42145463 -------------------------------------- ...
随机推荐
- Temporary Segments: What Happens When a Sort Occurs (文档 ID 102339.1)
APPLIES TO: Oracle Database - Enterprise Edition - Version 8.1.7.4 to 11.2.0.1 [Release 8.1.7 to 11. ...
- Oracle 的过程与函数
一.过程 1 .过程创建和调用 过程 (procedure) 是一个 PL/SQL 语句块,它存储在数据字典中并可被应用程序调用.可以使用过程存储数据库中频繁使用的应用逻辑.当执行一个过程时,其语句被 ...
- im4java开发向导
0.搜索ImageMagick下载安装 1.Setting up the Environment 引入im4java到classpath 设置图片处理引擎的command searchpa ...
- Web 项目 中读取专用配置文件
在 web 开发中,有时我们要为 业务逻辑处理 配置专用的 配置文件,也就是 xml 文件,这样可以极大的方便维护工作,但是读取 专用的配置文件还需要自己写一个方法,在这里,我封装了一个公用 的方法: ...
- 关于javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
今天遇到这样一个异常: 严重: Servlet.service() for servlet jsp threw exceptionjavax.servlet.jsp.JspTagException: ...
- 学习记录 java泛型资料
java泛型资料: 1. 概述在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成Lis ...
- centos6.5没有eth0, 只有eth1, eth1无法上网
1. cat /etc/udev/rules.d/70-persistent-net/rules 2.将ATTR(address)=XXXXXXXX的内容 替换 文件/etc/sysconfig/ ...
- 华为OJ平台——杨辉三角的变形
import java.util.Scanner; /** * 杨辉三角的变形 *第一行为1,后面每一行的一个数是其左上角到右上角的数的和,没有的记为0 * 1 * 1 1 1 * 1 2 3 2 1 ...
- html5相关
1.语义化标签: header\section\aside\footer 2.音视频播放: video\audio 其中video支持ogg\mpeg4\webm格式的视频: 3.canvas 一.画 ...
- OpenGL ES 中Uniform块
1.采用uniform Block的原因如果你的程序中包含了多个着色器,而且这些着色器使用了相同的Uniform变量,你就不得不为每个着色器分别管理这些变量.Uniform变量的location是在程 ...