zoukankan      html  css  js  c++  java
  • Servlet 响应 响应相关与重定向 请求 获取表单数据2种方法

    一、HttpServletResponse  (响应)

    包括下面三个:

    1、响应消息行  HTTP/1.1  200 OK

    200是HTTP状态码, 代表请求已成功。 (查httpservletresponse类可知)

    setStatus(int sc) 设置响应状态码

    2、响应消息头

    sendRedirect(String location)                 请求重定向

    setHeader(String name, String value)    设置响应头信息

    告诉浏览器使用什么编码表

    response.setHeader("content-type", "text/html;charset=UTF-8");

    设置3秒后刷新跳转到/day9/servlet/demo1

    response.setHeader("referesh",  "3;url=/day9/servlet/demo1");

     

    3、响应正文(主体)

    •  *** getWriter();    字符输出流
    • getOutputStream();    字节输出流
    • setCharacterEncoding(String charset)    告知服务器使用什么编码
    •  *****setContentType(String type)

    二、响应相关操作与重定向操作


    1.建立HttpServlet应用

    2.然后按照下图在doGet方法中输入:箭头1和箭头2功能一样,写一个就行。

    getWriter()字符输出流方法的使用

     

    然后加载应用,启动tomcat

    然后在浏览器中输入:

    http://localhost:8080/day9/servlet/demo1 

    就会在浏览器中显示: 你好!

    getOutputStream()字节输出流方法的使用

     

    上述程序response细节说明:

    getOutputStream用于得到(返回)输出二进制数据的ServletOuputStream对象。

    getWriter方法用于得到(返回)输出文本数据的Printwriter对象。

     getOutputStreamgetWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。不然会抛异常。

    Servlet程序向ServletOutputStreamPrintWriter对象中写入的数据(其实就是调用writegetwriter方法),将被tomcatresponse里面获取,然后将这些数据当作响应消息的正文,与响应状态行和响应消息头组合后输出到客户端

     请求重定向

     先访问7,被告知重定向到8

    Demo7.java

    注意!先执行完这句话,再跳转

    Demo8.java

    浏览器输入:http://localhost:8080/day9/servlet/demo7

     

    三、HttpServletRequest (请求)

    1、请求消息行  

    Resquest类中的方法

    //获得请求方式     GET

               request. getMethod()

    //返回客户端发出请求时的完整URL

         request.getRequestURL()

    //返回请求行中的资源名部分

            request.getRequestURI()

        //  获得当前应用的虚拟目录  

    request.getContextPath()

     //返回请求行中的参数部分。

    request.getQueryString()

    2、请求消息头

      String   getHeader(String name)  根据头名称得到这个头的值

    Enumeration   getHeaderNames()  得到所有头名称

     Enumeration   getHeaders(String name)  根据头名称得到所有相同头名称的值

    域对象:就是Java编译系统中的非基本类性数据的类名

    例如:private Test instance;//Test是当前类,instance就是当前类的域对象

    3、请求正文(重要)

    与          获取表单数据       相关的方法

     getParameter(name) 根据表单中name属性的名字,获取value属性的值方法

     getParameterValuesString name专业为复选框取值提供的方法

     getParameterNames() 得到表单提交的所有name的方法

     getParameterMap 得到表单提交的所有值的方法   

    getInputStream  以字节流的方式得到所有表单数据

     

    与操作  非表单数据    相关的方法(request也是一个域对象)

    将非表单的数据添加到request的域中name是自己取得名字,value是值

     void setAttribute(String name, Object value);

    request对象中获取name的值

     Object getAttribute(String name);

    request对象中的移除

    Void removeAttribute(String name);

    与       请求转发     相关的方法

         //得到请求转发的协助对象

         RequestDispatcher getRequestDispatcher(String path)

    相关的方法:

    forward(ServletRequest request, ServletResponse response) //请求转发的方法

    include(ServletRequest request, ServletResponse response) //请求包含的方法

    与      请求编码       相关的方法:

    //解决post方式编码

    *****request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式

    //解决get方式编码

    String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);

    四、获取表单数据的两种方法

    建立一个register.html文件

    然后按照下面写一个form表单

    注意下面按照method="post"方式传输

    <body>
        <form action="/day9_3/servlet/demo3" method="post">
            用户名:<input type="text" name="userName"/><br/>
            密码:<input type="password" name="pwd"/><br/>
            性别:<input type="radio" name="sex" value="男" checked="checked"/><input type="radio" name="sex" value="女"/><br/>
            爱好 :
                <input type="checkbox" name="hobby" value="篮球"/>篮球
                <input type="checkbox" name="hobby" value="唱歌"/>唱歌
                <input type="checkbox" name="hobby" value="编码"/>编码
                <br/>
            所在城市:
            <select name="city">
                <option>------请选择------</option>
                <option value="bj">北京</option>
                <option value="sh">上海</option>
                <option value="gz">广州</option>
            </select>
            <br/>
            
            <input type="submit" value="注册"/>
        </form>
    </body>

    第一种

    Demo3.java 详细步骤见 Servlet三种创建方式

    public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    //解决乱码问题:告诉服务器要使用什么编码,注:浏览器使用的是什么编码(UTF-8)传过来的就是什么编码 
    //因为浏览器是post传输所以,服务器(test1()方法)端应该添加下面语句
            request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
            test1(request);
        }
    private void test1(HttpServletRequest request) throws UnsupportedEncodingException {
            //获取表单数据
            //根据表单中name属性的名字,获取value属性的值方法 
            String userName = request.getParameter("userName");
            String pwd = request.getParameter("pwd");
            String sex = request.getParameter("sex");
    // 专为复选框提供的方法,当在表单中一个都没有选择时,那么hobbys的值是null
            String[] hobbys = request.getParameterValues("hobby");   
            
            String city = request.getParameter("city");
            
    //如果register.html中的method是get方式,那么需要下面的语句进行转码,不然会出现乱码。
    //    sex = new String(sex.getBytes("iso-8859-1"),"UTF-8");
                    
            System.out.println(userName);
            System.out.println(pwd);
            System.out.println(sex);
            System.out.println(city);
            
            for (int i = 0;hobbys!=null && i < hobbys.length; i++) {
                System.out.print(hobbys[i]+"	");
            }
            System.out.println();
        }

    在浏览器中输入:

    http://localhost:8080/day9_3/register.html

    然后一定要在表单中输入一些数据然后注册提交后,就会在myeclipse的底部看到提交的数据了。

    如果改成get方式如下图1,那么在test1()中应该加上一句话,如下图2

     

    建议使用POST方法

    第二种

    Demo3.java 详细步骤见《建立HttpServlet应用步骤.doc

    getParameterNames() 方法:得到表单提交的所有的name

    public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
    test2(response);
    }
    private void test2(HttpServletRequest request) {
            //获取所有的表单name的名子
            Enumeration names = request.getParameterNames();
            while(names.hasMoreElements()){
           //因为表单里的内容都是字符串,所以强转一下,得到每一个name名
                String name = (String) names.nextElement();
        //根据name名,得到value值,使用getParameterValues的原因是因为有hobby复选框 ,其实getParameterValues也能接受单个字符串,所以使用这个。
                String[] values = request.getParameterValues(name);
                for (int i = 0;values!=null && i < values.length; i++) {
                     // 输出name和value值
                    System.out.println(name+"	"+values[i]); 
                }
            }
        }

    注意:浏览器 一定要刷新缓存  ,重新部署应用,重启tomcat

    在浏览器中输入:http://localhost:8080/day9_3/register.html

  • 相关阅读:
    Java数组的使用
    Java的栈堆以及数组两种不同类型的定义
    Java数组声明的创建
    JAVA递归
    Java可变参数
    Java方法(类--------对象--------方法)
    html块元素和内联元素的区别
    HTML基础介绍
    CSS网页美化元素属性介绍
    ArrayList类的remove(Object o)方法简述
  • 原文地址:https://www.cnblogs.com/expedition/p/11212109.html
Copyright © 2011-2022 走看看