`
goalietang
  • 浏览: 25336 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Servlet的HttpServletResponse对象

阅读更多
        我们之前说到过, Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,从客户端取数据找HttpServletRequest,而向客户端发送数据需要用到HttpServletResponse对象,我们几天就来收说这个HttpServletResponse。
        首先,让我们来看看API文档,了解一下HttpServletResponse对象中有什么属性方法。我们可以从文档中看到,在字段摘要中,HttpServletResponse的字段都是一些HTTP状态码的封装,所以我们很多时候响应状态码,可以直接找HttpServletResponse中的状态码字段,我们只需要了解几个常用的状态码:
引用

        SC_BAD_REQUEST 状态码400: 代表从客户端发来的请求在语句构成上是错误的。

        SC_FORBIDDEN   状态码403: 代表你所发来的请求Server是知道存在的,但是Server拒绝返回给你这样的请求支援,简单的说就是服务器禁止你请求现在所要请求的资源。

        SC_NOT_FOUND   状态码:404:  最常见的错误代码,代表所请求的资源不存在。

        SC_INTERNAL_SERVER_ERROR 状态码500:  代表Http服务器内部错误,导致了无法正常满足请求,也就是服务器无响应。

        SC_SERVICE_UNAVAILABLE 状态码503:  代表当前服务器临时的超负荷了,无法handle这个request。

        还有很多状态码,这里就不一一累述了。但是大家要知道,基本上4打头的状态码都是客户端出问题,而5打头的状态码都是服务器端出的问题。
        接下来我们来看看他的方法摘要,方法摘要中的方法不多,而我们其实常用到的也只是其中几个:
引用

        addHeader和setHeader: 这两个方法都是设置响应头的,第一个方法是增加,如果该响应头的name存在,继续增加会增加多个相同name的响应头,而第二个方法在该响应头name存在的情况下,是修改该name下响应头value的内容。而这两个方法在HttpServletResponse中都有增强方法,就是addDateHeader,addIntHeader,setDateHeader,setIntHeader。一看就知道,当要设置的响应头是时间类型的或者Int类型的,可以用这两个方法。

        sendRedirect:  该方法用于请求重定向,接收到了一个请求,使用response对象,将该请求重定向到另一个URL去。该方法传入的参数可以接受一个相对路径,而servlet容器必须在发送响应到客户端之前将其转换为绝对路径,如果传入路径以“/”开头,容器会解释这个路径为相对于容器root的路径,而以“/”开头,容器会直接解释为当前请求的URL。


        了解完字段和方法,现在我们来谈谈HttpServletResponse的主要响应方式,他可以向客户端发送三种类型的数据:a.响应头b.状态码c.数据
        而我们通常可以依靠响应头来控制乱码的问题,比如下面这段代码,他在响应之前设置了一个响应头,该响应头的内容如下,代表我需要浏览器以UTF-8来解码。
        response.setHeader("Content-type","text/html;charset=UTF-8");


        我们再看一段代码,下面这段代码表示设置response的编码方式是UTF-8,如果没有这段代码,Response对象通常使用默认的ISO8859-1的方式编码,中文就会出现乱码。这段代码和上面那段代码一般是结合在一起中,即设置了Response的编码方式,再设置浏览器的解码方式。
        response.setCharacterEncoding("UTF-8");

  
        其实我们可以通过下面这段代码将上面那两段代码整合,也能解决中文乱码问题。下面这段代码内部其实首先就设置了Response编码方式,并且设置了浏览器解码方式。
        response.setContentType("text/html;charset=UTF-8");


        最后我们再讲一段代码,是用Response对象设置文件下载。
    String path = this.getServletContext.getRealPath(“/abc.jpg”);
    String fileName = path.subString(path.lastIndexOf(“\\”));
    Response.setHeader(“content-disposition”,“attachment;filename=”+URLENcode    r.encode(fileName,”UTF-8”));


        简单解释一下上面三段代码,第一段是用ServletContext获取到提供下载的文件的RealPath,这里我们要下载的文件放在webRoot目录下,名称叫abc.jpg。
        第二段代码是通过截取字符串从全路径中获取到要下载的文件名。
        最后一段也是最重要的一段,就是设置响应头,响应头的域不再是content-type了,而是content-disposition,而内容则是“attachment:filename=,这之后拼接了一个我们获得的文件名,但是这个文件名是用了URLENcoder将其编码为UTF-8了的。目的是在如果改文件名是中文,编码为UTF-8才能正常解码找到正确的文件名。至此,我们I实现了一个简单的文件下载。
       
分享到:
评论

相关推荐

    Servlet项目实践 实现学生信息系统的全部代码

     ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。  ⑤WEB应用程序被停止或重新...

    servlet-api.zip Servlet必须的Jar包

    在项目开发的过程中,如果你编写过servlet就知道要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是要靠这个jar包才能使用的。 如果你在本机上安装了Tomcat,那么这个jar包一般都在tomcat安装目录...

    JSP/Servlet Java面试逻辑题

    1、说一说Servlet的生命周期?★★★★★ 答: servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。 这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 2、...

    jsp有哪些内置对象?作用分别是什么?分别有什么方法?

     response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)  out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。  ...

    Struts2中Servlet的配置

    HttpServletResponse/HttpServletRequest,像servlet中使用这两个对象一样。 2、使用struts2提供的ActionContext类直接获取Servlet API。 在同一个项目中,如果既用到servlet又用了struts框架,运行项目时可能无法...

    java.servlet的jar包

    你如果编写过servlet就知道要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是要靠这个jar包才能使用的。 如果你安装了Tomcat,这个jar包一般在tomcat安装目录\lib 文件夹下面有,当你把web项目部署...

    javax.servlet-api

    提供编写servlet时要用到 HttpServletRequest和HttpServletResponse 等对象的

    Servlet请求和响应的资料,帮助初学者掌握Servlet的请求和响应

    (Tomcat,WebLogic,WebSphere)就是装载Servlet和JSP的环境、负责管理它们的各种对象,并且负责 它们的生命周期以及相关服务的链接。 1. 客户端对Web服务器发出HTTP请求 2. HTTP服务器(Apache)收到HTTP请求以后,...

    java-servlet-api.doc

    当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。 Servlet也可以执行ServletRequest接口和ServletResponse接口。...

    servlet-api2.5 jar包.rar

    servlet就知道要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是要靠这个jar包才能使用的。 如果你安装了Tomcat,这个jar包一般在tomcat安装目录\lib 文件夹下面有,当你把web项目部署到tomcat,...

    servlet-api.jar

    编写servlet要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是要靠这个jar包才能使用的(jar not loaded )。 在Eclipse中添加Servlet-api.jar的方法 :窗口->首选项->java -> 已安装的jre -> ...

    servletapi.jar

    servlet-api.jar是在编写servlet必须用到的jar包,需要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是要靠这个jar包才能使用的,有需要的赶快下载吧!

    servlet jar包

    编写servlet必须用到的jar包,需要用到HttpServletRequest和HttpServletResponse等对象,解决项目里提示HttpServletRequest不能引用 Java servlet jar包

    Jsp程序设计试题库

    1、jsp的技术特点? 1)将内容的显示与生成进行分离 (2)强调可重用的组件:依赖与可重用的、跨平台的组件来... Response对象允许直接访问HttpServletResponse对象 Session对象可能是状态管理上下文中使用最多的对话

    servletapi

    servlet-api.jar是在编写servlet必须用到的jar包,需要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是要靠这个jar包才能使用的,有需要的赶快下载吧!

    servlet-api

    servlet-api.jar是在编写servlet必须用到的jar包,需要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是要靠这个jar包才能使用的

Global site tag (gtag.js) - Google Analytics