【转】java.lang.StackOverflowError
2015-12-07 16:48
369 查看
/article/2300039.html
出现一个java.lang.StackOverflowError异常。弄了半天,又是问高手,又是查资料的。最后发现,解决问题啦!特记录下来!
StackOverflowError是由于当前线程的栈满了 ,也就是函数调用层级过多导致。
比如死递归。
以上是网上查阅的资料。
看懂后,我发现我的项目用的servlet技术,讲doGet()方法添加方法this.doPost()得到解决。
思考:应该是我在实现分页的时候,在点击上一页,下一页时,调用servlet函数后再调回本页面是,出现循环。
result.jsp
[html] view plaincopy
<%
int pageNow = Integer.parseInt((String) request
.getAttribute("pageNow"));
if (pageNow != 1) {
out.println("<a href=Db_sel_Servlet?dbversion=Mysql&pageNow="
+ (pageNow - 1) + ">上一页</a>");
}
String s_pageCount = (String) request.getAttribute("pageCount");
int pageCount = Integer.parseInt(s_pageCount);
for (int i = 1; i <= pageCount; i++) {
out.println("<a href=Db_sel_Servlet?dbversion=Mysql&pageNow=" + i
+ ">[" + i + "]</a>");
}
if (pageNow != pageCount) {
out.println("<a href=Db_sel_Servlet?dbversion=Mysql&pageNow="
+ (pageNow + 1) + ">下一页</a>");
}
%>
Db_sel_Servlet.java
[java] view plaincopy
public class Db_sel_Servlet extends HttpServlet {
public String flag;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
String s_pageNow=req.getParameter("pageNow");
int pageNow=Integer.parseInt(s_pageNow);
System.out.println("DB_sel_Servlet.java---->>>pageNow:"+pageNow);
flag = req.getParameter("dbversion");
System.out.println("DB_sel_Servlet---->>" + flag);
File file = new File("D:\\workspace\\version");
FileUtil.WriteFile(file, flag);
UserDaoImpl userDaoImpl = new UserDaoImpl();
List<User> user_list = userDaoImpl.getUsersByPage(pageNow);
int pageCount=userDaoImpl.getPageCount();
System.out.println("DB_sel_Servlet.java---->>>pageCount:"+pageCount);
req.setAttribute("result", user_list);
req.setAttribute("pageCount", pageCount+"");
req.setAttribute("pageNow",pageNow+"");
System.out.println(user_list);
// 清空文件内的内容
FileUtil.EmptyFile(file);
// 跳转到用户管理页面
req.getRequestDispatcher("result.jsp").forward(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
出现一个java.lang.StackOverflowError异常。弄了半天,又是问高手,又是查资料的。最后发现,解决问题啦!特记录下来!
StackOverflowError是由于当前线程的栈满了 ,也就是函数调用层级过多导致。
比如死递归。
以上是网上查阅的资料。
看懂后,我发现我的项目用的servlet技术,讲doGet()方法添加方法this.doPost()得到解决。
思考:应该是我在实现分页的时候,在点击上一页,下一页时,调用servlet函数后再调回本页面是,出现循环。
result.jsp
[html] view plaincopy
<%
int pageNow = Integer.parseInt((String) request
.getAttribute("pageNow"));
if (pageNow != 1) {
out.println("<a href=Db_sel_Servlet?dbversion=Mysql&pageNow="
+ (pageNow - 1) + ">上一页</a>");
}
String s_pageCount = (String) request.getAttribute("pageCount");
int pageCount = Integer.parseInt(s_pageCount);
for (int i = 1; i <= pageCount; i++) {
out.println("<a href=Db_sel_Servlet?dbversion=Mysql&pageNow=" + i
+ ">[" + i + "]</a>");
}
if (pageNow != pageCount) {
out.println("<a href=Db_sel_Servlet?dbversion=Mysql&pageNow="
+ (pageNow + 1) + ">下一页</a>");
}
%>
Db_sel_Servlet.java
[java] view plaincopy
public class Db_sel_Servlet extends HttpServlet {
public String flag;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
String s_pageNow=req.getParameter("pageNow");
int pageNow=Integer.parseInt(s_pageNow);
System.out.println("DB_sel_Servlet.java---->>>pageNow:"+pageNow);
flag = req.getParameter("dbversion");
System.out.println("DB_sel_Servlet---->>" + flag);
File file = new File("D:\\workspace\\version");
FileUtil.WriteFile(file, flag);
UserDaoImpl userDaoImpl = new UserDaoImpl();
List<User> user_list = userDaoImpl.getUsersByPage(pageNow);
int pageCount=userDaoImpl.getPageCount();
System.out.println("DB_sel_Servlet.java---->>>pageCount:"+pageCount);
req.setAttribute("result", user_list);
req.setAttribute("pageCount", pageCount+"");
req.setAttribute("pageNow",pageNow+"");
System.out.println(user_list);
// 清空文件内的内容
FileUtil.EmptyFile(file);
// 跳转到用户管理页面
req.getRequestDispatcher("result.jsp").forward(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
相关文章推荐
- Java 字符串对日期的格式化
- Eclipse快捷键
- java中的FileWriter类
- java基础-generics 泛型
- java中Collections.sort排序详解
- Mybatis generator eclipse插件从数据库获取注释
- 【原创】java NIO selector 学习笔记 一
- 用javabean写一个查询系统
- MyEclipse快捷键大全(简单粗暴)
- Spring连接数据库的几种常用的方式
- Java分布式事务-转载
- Java多线程简单介绍-1
- Java 8 Stream Parallel要点
- spring同时集成遇到多个properties资源文件加载的问题
- debug jdk source can't watch variable what it is
- java笔记-构造函数
- java集合
- 第二篇 虚拟机性能监控与故障处理工具(JDK的命令行工具/JDK的可视化工具)
- Java常见异常总结
- java.io.IOException: tmpFile.renameTo(classFile) failed