跨域问题
1.设置请求头
代码:
b_prokect
<input type="text" name="username" id="username"><input type="button" value="提交" name="button" id="button">
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script>
$(function(){
$("#button").click(function(){
//获取文本框值
var username=$("#username").val();
$.ajax({
url:"http://localhost:8080/a/AServlet",
data:{"username":username},
type:"post",
success:function (result) {
alert(result);
}
})
})
});
</script>
a_prokect—Aservlet
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收数据
String username = req.getParameter("username");
System.out.println("接收的数据"+username);
//响应结果
resp.getWriter().write("success");
//设置请求头
resp.setHeader("Access-Control-Allow-Origin","*");
}
二.JSONP解决跨域问题
JSONP实现原理:动态加载<script>
标签,利用src属性进行服务器资源的访问,但是只支持Get请求
1.在我们的Ajax请求当中,需要以JSONP方式请求(通过jquery手段,动态生成sript)
- jsonp:“代表的时前台传给后台,后台再传递给你 jsonpCallBack”
- JSONP需要以Get请求发送 ?username=zhangsan
- 再AJAX请求当中需要将返回的数据格式指定为jsonp
$("#button").click(function(){
//获取文本框值
var username=$("#username").val();
$.ajax({
url:"http://localhost:8080/a/AServlet?username="+username,
type:"post",
jsonp:"jsonpCallBack",//回调函数
//再AJAX请求当中需要将返回的数据格式指定为jsonp
dataType:"jsonp",
success:function (result) {
alert(result);
},
error:function () {
alert("系统错误")
}
})
})
function jsonpCallBack(result) {
alert(result);
}
- 后台需要做的事情:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收数据
String username = req.getParameter("username");
System.out.println("接收的数据"+username);
//ajax接收
String jsonpCallBack = req.getParameter("jsonpCallBack");
//转JSON格式字符串
String success = JSON.toJSONString("success");
System.out.println(jsonpCallBack);
//响应结果
resp.getWriter().write(jsonpCallBack+"("+success+")");
//设置请求头
/* resp.setHeader("Access-Control-Allow-Origin","*");*/
}
3.使用HTTPClient解决:就是不通过浏览器发送请求
B工程的页面发送的Ajax没有办法请求到A工程,因为浏览器会拦截,走后台,后台通过HTTPClient请求请求到A工程,获取到响应结果
B工程的页面发送的Ajax没有办法请求到A工程,因为浏览器会拦截,走后台,后台通过HTTPClient请求请求到A工程,获取到响应结果
1.B工程的Bindex.jsp页面请求到B工程的Servlet
$("#button").click(function () {
//获取到文本框的值
var username=$("#username").val();
//发送Ajax请求www.a.com的A工程
$.ajax({
url:"BServiet?username="+username,
type:"GET",
success:function (result) {
alert(result);
},
error:function () {
alert('系统错误~')
}
});
});
2.B工程的BServlet去模拟HTTP请求到A工程
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//内部通过HTTPClient进行转发
//构建一个连接
System.out.println("222222222222");
CloseableHttpClient client = HttpClients.createDefault();
//构建请求
HttpGet get=new HttpGet("http://localhost:8080/a/AServlet?username="+req.getParameter("username"));
//发送请求
CloseableHttpResponse httpResponse = client.execute(get);
//获取返回结果
String result = EntityUtils.toString(httpResponse.getEntity());
//将A工程响应结果给页面
resp.getWriter().write(result);
}
3.A工程处 理请求
String username=req.getParameter("username");
System.out.println("接受的数据:"+username);
//2.响应结果
resp.getWriter().write("success");
2.防止表单重复提交
1.网络延迟,再网络延迟时间内,频繁的提交表单
只能提交一次,监控表单的提交事件,通过一个boolean类型的变量来区分已经点击过还是没有点击,如果已经点击过,表单就不提交,没有点击过再提交
from.jsp
<body>
<form action="fromService" onsubmit="return fromService()" method="post">
<input type="text" id="username" name="username"><input type="button" value="提交">
</form>
</body>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script>
function FromService() {
var fol=false;
//false 代表没有提交 true代表提交过
if(!fol){
fol=true;
return true;
}else{
return false;
}
}
</script>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("11");
String username = req.getParameter("username");
System.out.println("接收的数据为"+username);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
resp.getWriter().write("success");
}
三.防止XSS攻击:大部分浏览器都已经解决了该问题
脚本注入
防止XSS攻击:后台创建Filter过滤器,过滤所植入的脚本数据<script>,使用正则表达式匹配提交数据的格式
大部分浏览器都已经解决了该问题
脚本注入
防止XSS攻击:后台创建Filter过滤器,过滤所植入的脚本数据
来源:CSDN
作者:TOWFOUR
链接:https://blog.csdn.net/qq_43868329/article/details/104196013