A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【石家庄校区】阶段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"



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马