jsp怎么拿到url参数

在JSP中获取URL参数(如 ?xx=yy中的 xx这个参数)非常简单,主要有以下几种方式:

一、使用 EL 表达式(推荐,最简洁)

EL表达式是获取URL参数最方便的方式。

复制代码
<!-- 直接获取参数值 -->
<p>参数xx的值是:${param.xx}</p>

<!-- 在HTML属性中使用 -->
<input type="text" value="${param.xx}" />

<!-- 条件判断 -->
<c:if test="${not empty param.xx}">
    <p>xx参数存在,值是:${param.xx}</p>
</c:if>

<!-- 多值参数(如?xx=1&xx=2)获取第一个值 -->
<p>第一个值:${paramValues.xx[0]}</p>
<p>第二个值:${paramValues.xx[1]}</p>

二、使用 JSP 脚本(传统方式)

复制代码
<%
    // 获取单个参数值
    String xxValue = request.getParameter("xx");
    
    // 获取多值参数
    String[] xxValues = request.getParameterValues("xx");
%>

<!-- 使用获取到的值 -->
<p>参数xx的值是:<%= xxValue %></p>

<% if (xxValues != null && xxValues.length > 1) { %>
    <p>所有值:</p>
    <ul>
    <% for (String value : xxValues) { %>
        <li><%= value %></li>
    <% } %>
    </ul>
<% } %>

三、完整示例

复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>获取URL参数示例</title>
</head>
<body>
    <h1>URL参数获取演示</h1>
    
    <!-- 方式1:EL表达式 -->
    <div>
        <h2>使用EL表达式:</h2>
        <p>参数xx的值:<strong>${param.xx}</strong></p>
        <p>参数yy的值:<strong>${param.yy}</strong></p>
        
        <!-- 处理可能不存在的参数 -->
        <c:choose>
            <c:when test="${not empty param.xx}">
                <p>xx参数存在,值是:${param.xx}</p>
            </c:when>
            <c:otherwise>
                <p>xx参数不存在</p>
            </c:otherwise>
        </c:choose>
    </div>
    
    <!-- 方式2:JSP脚本 -->
    <div>
        <h2>使用JSP脚本:</h2>
        <%
            String xx = request.getParameter("xx");
            String yy = request.getParameter("yy");
            
            if (xx != null && !xx.trim().isEmpty()) {
        %>
            <p>参数xx的值:<strong><%= xx %></strong></p>
        <%
            } else {
        %>
            <p>xx参数不存在或为空</p>
        <%
            }
        %>
    </div>
    
    <!-- 实际应用:搜索功能 -->
    <%
        String keyword = request.getParameter("keyword");
        if (keyword != null) {
    %>
        <h3>搜索结果显示:</h3>
        <p>您搜索的关键词是:<em><%= keyword %></em></p>
        <!-- 这里可以显示搜索结果 -->
    <%
        }
    %>
</body>
</html>

四、实际应用场景

1. 搜索功能

复制代码
<!-- 访问URL:search.jsp?keyword=java&category=books -->
<%
    String keyword = request.getParameter("keyword");
    String category = request.getParameter("category");
    
    // 执行搜索逻辑...
%>
<h2>搜索结果</h2>
<p>关键词:${param.keyword}</p>
<p>分类:${param.category}</p>

2. 分页功能

复制代码
<!-- 访问URL:list.jsp?page=2&size=20 -->
<%
    int page = Integer.parseInt(request.getParameter("page") != null ? 
                request.getParameter("page") : "1");
    int size = Integer.parseInt(request.getParameter("size") != null ? 
                request.getParameter("size") : "10");
    
    // 分页查询逻辑...
%>
<p>当前第 ${param.page} 页,每页 ${param.size} 条</p>

3. 带默认值的处理

复制代码
<!-- 优雅地处理可能为空的参数 -->
<c:set var="pageNum" value="${not empty param.page ? param.page : 1}" />
<c:set var="pageSize" value="${not empty param.size ? param.size : 10}" />

<p>当前页码:${pageNum}</p>
<p>每页大小:${pageSize}</p>

五、重要注意事项

  1. 空值处理:总是要考虑参数可能不存在的情况

  2. 编码问题:中文参数可能需要处理URL编码

    <%
    String keyword = request.getParameter("keyword");
    if (keyword != null) {
    keyword = new String(keyword.getBytes("ISO-8859-1"), "UTF-8");
    }
    %>

  3. 安全性:对用户输入的参数进行验证和转义,防止XSS攻击

    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

    安全显示:${fn:escapeXml(param.userInput)}

总结

  • 推荐使用EL表达式${param.参数名},简洁安全

  • 多值参数 :使用${paramValues.参数名[索引]}request.getParameterValues()

  • 一定要处理空值情况,避免NullPointerException

  • 考虑安全性,对用户输入进行转义

EL表达式是现代JSP开发的首选,代码更简洁,可读性更好。

相关推荐
kyriewen14 分钟前
WebAssembly:前端界的“外挂”,让C++代码在浏览器里跑起来
前端·c++·webassembly
悟空和大王17 分钟前
核心 SDK 详细设计文档 (Visual-Render-SDK)
前端
空中海20 分钟前
02 状态、Hooks、副作用与数据流
开发语言·javascript·ecmascript
014-code22 分钟前
布隆过滤器:判断“可能存在“和“一定不存在“
java·redis
兔小盈24 分钟前
多线程篇-(二)线程创建、中断与终止
java·开发语言·多线程
jnrjian29 分钟前
Library Cache Load Lock library cache pins are replaced by mutexes
java·后端·spring
abcnull38 分钟前
传统的JavaWeb项目Demo快速学习!
java·servlet·elementui·vue·javaweb
空中海40 分钟前
04 React Native工程化、质量、发布与生态选型
javascript·react native·react.js
risc12345643 分钟前
【lucene】PostingsEnum跟TermsEnum 的区别是啥?
java·lucene
AI砖家1 小时前
Claude Code Superpowers 安装使用指南:让 AI 编程从“业余”走向“工程化”
前端·人工智能·python·ai编程·代码规范