为了安全起见,从 doGet 更改为 doPost



我有一个javascript函数,它使用Servlet doGet方法打开一个页面。 像在 Js 中:

var a  = "xxx?key=value";
window.open(a);

这里xxx被映射到AAA Servlet,它扩展了Http Servlet,在该Servlet中,逻辑是用doGet方法编写的。

但主要问题是,由于它是一个 get 方法,整个参数列表(我使用 Java 脚本发送的键值对(在 URL 中可见。我怎样才能将其更改为doPost以隐藏URL中的数据,以便它是安全的并且看不到URL中的数据。

也欢迎任何其他选择。

谢谢!

当您打开新选项卡或窗口时,您需要设置 URL(使用您的 get 参数(。 现在你有一个选择(使用 ajax(:

  1. 创建新页面或视图。
  2. 使用简单的<a target="_blank" href="url">打开新页面。
  3. 使用 javascript 函数向 servlet 发出异步请求 (ajax(。
  4. 用结果填充视图。

有一个这样的 servlet:

@WebServlet("/SampleServlet")
public class SampleServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String parameter1 = request.getParameter("param1");
String parameter2 = request.getParameter("param2");
//Process request, build response
//You can return your prefered data type (html, xml...)     
String jsonResponse = new Gson().toJson(new MyResponseObject(parameter1, parameter2));
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(jsonResponse);
}
}

和"新视图"(包括JQuery库(:

<html>
<head>
...
<script>
$(document).ready(function (){
$.ajax({
url: '/SampleServlet',              
type: "post",          
data: {
param1: "param1Value",
param2: "param2Value",
},
dataType: 'json', //or html, xml...      
success: function(data) {            
//populate page body with servlet response (json, html, etc)                 
}
});
});      
</script>
</head>
<body>
<!-- page content here -->
</body>
</html>

用某种事件(click,function等(包装以下javascript:

var param = {
key: "value"
};
$.post("someservlet", $.param(param), function(response) {
// ...response is here if needed 
});

在servlet中,你只是像平常一样得到值,

String key = request.getParameter("key");

如何使用 Servlet 和 Ajax?

最新更新