gpt4 book ai didi

java - 从 javascript 到 java servlet 的 HTTP POST

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:19 25 4
gpt4 key购买 nike

如何通过 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 方面存在问题,因为当我想调用 Java Servlet 时,它们会在浏览器中调用 localhost:8080/?login:网页.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,您通常应该将表单操作命名为 web.xml 中配置的 servlet 的名称>

我认为你的 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() 方法来捕获 loginpasswordHash 值等。

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 响应的更多信息:json response with jsp

关于java - 从 javascript 到 java servlet 的 HTTP POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com