zoukankan      html  css  js  c++  java
  • HttpServletResponse

    我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。

    service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大,今天我们学习HttpServletResponse。

    所有Servlet响应都实现ServletResponse接口。ServletResponse接口主要有以下方法:
    
    (1)从Servlet中可以通过getWriter方法取得PrintWriter对象,来输出字符数据。从Servlet中可以通过getOutputStream方法取得ServletoutputStream对象。ServletOutputStream既可以输出字符数据,也可以输出MIME格式的二进制数据。如果getWriter方法已经被使用过,当使用getOutputStream时,会有java.lang.IllegalStateException例外抛出。
    
    (2)setContentType方法:在响应中可以表明内容格式和长短。
    
    (3)setBufferSize方法:设置Web容器的缓冲器大小; getBufferSize方法返回Web容器的缓冲器大小; resetBuffer方法清空并重置缓冲器,使用reset方法清空缓冲器、状态头信息,使用flushBuffer方法将缓冲器内的所有输出内容向客户传递。使用isCommitted方法判断是否响应已经被履行。“履行”的定义是指状态码冬耕 信息已经被写入响应。
    
    (4)setLocal方法设定响应的地域信息,主要在Web程序的国际货币国际化时使用。这个方法应该在getWriter之前被使用。默认的Web服务器的地域信息。
    
    HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法,这些方法的主要功能是设置HTTP状态码和管理Cookie。
    
    (1)setStatus方法用来设置Servlet向客户端返回的状态码,它用来设置没有出错的状态。如果Servlet运行出错,Servlet可以使用sendError方法设置状态码,如sendError(int sc)方法设置错误状态代码。sendError(int sc,String msg)方法除了设置状态码,还向客户发出一条错误信息。
    
    (2)setHeader可以指定特定名称的头信息的值,addDateheader,addIntHeader,setDateHeader,setIntHeader可以加入或理性特定时间或整数型头信息。
    
    (3)addCookie方法可以在Web服务器响应中加入Cookie对象,这个对象将被浏览器所保存。Cookie机制也被用来维护会话状态。
    
    (4)sendRedirect方法向客户发出临时重新导向的响应。它生成的响应状态码为302。该响应给了客户一个新的URL风趣。如果缓冲器已经被清空,这个方法会弹出一个IllegalStateException例外。
    复制代码

    1.ServletContext接口

    ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象 内部封装是该web应用的信息,ServletContext对象一个web应用只有一个,ServletContext在该web项目被加载时创建,在web项目卸载时或者服务器关闭时被销毁。

    通过实例化一个ServletContext实现类对象,我们可以设置全局变量或者获取配置文件。

    2.应用

    (1)初始化参数设置与获取

    实例化ServletContext对象:

    ServletContext servletContext = config.getServletContext();
    ServletContext servletContext = this.getServletContext();

    在XML设置初始化参数:

    <context-param>
          <param-name>JDBC</param-name>
          <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>

    获取参数:

    String name = context.getInitParameter("JDBC");

    (2)全局属性设置与获取

    context.setAttribute("user", "admin");
    String user = context.getAttribute("user");

    ServletContext域对象的作用范围:整个web应用(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)

    (3)获取web应用内配置文件的绝对路径

    String path1 = context.getRealPath("123.txt");
    String path2 = context.getRealPath("456.txt");
    String path3 = context.getRealPath("789.txt");

    不论该文件在web应用内的那个文件夹下,都能被获取到,可用于获取配置文件。

     3.response响应

    服务器接收到一个请求时,会生成一个响应对象,即response,我们可以通过response来实现不同的操作。

    (1)响应html代码

    复制代码
    public class LoginServlet extends HttpServlet{
        @Override
        protected void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
            String user = request.getParameter("user");
            String pwd = request.getParameter("pwd");
            String result = null;
            if(user.equals("admin")&pwd.equals("123456")) 
                result= "<h3 style='color:green'>登录成功</h3>";
            else
                result="<h3 style='color:red'>账户或密码错误</h3>";
            response.getWriter().println(result);
        }
    }
    复制代码

    (2)设置响应头

    复制代码
    public class ResponseServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.addHeader("Adam", "wink");
            response.addIntHeader("GOD", 123);
            response.addDateHeader("when", 19820052566222L);
            String html = "www.baidu.com";
            response.setStatus(302);
            response.setHeader("Location", html);//实现页面302跳转
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
    复制代码
    复制代码
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().print("<h2>页面将在5s后跳转至百度!</h2>");
            response.setHeader("refresh", "5;url=http://www.baidu.com");//定时自动跳转
        }
    复制代码

    (3)页面跳转:

    客户端跳转:

    两次请求,第一次为请求servlet的虚拟路径,第二次为请求html页面

    两次响应,第一次为302,页面跳转,第二次为200,跳转页面加载

    String html = "www.baidu.com";
    response.setStatus(302);
    response.setHeader("Location", html);//实现页面302跳转

    服务端跳转:

    一次请求,请求servlet,页面是在服务器内部打开

    一次响应,200,跳转页面打开

    服务端响应不会改变当前的url

    复制代码
    public class LoginServlet extends HttpServlet {
     
        private static final long serialVersionUID = 1L;
     
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
     
            String name = request.getParameter("name");
            String password = request.getParameter("password");
     
            if ("admin".equals(name) && "123".equals(password)) {
                request.getRequestDispatcher("success.html").forward(request, response);
            }
     
        }
     
    }
  • 相关阅读:
    innodb count优化测试
    基于HTML5 Canvas生成粒子效果的人物头像
    基于HTML5 SVG炫酷文字爆炸特效
    一款基于jQuery轮播切换焦点图,可播放多张图片
    基于Bootstrap的jQuery开关按钮组合
    基于jQuery上下切换的焦点图—带缩略图悬浮
    基于HTML5 Canvas实现的图片马赛克模糊特效
    基于jQuery的宽屏可左右切换的焦点图插件
    基于HTML5的捕鱼达人游戏网页版
    基于HTML5实现的中国象棋游戏
  • 原文地址:https://www.cnblogs.com/jason111/p/9002396.html
Copyright © 2011-2022 走看看