获取浏览器提交的参数

获取浏览器提交的参数

通过一个登录功能,学习 Servlet 如何获取从浏览器提交的账号密码。

创建 login.html

在 web 上右键 -> New -> File,创建一个 login.html 文件,然后添加一个 form 表单元素。

  • action="login" 标题会提交到 login 路径,login 路径会映射到 LoginServlet
  • method="post",post 方式提交的密码信息不会在浏览器地址栏显示

账号和密码使用 input 元素.在 Servlet 端为了区分账号和密码,要给这两个 input 元素的 name 属性分别叫做 usernamepassword

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>登录页面</title>
</head>
<body>
  <form action="login" method="post">
    账号: <input type="text" name="username" /> <br />
    密码: <input type="password" name="password" /> <br />
    <input type="submit" value="登录" />
  </form>
</body>
</html>

创建 LoginServlet

HelloServlet 操作一样创建一个 LoginServlet

浏览器中的 formmethodpostLoginServlet 需要提供一个 doPost 方法。

doPost 方法中,通过 request.getParameter 根据 name 取出对应的账号和密码。然后用 System.out.println() 打印在控制台,这里并没有在网页上输出。

import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
public class LoginServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
  
        System.out.println("username:" + username);
        System.out.println("password:" + password);
    }

}

映射 LoginServlet 到路径 “/login”

在 web.xml 中新增映射。

<?xml version="1.0" encoding="UTF-8"?>
<web-app>

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>   

</web-app>

在页面提交数据

首先重启 Tomcat,然后访问页面 http://127.0.0.1/xxx/login.html。输入账号密码,点击提交,然后在 Tomcat 的控制台窗口,就可以看到提交的账号和密码。

如果要在浏览器上要看到 Tomcat 的反馈数据,需要通过响应来实现。

<think>我们正在使用FineReport FVS(FineReport Visualization Suite)来构建可视化大屏。现在需要获取网页URL中的参数(例如:http://domain.com?param1=value1&param2=value2),以便在FVS模板中使用这些参数值。 在FineReport中,获取URL参数通常通过JavaScript实现。FVS环境下,我们可以利用FineReport提供的JavaScript API来获取URL参数。 步骤: 1. 在FVS模板的初始化后事件中编写JavaScript代码。 2. 使用JavaScript的URLSearchParams对象或者解析window.location.search来获取参数。 3. 将获取到的参数值赋给FVS的参数控件或者直接用于后续逻辑。 具体方法如下: 方法一:使用URLSearchParams(现代浏览器支持) ```javascript // 获取当前URL的查询参数 const urlParams = new URLSearchParams(window.location.search); const paramValue = urlParams.get('paramName'); // 替换paramName为你的参数名 // 将参数值设置到FVS的参数控件中 if (paramValue) { // 获取参数控件对象 var paramWidget = _g().getParameterContainer().getWidgetByName("paramWidgetName"); // 设置参数控件的值 paramWidget.setValue(paramValue); // 如果需要,可以触发参数控件的编辑后事件(根据需求) // paramWidget.fireEvent("afterEdit"); } ``` 方法二:传统解析方法(兼容旧浏览器) ```javascript function getQueryParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return decodeURIComponent(r[2]); return null; } var paramValue = getQueryParam('paramName'); if (paramValue) { var paramWidget = _g().getParameterContainer().getWidgetByName("paramWidgetName"); paramWidget.setValue(paramValue); } ``` 注意: 1. 如果参数值中包含特殊字符,请确保使用decodeURIComponent进行解码。 2. 上述代码需要放在FVS模板的“初始化后事件”中(在FVS编辑界面,点击画布空白处,在右侧属性面板选择“事件”->“初始化后”)。 3. 需要将`paramWidgetName`替换为你在FVS中设置的参数控件的实际名称。 另外,如果不需要通过参数控件,而是直接使用参数值来设置其他组件的属性(如隐藏Tab页),也可以直接在初始化后事件中处理。 例如,根据URL参数隐藏Tab页: ```javascript // 获取参数值 const urlParams = new URLSearchParams(window.location.search); const shouldHideTab = urlParams.get('hideTab'); if (shouldHideTab === 'true') { // 获取Tab组件 var tabWidget = this.options.form.getWidgetByName('tabpane0'); tabWidget.setTabVisible('Tab20', false); } ``` 引用说明: - 在FVS中,我们通过JavaScript API与组件交互[^4]。 - 普通报表中获取URL参数的方法类似,但FVS环境下同样适用[^2]。 注意事项: - 如果URL参数用于数据查询,建议在设置参数控件值后,再调用数据刷新方法(如_g().parameterCommit())提交参数,但FVS中通常参数控件与图表等已绑定,设置值后会自动刷新。 相关问题: 1. 如何在FVS中实现多个URL参数的传递与使用? 2. 如何将URL参数传递给FVS中的图表数据查询? 3. FVS模板中如何防止URL参数被篡改? 4. 在移动端使用FVS时,获取URL参数的方法是否相同?[^1] 5. 如何将URL参数的值显示在FVS的文本组件中?</think>在 FineReport FVS 中获取网页路径参数(URL 参数)可通过 JavaScript 实现,以下是完整解决方案: --- ### 📌 获取 URL 参数的 JavaScript 方法 ```javascript // 方法1:使用 URLSearchParams(推荐,现代浏览器支持) const urlParams = new URLSearchParams(window.location.search); const paramValue = urlParams.get('paramName'); // 替换为实际参数名 // 方法2:传统解析方法(兼容旧浏览器) function getURLParam(name) { const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); const r = window.location.search.substr(1).match(reg); return r != null ? decodeURIComponent(r[2]) : null; } const paramValue = getURLParam('paramName'); ``` --- ### 🔧 FVS 中集成 URL 参数的步骤 #### 1. **在 FVS 初始化事件中获取参数** ```javascript // 在 FVS 模板的"初始化后事件"中添加 _g().loadContainerAsync(function() { const urlParams = new URLSearchParams(window.location.search); const reportParam = urlParams.get('report_id'); // 示例参数 // 设置到 FVS 参数控件 const paramWidget = _g().getParameterContainer().getWidgetByName("localParam"); if (paramWidget && reportParam) { paramWidget.setValue(reportParam); paramWidget.fireEvent("afterEdit"); // 触发关联刷新 } }); ``` #### 2. **参数传递到 SQL 数据集** 在 SQL 查询中使用 `${paramName}` 语法: ```sql SELECT * FROM sales_report WHERE report_id = ${localParam} -- 使用 FVS 参数控件值 ``` #### 3. **参数传递到组件** ```javascript // 在图表/表格的"刷新前事件"中 const urlParams = new URLSearchParams(window.location.search); this.options.parameters = { ...this.options.parameters, dynamicParam: urlParams.get('chart_type') // 添加URL参数 }; ``` --- ### 🌐 完整 URL 示例 假设需要传递 `report_id=2023Q4` 和 `theme=dark`: ``` http://your-domain.com/fvs.html?report_id=2023Q4&theme=dark ``` 在 JavaScript 中获取: ```javascript const reportId = new URLSearchParams(location.search).get('report_id'); // "2023Q4" const theme = new URLSearchParams(location.search).get('theme'); // "dark" ``` --- ### ⚠️ 注意事项 1. **参数安全** ```javascript // 防止XSS攻击 const safeParam = encodeURIComponent(urlParams.get('userInput')); ``` 2. **中文参数处理** ```javascript // 解码中文参数 const city = decodeURIComponent(urlParams.get('city')); ``` 3. **移动端兼容** 移动端预览模式[^1]同样支持 `window.location.search` 4. **参数默认值** ```javascript const pageSize = urlParams.get('size') || 20; // 默认值20 ``` --- ### 🔄 与其他功能联动 #### 结合 Tab 组件隐藏 ```javascript // 根据URL参数隐藏Tab页 const tabWidget = this.options.form.getWidgetByName("mainTab"); const hideTab = urlParams.get('hide_tab'); if (hideTab === "financial") { tabWidget.setTabVisible("FinancialTab", false); // [^4] } ``` #### 结合导出功能 ```javascript // 自定义导出按钮携带URL参数 document.getElementById('exportBtn').onclick = function() { const urlParam = new URLSearchParams(location.search).get('exportType'); _g().exportReport({ format: 'PDF', parameters: { exportMode: urlParam } }); }; ``` --- ### 📊 调试技巧 ```javascript // 打印所有URL参数 console.log(Array.from(urlParams.entries())); // 输出示例: // [ ['report_id', '2023Q4'], ['theme', 'dark'] ] ``` --- ### 🔍 相关问题 1. 如何将 FVS 中的参数值动态更新到 URL? 2. 使用 URL 参数时如何避免 FVS 模板重复刷新? 3. 如何实现带 URL 参数的 FVS 模板分享链接? 4. URL 参数传递敏感数据时如何加密?[^2] 5. 移动端扫码预览时如何自动附加设备参数到 URL?[^1] > 提示:FVS 的组件独立性[^4]使其比普通报表更易实现参数集成,无需担心单元格间相互影响问题。 [^1]: 移动端预览特性 [^2]: Web 集成与安全 [^4]: FVS 组件独立性优势
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值