从 javascript 到 java servlet 的 HTTP POST

2023-11-26

如何通过 JavaScript 将参数 POST 到 Java Servlet?

这是我的 html 代码,它可以工作:

<div id="loginPanel">
<form action="/login" method="POST" class="form">
    <label>Login:</label>
    <input type="text" name="login" id="login">
    <label>Password:</label>
    <input type="text" name="password" id="password">
    <div id="loginLower">
        <input type="checkbox"><label memory="memory">Remember me</label>
        <input type="submit" value="Login">
    </div>
</form>
</div>

现在,我想对密码进行哈希处理并 POST 到 /login hashPassword,如下所示:

<form onsubmit="post()">
    <label>Login:</label>
    <input type="text" name="login" id="login">
    <label>Password:</label>
    <input type="text" name="password" id="password">
    <div id="loginLower">
        <input type="checkbox"><label memory="memory">Remember me</label>
        <input type="submit" value="Login">
    </div>
</form>

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/md5.js"></script>

<script>
function post(){
 var passhash = CryptoJS.MD5(document.getElementById("password").value);
//post to /login login and passhash
}
</script>

我尝试使用 AJAX、JQuery,但这些解决方案在 /login 方面存在问题,因为它们在浏览器中调用 localhost:8080/?login,而我想调用 Java Servlet: 网络.xml

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>pl./*...*/.LogoutServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login/*</url-pattern>
</servlet-mapping>

我承认我的回答在一定程度上是一种预感(因为我很久以前就写了它),但是对于 JSP,您通常应该将表单操作命名为配置的 servlet 的名称web.xml

我认为你的web.xml应该是这样的:

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>pl./*...*/.LogoutServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

并改变你的HTML对此:

<form action="LoginServlet" method="POST" class="form" id="loginForm">

对于 JavaScript 部分,如果您使用 jQuery 提交表单,您可以修改要发布的参数并省略密码的发布(因为如果您想将其作为哈希值发布,则不需要密码),请参阅下面的使用代码:

JavaScript(使用 jQuery):

// Attach a submit handler to the form
$("#loginForm").submit(function( event ) {

    // Stop form from submitting normally
    event.preventDefault();

    // Get some values from elements on the page:
    var $form = $( this );

    // We want to customize what we post, therefore we format our data
    var data = "login="+ $('#login').val() +"&passwordHash=" + CryptoJS.MD5($('#password').val());

    // For debugging purposes... see your console:
    // Prints out for example: login=myLoginName&passwordHash=a011a78a0c8d9e4f0038a5032d7668ab
    console.log(data);

    // The actual from POST method
    $.ajax({
        type: $form.attr('method'),
        url:  $form.attr('action'),
        data: data,
        success: function (data) {
            console.log("Hey, we got reply form java side, with following data: ");
            console.log(data);

            // redirecting example..
            if(data === "SUCCESS") {

               window.location.replace("http://stackoverflow.com");

            }

        }
    });

});    

最后,在 Java 端你需要doPost()捕获的方法login and passwordHash值等

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String login = request.getParameter("login");
    String password = request.getParameter("passwordHash");

   //
   // Do what ever you want with login and passwordHash here...
   //

   // Because we are using ajax we need to respond to it stating whether we can redirect or not to new location, see lines below

   // Content type of the response - You could also return application/json for example (which would be better in this case)
   response.setContentType("text/plain"); // Using text/plain for example
   response.setCharacterEncoding("UTF-8");

   // Change this as you like - it can also be url or anything else you want...
   response.getWriter().write("SUCCESS");

}

阅读有关使用 json 响应的更多信息:jsp 的 json 响应

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 javascript 到 java servlet 的 HTTP POST 的相关文章

随机推荐

  • Docker - 如何将文件从映像复制到主机?

    我的问题与这个问题将文件从容器复制到主机 我有一个 Dockerfile 它可以获取依赖项 从源代码编译构建工件并运行可执行文件 我还想复制构建工件 在我的例子中它是 zip由 生产sbt dist在 target 中 但我认为这个问题也适
  • 如何进行视野自动对焦?

    当用户打开页面时 我需要聚焦该字段 我不知道它是否会改变任何东西 但它位于我从 PHP 文件加载的模式窗口内 有简单的方法吗 使用 JavaScript 您可以实现此目的 document onload function document
  • 使用 Jasmine 在 JavaScript 中存根 WebSocket

    我尝试测试是否onmessage是一个适当的函数 这是一个测试 describe init address window function beforeEach function address ws test address window
  • MigLayout 推送 VS 增长

    这两个约束有什么区别 从文档中 PUSH 使组件所在的行和 或列随着 权重 而增长 GROW 设置组件相对于同一单元中的其他组件的增长程度 那么 主要的想法是缩小组件内部和外部的尺寸 重要的是要明白fill 列 行 grow push协同工
  • 当未指定默认命名空间时,函数 getMessageData 必须使用前缀[重复]

    这个问题在这里已经有答案了 我收到这个错误 WEB INF jsp account index jsp 6 0 函数 getMessageData 必须 当未指定默认名称空间时与前缀一起使用
  • 二叉树插入算法

    我最近完成了我正在从事的一个项目的二叉搜索树的实现 一切都很顺利 我学到了很多东西 然而 现在我需要实现一个常规的二叉树 由于某种原因 这让我感到困惑 我正在寻找一种方法来执行我的 InsertNode 功能 通常在 BST 中 您只需检查
  • 动态改变listview的分隔线高度?

    这个问题已被问到这里a link 我也想澄清一下问题 我有 10 个列表项Listview我想要拥有deviderheight每个列表项的不同之处就像第一个项目应该是setDividerheight 2 第二次setDividerheigh
  • Maven:在pom.xml中设置settings.xml位置?

    是否可以设置位置settings xml文件内的pom xml file 我知道你可以通过命令行输入来做到这一点mvn s location of settings xml 但我想知道是否可以将其设置在pom xml所以我不必继续通过命令行
  • 如何使用媒体源 API 将两个视频文件数据附加到源缓冲区?

    我有两个视频 名称为 v11 webm 和 v12 webm 我想要的是这两个视频应该无缝运行 没有任何间隙 我正在遵循将数据附加到源缓冲区的媒体源 api 方法 我指的是对此给出的演示link 我修改了该示例并删除了对视频进行分块的部分
  • 平滑算法

    我编写了这段代码来平滑曲线 它需要一个点旁边的 5 个点并将它们相加并求平均值 Smoothing void smoothing vector
  • 在 Google 地图上移动并显示驾驶摄像头视图

    我已经通过谷歌地图路由添加了当前位置 Routing routing new Routing Builder travelMode Routing TravelMode DRIVING key getResources getString
  • 对“initscr”Ncurses 的未定义引用

    我正在尝试编译我的项目并使用 lib ncurse 当编译器链接文件时我遇到了一些错误 这是我在 Makefile 中的标志行 W Wall Werror Wextra lncurses 我已经包含了 ncurses h 一些布局 prom
  • MySQL UPDATE 查询,其中 id 最高并且字段等于变量

    我正在尝试构建一个 MySQL 查询 该查询将更新表中 id 最高且名为 idSession 的字段等于 65 的行 它看起来像这样 UPDATE History SET state 0 WHERE id SELECT MAX id FRO
  • Windows.Security.Cryptography 和 Windows Phone 8 SDK?

    今天我安装了新的Windows Phone 8 SDK w8phone SDK 尝试包括我的一些基类 来自 Windows 8 应用程序 他们说相同的核心 但是哎呀 no Windows Security Cryptography 我用的是
  • PHP-时间减去时间到分钟

    在 php 中我有两次 11 00 00 和 12 45 00 我想以分钟为单位得出它们之间的差异 在本例中为 105 分钟 最好的方法是什么 谢谢你 干得好 strtotime 12 45 00 strtotime 11 00 00 60
  • 为什么变量的寿命不够长?

    考虑这个函数 它应该返回给定的文件扩展名Path pub fn get extension lt a gt path a Path gt Option lt a str gt let path str path as str unwrap
  • 使用 VBA 宏取消选择 Excel 工作簿中的所有复选框

    我有一本包含 100 多个复选框的工作簿 他们是表单控件复选框 我想一次性取消选择它们 这就是将它们设置为 false Sub clearcheck ActiveSheet CheckBoxes Value False End Sub 这适
  • 用Python 3.1制作一个可移植的(exe)?

    有没有办法为 python 应用程序制作可移植 独立的 exe 我读过有关 p2exe 的内容 但它不支持最新版本 我不愿意使用 2 6 因为我宁愿保留最新版本 也不愿担心 2 6 过时后会出现不兼容问题 cx freeze 对我有用 这是
  • 连接到 FCM 的应用程序未收到来自 AWS SNS 的通知

    我已将 Android 应用连接到 Google Firebase 云消息服务 FCM 如下所示本指南 我已经关注了这个答案设置 FCM 和之间的连接AWS SNS 我可以成功接收来自FCM控制台但不是来自AWS SNS 控制台 消息邮寄状
  • 从 javascript 到 java servlet 的 HTTP POST

    如何通过 JavaScript 将参数 POST 到 Java Servlet 这是我的 html 代码 它可以工作 div div