Servlet总结(4)--HttpServletRequest对象

HttpServletRequest对象是用于封装客户端的请求数据的,底层是HashTable。
便于方便,后文使用request代替,
request的基本使用这里不详细讲解,主要总结一下几点。
1、获取客户端请求参数的方法
1)getParameter(String)
最常用的方法,几乎所有的表单提交过来都能用该方法进行参数获取。
2)getParameterValues(String name)方法
这个针对特殊的表单,比如多选按钮,客户端传递过来的是一个String数组,所以,服务器端解析的时候需要使用该方法进行解析。

String[] insts = request.getParameterValues("inst");

3)getParameterMap方法
由于request对象底层是HashMap,所以,在接受请求参数时候,可以用Map进行接受,将所有的请求参数获取出来。

2、Servlet获取中文请求参数的问题
由于客户端提交过来的中文将会被转码,转码格式为ISO8859-1,所以,当Servlet接收到参数时,也是一串乱码,必须在接收请求参数时,对参数进行指定格式的编码。
1)POST请求中文转码
在获取参数之前,通过resquest设置字符集编码格式可以解决此类问题

/设置request的编码格式
request.setCharacterEncoding("utf-8");

再去获取参数,这样就能完整的取出中文参数了。
2)GET请求中文转码
由于参数是通过URL传递的 , 以上方式针对GET请求转码无效,我们必须先将参数接收进来,再将值进行转码。

//设置requst的编码格式无效,需要将请求数据接受下来进行编码
user = request.getParameter("user");
user = new String(user.getBytes("ISO8859-1") , "utf-8");//转码

或者,就是在服务器端配置URL编码格式:

修改tomcat的配置文件server.xml:

 <body>
    <h1>测试Attrbute和Parameter</h1>
    <form action="servlet/AttributeAndParameter" method="get">
        用户:<input type="text" name="user" id="user"><br>
        密码:<input type="password" name="pwd" id="pwd"><br>
        <input type="submit" id="submit" value="提交" ><br>
        <p>返回结果</p>
        <%=request.getAttribute("result") %>
    </form>
  </body>

这里写图片描述

写一个servlet,作用是接收信息,然后将接收的信息再返回给原页面显示。

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        String user = null;
        String pwd = null;
        //通过getParameter获取传入的参数
        //这里注意如果是以POST方式进来的请求,需要对中文进行转码
        String method = request.getMethod();
        if(method.equalsIgnoreCase("POST")){
            //post请求
            //设置request的编码格式
            request.setCharacterEncoding("utf-8");
            user = request.getParameter("user");
            pwd = request.getParameter("pwd");
        }else{
            //GET请求
            //设置requst的编码格式无效,需要将请求数据接受下来进行编码
            user = request.getParameter("user");
            user = new String(user.getBytes("ISO8859-1") , "utf-8");//转码

            pwd = request.getParameter("pwd");
        }

        System.out.println("<p>请求类型:"+method+ ", 用户:"+user+" , 密码:"+pwd+"</p>");
        //返回到页面中
        //out.print("<p>请求类型:"+method+ ", 用户:"+user+" , 密码:"+pwd+"</p>");

        //测试2
        //这里将返回值参数返回到原来的JSP中,通过转发
        request.setAttribute("result", "<p>请求类型:"+method+ ", 用户:"+user+" , 密码:"+pwd+"</p>");
        //转发
        request.getRequestDispatcher("/TestAttrbuteAndParameter.jsp").forward(request, response);

    }

这里注意,servlet中做了一次转发,转发给了原JSP,在JSP中getAttribute()。符合该方法的作用范围,因为JSP就是一个servlet

输入用户和密码,得到结果:
这里写图片描述

这个例子可以看出两者的使用方式和范围了。

同时,这里引出另一个问题,转发以及重定向,下面说下这两者的区别:
1)请求转发时,页面的地址不变,重定向时,页面地址变为了重定向的目标地址。
2)转发的整个过程客户端只有一次请求, 而重定向是发生了两次请求。
3)重定向可以重定向到任何网页上,而转发只能是本站网点。
4)调用方式的不同
转发的servlet代码

request.getRequestDispatcher("/t1.jsp").forward(request, response);

JSP中转发的写法

<jsp:forward page="apage.jsp" />

重定向的代码

response.sendRedirect("apage.jsp");//重定向到apage.jsp

5)框架当中常使用是转发,两者在不同情况下必须使用其中的一种 ,并非可选择的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值