servlet处理跨域请求
前言
我们要做的是让在一个不在当前项目文件夹的前端页面发送Ajax请求,由一个远程servlet处理
代码
创建一个web工程
导入所需的jar-> servlet-api.jar fastjson.jar
编写前端页面
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="button" value="get" id='get'>
<input type="button" value="POST" id='post'>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
let data = {
name: '狗剩',
age: 20
}
$("#get").on('click', function() {
$.ajax({
type: 'get',
contentType:'application/json', //data发送方式
url: 'http://localhost/TestServlet', //发送跨域请求
data: data,
success: (res) => {
console.log("res:", res)
}
})
})
$("#post").on('click', function() {
$.ajax({
type: 'post',
contentType:'application/json',
url: 'http://localhost/TestServlet',
data: JSON.stringify(data),
success: (res) => {
console.log("res:", res)
}
})
})
</script>
</body>
</html>
- 配置一个Filter处理跨域请求
import javax.servlet.*;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Filter extends HttpFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//设置跨域请求
System.out.println("Filter 过滤器 执行 了");
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
//允许跨域主机地址
response.setHeader("Access-Control-Allow-Origin", "*");
//允许跨域方法
response.setHeader("Access-Control-Allow-Methods", "POST, DELETE,PUT,GET,OPTIONS");
//缓存时间
response.setHeader("Access-Control-Max-Age", "3600");
//允许跨域的请求头
response.setHeader("Access-Control-Allow-Headers", "*");
//是否携带cookie
response.setHeader("Access-Control-Allow-Credentials", "true");
//允许放行
chain.doFilter(request, response);
}
}
- 编写servlet处理请求
import com.alibaba.fastjson.JSON;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("请求已到达-> post");
request.setCharacterEncoding("utf-8");
ServletInputStream inputStream = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String str = null;
while((str = br.readLine()) != null) {
sb.append(str);
}
System.out.println(sb.toString());
//转为map集合
Map parseObject = JSON.parseObject(sb.toString(), Map.class);
System.out.println("parseObject:" + parseObject);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("请求已到达-> get");
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
System.out.println("name:" + name + ", age:" + age);
}
}
- 配置web.xml
<filter>
<filter-name>Filter</filter-name>
<filter-class>Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter</filter-name>
<!-- 配置需要进行跨域的接口 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<!--servlet名 -->
<servlet-name>Test</servlet-name>
<!-- servlet路径,包名.类名 -->
<servlet-class>TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet映射,必须与servlet-name同名 -->
<servlet-name>Test</servlet-name>
<!--浏览器中输入的访问该servlet的url-->
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
- 部署项目,启动服务器,测试跨域请求
结语
//需要注意的是前端Ajax请求的url
url: 'http://localhost/TestServlet'
//servlet的web.xml配置
<url-pattern>/TestServlet</url-pattern>
//localhost后面的地址和xml配置的地址一致即可
servlet处理跨域请求的更多相关文章
- 巧妙利用JQuery和Servlet来实现跨域请求
在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...
- JQuery和Servlet来实现跨域请求
在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...
- [转]Ajax跨域请求
一.编一个服务器端servlet @RequestMapping("/haha") @ResponseBody String haha(String haha, HttpServl ...
- 实现跨域请求jsonp方式
原理:http://madong.net.cn/index.php/2012/12/368/ 调用端: $.getJSON("http://192.168.220.85:8001/esb/a ...
- javascript跨域请求RESTful Web Service
跨域请求RESTful Web Service 当我们用js请求RESTful Web Service的时候,通常会出现跨域无法访问的问题,也就是无法正常得到我们要的值.jsonp是个解决问题的方法. ...
- 有关Ajax跨域请求的解决方案
前言 最近博主在赶项目进度.所以微信二次开发那边的博文一直没有更新.后续时间会慢慢记录这个学习历程的.来年公司要开发微信小程序.到时也会记录一下历程. 闲话少说,今天在工作中遇到了SpringMVC接 ...
- Spring Boot Web应用开发 CORS 跨域请求支持:
Spring Boot Web应用开发 CORS 跨域请求支持: 一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等CORS与JSONP相比 1. JSONP只能实现 ...
- SpringMVC处理跨域请求时的一个注意事项
由于公司对SpingMVC框架里面的东西进行了扩展,在配置SpringMVC时没有使用<mvc:annotation-driven>这个标签.而且是自己手动来配置HandlerMa ...
- spring mvc \ spring boot 允许跨域请求 配置类
用@Component 注释下,随便放个地方就可以了 package com.chinaws.wsarchivesserver.core.config; import org.springframew ...
随机推荐
- IO流之节点流(字节流)
节点流可以分为:字节节点流和字符节点流 数据源直接到程序的成为节点流(低级流) 字节流 输入流----InputStream InputStream 是输入流的抽象父类,若创建对象,需new它的子类 ...
- DOS 常用命令集
net use $">\\ip\ipc$Content$nbsp;" " /user:" " 建立IPC空链接 net use $"& ...
- python---replace函数
描述 Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次. 语法 replace()方法语法: st ...
- 01MATLAB导论
MATLAB语言的主要功能 数值计算 符号计算 图形绘制 程序流程控制 工具箱 课程的学习目标 要求理解MATLAB功能实现的数学背景与算法原理 掌握利用MATLAB进行问题求解的基本规律 能够利用M ...
- DC-6 靶机渗透测试
DC-6 渗透测试 冲冲冲,好好学习 . 收获总结写在文末. 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.136 网络模式:NAT 上来一波 netdiscove ...
- Python - 函数实战
前言 参考的是慕课网提供的实战,自己编码 http://www.imooc.com/wiki/pythonlesson1/function2.html 什么是模块化程序设计 在进行程序设计时将一个大程 ...
- 靶机BlackMarket
工具:nmap.dirbuster.dirb.sqlmap.cewl.crunch.hydra 涉及的漏洞:弱口令 垂直越权 SQL注入 CVE-2016-5195脏牛提权(内核竞争提权漏洞) fla ...
- Thunder DLL Hijacking
简记 原理基础啥的俺也不写了 1.寻找DLL 生成恶意dll文件 拿calc测试 2.放入 3.打开
- MySQL高级查询 & 事务机制
1.基础查询where 高级条件查询Where子句 SELECT empno,ename,sal,hiredate FROM t_tmp WHERE deptno=10 AND (sal+IFNULL ...
- Java LinkedList【笔记】
Java LinkedList[笔记] LinkedList LinkedList 适用于要求有顺序,并且会按照顺序进行迭代的场景,依赖于底层的链表结构 LinkedList基本结构 LinkedLi ...