【石家庄校区】阶段bug汇总
bug-1 创建人 刘瑞佳
问题标题 运行异常
问题分类 浏览器报500异常
一级话题 org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
附件[Java] 纯文本查看 复制代码
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
public User check_login(User loginuser) { String sql = "select * from login_user where username = ? and password = ?"; User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginuser.getUsername(), loginuser.getPassword());
return user;
} 问题答案 问题分析:
在数据库操作类Dao类中,JdbcTemplate类中的queryForObject方法由于查询不到数据,抛出DataAccessException异常,导致程序终止。浏览器报出500异常。
问题解决方法:
在UserDao类中将抓取异常。即放入trycatch代码块。
[AppleScript] 纯文本查看 复制代码 try{
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginuser.getUsername(), loginuser.getPassword());
return user;
}catch (Exception e){
return null;
}
在方法能查询到数据并封装成对象时才将对象返回,抓取不到则返回null
bug-2
创建人 刘瑞佳
问题标题 运行时异常
问题分类 浏览器页面跳转之后不能正常访问到服务器传输回的数据
一级话题 浏览器报404及500错误
问题补充 500错误异常:java.io.FileNotFoundException: D:\IdeaProjects\JavaWeb\out\artifacts\day15Response_war_exploded\九尾.jpg (系统找不到指定的文件。)
404错误异常:找不到与以下网址对应的网页:http://localhost/downloadServlet?filename=九尾.jpg
[Java] 纯文本查看 复制代码 public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取路径中请求参数的值,就是图片的名称
String filename = request.getParameter("filename");
// 获取Context对象,来获取图片的服务器路径
ServletContext context = this.getServletContext();
String realPath = context.getRealPath(filename);
// 根据路径创建字节输入流对象,读取文件使用
FileInputStream fis = new FileInputStream(realPath);
// 设置响应头属性,在点击之后出现附件弹窗,指定MIME类型
filename = DownLoadUtils2.getFileName(request.getHeader("user-agent"),filename);
response.setHeader("content-disposition", "attachment;filename=" + filename);
response.setHeader("content-type", filename);
// 读取文件并输出到浏览器
byte[] bytes = new byte[1024 * 8];
int len = 0;
// 获取输出流对象
ServletOutputStream sos = response.getOutputStream();
while ((len = fis.read(bytes)) != -1) {
sos.write(bytes,0,len);
}
fis.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
[HTML] 纯文本查看 复制代码 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下载</title>
<script>
window.onload=function () {
var image = document.getElementById("image");
image.onclick=function () {
image.href="/downloadServlet?filename=九尾.jpg"
}
}
</script>
</head>
<body>
<a href="/downloadServlet" id="image">图片1</a>
</body>
</html>
问题分析:
404错误是由于浏览器请求地址URL错误导致的。所以检查html页面代码。问题出现在href属性值中,由于该请求是由客户端浏览器向服务器发送的请求,所以在路径中应加上虚拟目录。
500错误是由于服务器代码错误导致的异常,从异常的详情中可以看到是由于程序找不到指定的文件从而抛出的FileNotFoundException。所以去查找文件的真是路径,最终发现图片文件是在image文件夹下。而代码中没有获取到image目录,所以在使用Context对象获取文件的服务器路径时,在文件名前添加一个image目录,就可以成功找到该文件。
问题解决方法:
String realPath = context.getRealPath("/image/"+filename);
<a href="/day15/downloadServlet" id="image">图片1</a>
image.href="/day15/downloadServlet?filename=九尾.jpg"
|