今天写了个servlet出现的几个问题记录一下。
下面所说不是servlet和jsp相互传递。
一共三个问题:
1、出现postman使用post请求传递json数据时,接收的数据全部为null。
2、代码执行完成,没有报错且数据成功插入数据库,但是浏览器却出现如下错误
(No ‘Access-Control-Allow-Origin’ header is present on the requested resource)
3、使用request.setAttribute向html返回信息,是根本传递不过数据的。
查了一下好像是因为request数据所保存的有效期只有一次请求。我们想要将数据传递出去,下面必须要转发到需要数据的页面才能把数据带过去吧。(个人见解只是猜的,大家还是自行查资料。)
问题一
下面先给上单独问题的解决办法,在给上全部代码。
第一个问题接收数据全部为null,这段代码是在网上找的一个大佬的。
链接:https://www.aliyun.com/jiaocheng/772077.html
代码:
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),\"utf-8\")); //将数据使用流进行传递
StringBuffer strb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) { //遍历数据
strb = strb.append(line); //数据暂存StringBuffer
}
HashMap map = JSON .parse (strb.toString(), HashMap.class);
// 使用阿里的fastjson jar包处理json数据(这里是用map进行接收的,你也可以定义vo层容器类接收)
String name = map.get(\"name\").toString();
String email = map.get(\"email\").toString();
String phone = map.get(\"phone\").toString();
String demend = map.get(\"demend\").toString();
好了这样就可以接收到参数了,说明一下我当时使用postman接收不到参数,但是前端调用时发现使用上面的方法接收不到数据,但是使用之前的request.getParameter(\"\"); 却可以拿到数据……。暂且留下备用吧!
问题二
代码执行完成数据存入数据库且控制台并没有出现错误信息。但是浏览器出现了(No ‘Access-Control-Allow-Origin’ header is present on the requested resource)错误。说是跨域问题。
附链接:https://blog.csdn.net/qq_39403545/article/details/82116121
这个代码等最后一起上。
问题三
使用request.setAttribute向html返回信息,传递不过去。
大佬链接:https://blog.csdn.net/yanghan1222/article/details/78447231
下面代码:
Gson gson = new Gson();
String str = gson.toJson(flag); //gson.toJson(flag); 将 flag转换为json字符串
response.setCharacterEncoding(\"UTF-8\");
response.setContentType(\"application/json; charset=utf-8\");
PrintWriter writer = response.getWriter(); //通过response获得一个输出流
writer.append(str);
下面上全部的代码了
@WebServlet(\"/Site\")
public class Site extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/* BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),\"utf-8\"));
StringBuffer strb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
strb = strb.append(line);
}
HashMap map = JSON .parse (strb.toString(), HashMap.class);
String name = map.get(\"name\").toString();
String email = map.get(\"email\").toString();
String phone = map.get(\"phone\").toString();
String demend = map.get(\"demend\").toString();*/
//----------------------------------------上面被我注掉了,根据情况选择使用哪一种方法取值-----------------------------------------------------
String name = request.getParameter(\"name\");
String email = request.getParameter(\"email\");
String phone = request.getParameter(\"phone\");
String demend = request.getParameter(\"demend\");
boolean flag = false;
if(null != name || null != phone) {
String sql=\"INSERT INTO site_need(name,email,phone,demend,time)VALUES(?,?,?,?,?)\";
Connection conn=null;
PreparedStatement ps=null;
try {
conn=ConnUtil.getConnection();
ps=conn.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2,email);
ps.setString(3, phone);
ps.setString(4,demend);
ps.setTimestamp(5, new Timestamp(System.currentTimeMillis()));
ps.executeUpdate();
flag = true;
} catch (Exception e) {
e.printStackTrace();
}finally{
ConnUtil.closeConnection(ps, conn);
}
}
Gson gson = new Gson();
String str = gson.toJson(flag);
response.setCharacterEncoding(\"UTF-8\");
response.setContentType(\"application/json; charset=utf-8\");
PrintWriter writer = response.getWriter();
writer.append(str);
}
}
请求头过滤代码
public class CorsFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest)servletRequest;
String origin = request.getHeader(\"Origin\");
response.setHeader(\"Access-Control-Allow-Origin\", origin);
response.setHeader(\"Access-Control-Allow-Methods\", \"POST, GET, OPTIONS, DELETE\");
response.setHeader(\"Access-Control-Max-Age\", \"3600\");
response.setHeader(\"Access-Control-Allow-Headers\", \"x-requested-with,Authorization\");
response.setHeader(\"Access-Control-Allow-Credentials\", \"true\");
String method = request.getMethod();
if(method.equalsIgnoreCase(\"OPTIONS\")){
servletResponse.getOutputStream().write(\"Success\".getBytes(\"utf-8\"));
}else{
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
web.
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>net.qhkj.site.util.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>corsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>site</servlet-name>
<servlet-class>net.qhkj.site.controller.Site</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>site</servlet-name>
<url-pattern>/site</url-pattern>
</servlet-mapping>
继续阅读与本文标签相同的文章
使用java+jsoup抓取网页数据
游戏不能学习?有这几款游戏,历史课都不用上了
-
GSMA首席执行官洪曜庄:5G时代中国在引领
2026-05-14栏目: 教程
-
猎户星空CEO傅盛:现在是AI发展最好时期,家庭服务机器人前景可期
2026-05-14栏目: 教程
-
5G远程驾驶和微公交首秀互联网大会
2026-05-14栏目: 教程
-
学宏程序编程,这些知识必不可少!
2026-05-14栏目: 教程
-
华为准备卖出“落后”的5G,多家美企极力竞争!任正非格局太大!
2026-05-14栏目: 教程
