JSP中request内置对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/one_super_dreamer/article/details/88104047

认识request:

    request对象是HttpServletRequest接口的一个实例,HttpServletRequest的父接口ServletRequest

使用request接受参数

直接编写表单,进行表单的提交即可。

例子:

input.html

<FORM METHOD="POST" ACTION="input.jsp">

    输入信息<INPUT TYPE="text" NAME="info">

    <INPUT TYPE="submit" value="显示">

</FORM>

input.jsp

<%@ page contentType="text/html;charset=GBK"%>

<%

    String str = request.getParameter("info") ;      

%>

<h2><%=str%></h2>

此时返现页面中原来的数字,可以正确的显示,但是传递进来的参数文字,却无法正确的进行显示。在进行request接受参数的过程中会产生乱码。

分析乱码产生的原因:

所有的静态WEB的执行流程,是先从服务器上取得一个页面,之后通过此页面把内容进行提交,提交给服务器,之后服务器再将提交的内容返回给客户进行显示。   

如果想解决乱码,直接将输入的内容变为服务器的默认编码--ISO8859-1即可,如果要想完成转码操作,需要将字符串内容重新变为byte数组。

例如:进行转码操作,修改input.jsp

<%@ page contentType="text/html;charset=GBK"%>

<%

    String str = request.getParameter("info") ;    //接受表单参数

    str = new String(str.getBytes("ISO8859-1"));  //转码

%>

<h2><%=str%></h2>

发现程序中没有乱码了。

但是,发现以上的转码操作过于复杂,最好的做法是,设置一个统一的编码,之后就按此编码进行数据的接收。

    如果想完成此操作,可以直接使用从ServletRequest接口继承而来的:setCharacterEncoding()方法进行统一的编码设置。

<%@ page contentType="text/html;charset=GBK"%>

<%

    request.setCharacterEncoding("GBK") ;        //按中文接收

    String str = request.getParameter("info") ;    //接受表单参数

%>

<h2><%=str%></h2>

以上两种方式最长用的还是setCharacterEncoding

get与post的区别:

get:

会在地址栏中显示提交的内容

地址栏中最大能放4k-5k容量的文字,所以过大肯定无法提交

post:

不在地址栏中显示提交的内容

本身不收长度的限制,理论上是任意的长度,但是如果上传的内容过多,则会超过HTTP的超时时间的限制

URL重写

格式如下:

xxx.jsp?参数名称=参数值&参数名称=参数值&参数名称=参数值

隐藏域传递参数

在表单中有一种称为隐藏域的对象,此对象中的内容会随着表单一起提交到JSP页面上。

例如:修改input.html

<FORM METHOD="POST" ACTION="input.jsp">

    输入信息:<INPUT TYPE="text" NAME="info">

    <INPUT TYPE="hidden" name="var" value="hello ">

    <INPUT TYPE="submit" value="显示">

</FORM>

修改input.jsp

<%@ page contentType="text/html;charset=GBK"%>

<%

    request.setCharacterEncoding("GBK") ;            

    String str = request.getParameter("info") ;      

    String var = request.getParameter("var") ;        

    // str = new String(str.getBytes("ISO8859-1")) ;

%>

<h2><%=str%></h2>

<h2><%=var%></h2>

可以发现隐藏域中的内容随着表单一起进行了提交。   

接受多个同名参数

在表单控件中,存在复选框,如果现在使用复选框那么该如何接收呐?

范例:

request02.html

<form action="request02.jsp" method="post">

    姓名    <input type="text" name="name">



    爱好    <input type="checkbox" name="inst" value="唱歌">唱歌

            <input type="checkbox" name="inst" value="跳舞">跳舞

            <input type="checkbox" name="inst" value="游泳">游泳

    

<input type="submit" value="显示">

</form>

request02.jsp

<%@ page contentType="text/html;charset=GBK"%>
<%
    request.setCharacterEncoding("GBK") ;           

    String name = request.getParameter("name") ;    

    String[] inst = request.getParameterValues("inst") ;    
%>
<h2>姓名<%=name%></h2>
<h2>兴趣
<%
    for(int i=0;i<inst.length;i++){
%>
        <%=inst[i]%>
<%
    }
%>
</h2>

public String[] getParameterValues(String name) 此方法返回的是一个数组,表示接收同名的一组参数。

public java.util.Enumeration getParameterNames() 此方法可以取得所有表单提交参数的参数名称。

将上面两个方法同时使用,此时会发现当获取数组的参数名后,输出值是还是只有一个。

解决方法如下:

request04.html

<form action="request04.jsp" method="post">

    姓名    <input type="text" name="name">

    爱好    <input type="checkbox" name="**inst" value="唱歌">唱歌

            <input type="checkbox" name="**inst" value="跳舞">跳舞

            <input type="checkbox" name="**inst" value="游泳">游泳

    <input type="hidden" name="info" value="hello ">

<input type="submit" value="显示">

</form>

request04.jsp

<%@ page contentType="text/html;charset=GBK"%>

<%@ page import="java.util.*"%>
<%
    request.setCharacterEncoding("GBK") ;            

    Enumeration enu = request.getParameterNames() ;    
%>
<% 
    while(enu.hasMoreElements()){

        String paramName = (String)enu.nextElement() ;
%>
        <h2><%=paramName%>
            -->
<%
        if(paramName.startsWith("**")){        //在html的复选框中设置的name属性开头格式

            // 按数组接收

            String temp[] = request.getParameterValues(paramName) ;

            for(int i=0;i<temp.length;i++){
%>
                <%=temp[i]%>
<%
            }
        }else{
%>
            <%=request.getParameter(paramName)%>
<%
        }
%>
        </h2>
<%
    }
%>

取得客户端的IP地址:

直接使用request对象的getRemoteAddr()方法就可以取得客户端的IP地址了。

猜你喜欢

转载自blog.csdn.net/one_super_dreamer/article/details/88104047
今日推荐