MENU

request.getPramamter()的用法

September 17, 2018 • Read: 208 • JSP

表单

<form action = "" method = "">
action

action:目标地址,把请求交给谁处理;action可以不设置,也可以是空字符串(提交给自己处理)

method

method: get | post,默认是get

get和post的区别
  1. get:参数比较小用get,要取服务器数据
  2. post:向服务器提交数据
  3. get会把参数显示在地址栏,post不会
  4. 中文参数尽量不要使用get方式
  5. 两种请求的请求体大小,get是有限制的
输入手段

文本框,密码框,文本区域,下拉列表,但选框,复选框,隐藏框......,提交按钮,重置按钮
要求:往服务器传值的地方必须指定name属性,作为参数名传到服务器

<input type="text" name="code" class="....">

basePath

在jsp代码的上方能看到一个String变量basePath,被赋值为

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

对于我的web项目来说,basePath其实就等于http://localhost:8088/jsp/,所以当你想要访问其他网页,写路径的时候,可以直接利用basePath

提交信息给input_action.jsp页面

提交信息,分三步:

  1. 设置form的action属性为被提交的网站名称
  2. 填写输入部分的name,后面获取信息也要通过name
  3. 被提交网页通过request.getPramamter(String arg0)方法获取信息
<!-- input.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>"><!-- 指定当前页面相对路径得根目录在哪,目前的basePath = "http://localhost:8088/jsp/" -->
    
    <title>My JSP 'input.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <jsp:include page = "../res.jsp"/>
  </head>
  
  <body class = "container">
    <div>
        <h3 class = "page-header">request.getPramamter()的用法</h3>
        <form action = "<%=basePath%>c02/input_action.jsp" method = "post" class = "form-horizontal">
            <div class = "form-group">
                <label class = "col-md-3 control-label">学号:</label>
                <div class = "col-md-5">
                    <input type = "text" name = "id" class = "form-control"><!-- 指定name -->
                </div>
            </div>
            <div class = "form-group">
                <label class = "col-md-3 control-label">姓名:</label>
                <div class = "col-md-5">
                    <input type = "text" name = "name" class = "form-control"><!-- 指定name -->
                </div>
            </div>
            <div class = "form-group">
                <div class = "col-md-offset-3 col-md-5">
                    <button type = "submit" class = "btn btn-primary">提交</button>
                </div>
            </div>
        </form>
    </div>
  </body>
</html>

这里我设置了action提交的时候传给input_action.jsp这个网页,传输方式为post,两个输入框分别命名为id和name

<!-- input_action.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";                                                        
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'input_action.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>
  <body>
    <%
        // 设置编码格式,避免中文乱码
        request.setCharacterEncoding("UTF-8");
        // 获取请求参数,参数名为id,对应学号
        String id = request.getParameter("id");
        // 获取请求参数,参数名为name,对应姓名
        String name = request.getParameter("name");
    %>
    <ul>
        <li>学号:<%= id %></li>
        <li>姓名:<%= name %></li>
    </ul>
  </body>
</html>

为了避免输入框输入中文,导致传到input_action.jsp网页的信息是乱码,这里要利用request.setCharacterEncoding(\"UTF\-8")方法将其设置为中文编码格式。然后利用request.getParameter(String arg0)方法接受请求的参数,最后打印出来

中文乱码问题解决办法

  1. 将请求参数以ISO-8859-1编码形式转换成字节数组,再将字节数组转换成字符串
  2. request.setCharacterEncoding(“UTF-8”);

访问web手段

1.地址栏
http://localhost:8088/jsp/c02/input_action.jsp?name=x&code=1234

只要在URL后面跟上一个"?",然后继续跟上pname1=pvalue1&pname2=pvalue2&即可

2.超链接
<a href="<%= basePath %>c02/input_action.jsp?code=00000&name=张三">张三访问</a>

题目:提交三条边,输出面积

<%@page import="java.util.regex.Pattern"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";                                                        
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'input_action.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>
  <body>
    <%
        String a = request.getParameter("a");
        String b = request.getParameter("b");
        String c = request.getParameter("c");
        if(a != "" && b != "" && c != "") {
            Pattern pattern = Pattern.compile("[1-9]");
            if(pattern.matcher(a).matches() && pattern.matcher(b).matches() && pattern.matcher(c).matches()) {
                double bian_a = Double.parseDouble(a);
                double bian_b = Double.parseDouble(b);
                double bian_c = Double.parseDouble(c);
                if(bian_a + bian_b <= bian_c || bian_a + bian_c <= bian_b || bian_b + bian_c <= bian_a) {
                    out.println("Sorry三条边不能构成三角形,请重新输入");
                %>
                    <a href = "<%= basePath %>c02/triangle.jsp">返回</a>
                <%
                } else {
                    double p = (bian_a + bian_b + bian_c) / 2.0;
                    out.println("边长为" + bian_a + "," + bian_b + "," + bian_c + "的面积为:" + Math.sqrt(p * Math.abs(bian_a - p) * Math.abs(bian_b - p) * Math.abs(bian_c - p)));
                }
            } else {
                out.println("边不能含有非数字信息,请重新输入");
                %>
                    <a href = "<%= basePath %>c02/triangle.jsp">返回</a>
                <%
            }
        } else {
            out.println("缺少边的信息,请重新输入");
            %>
                <a href = "<%= basePath %>c02/triangle.jsp">返回</a>
            <%
        }
    %>
  </body>
</html>

input.jsp就不附上了,原来的代码改一下name,在新增一个输入框就行了

Archives Tip
QR Code for this page
Tipping QR Code