基于mybatis设计简单信息管理系统2

1、空指针异常

public class CanvasServlet extends HttpServlet {

    private CanvasService canvasService;

    private CategoryService categoryService;

    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        if("/canvas/list.do".equals(req.getServletPath())){

            //查询

            String categoryIdStr = req.getParameter("categoryId");

            List<Canvas> canvases=null;

            if(categoryIdStr==null){

                canvases = canvasService.getCanvases(1, 20);//由登录界面进入

            }else {

                Integer categoryId= Integer.valueOf(categoryIdStr);

                canvases = canvasService.getCanvasesByCategoryId(categoryId, 1, 20);//点击分类查询

            }

            List<Category> categories = categoryService.getCategory();

            req.setAttribute("canvases",canvases);

            req.setAttribute("categories",categories);

            req.getRequestDispatcher("/WEB-INF/view/biz/canvas_list.jsp").forward(req,resp);

        }else if ("/canvas/addPrompt.do".equals(req.getServletPath())){

            //转跳进添加页面

            List<Category> categories = categoryService.getCategory();

            req.setAttribute("categories",categories);//分类下拉列表

            req.getRequestDispatcher("/WEB-INF/view/biz/add_canvas.jsp").forward(req,resp);

当我把list集合放在方法外面的时候报空指针异常,改到如上位置则没有问题

2、

req.getRequestDispatcher("/WEB-INF/views/biz/canvas_list.jsp").forward(req,resp);

找不到指定页面

而用户不能访问WEB-INF目录下的文件,只有程序内部转发的时候才能转发到WEB-INF下的JSP。

3、

Servlet.service() for servlet jsp threw exception

javax.el.PropertyNotFoundException: Property 'name' not found on type java.lang.String

原因:jsp在接收requestcontext域对象时候没有使用el表达式,修改之后正确显示

 

4、session第二次打开会话则没有了刚才的登录信息

原因:session会话中session默认保持30分钟,但是cookie在第二次打开会话时就已经丢失,所以需要设置cookie持久化到磁盘并设置保存时间,代码如下:

Cookie cookie = new Cookie("username",username);  //"JSESSIONID"为固定值

cookie.setPath("/*");

cookie.setMaxAge(30*60);

response.addCookie(cookie);

5、

Error updating database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [category, param1]

问题:mybatis引入的时候没有找到实体对应的数据,语法错误,因为参数只做了category,其中的元素需要用category找到,修改之后为:

@Insert("insert into category(name,createName,createTime,updateTime,description) " +

"values(#{category.name},#{category.createName},#{category.createTime},#{category.updateTime},#{category.description})")

void addCategory(@Param("category") Category category);

6、用filter添加全局的乱码处理之后用post接收到的表单数据还是乱码

 

原因:在提交表单时,浏览器默认使用编码方式不是utf-8来发送请求,而编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.setCharacterEncoding("utf-8")对请求进行统一编码,

http://www.blogjava.net/yaya/archive/2008/10/05/232513.html

但是表单还是乱码,问题不在这里

问题是fileupload默认解码为ISO-8859-1,filter并不能解决fileupload的乱码

解决方法就是这段代码,其中item是fileupload中的FileItem:

String value = new String(item.getString().getBytes("ISO-8859-1"), "UTF-8") ;

这个解决方法不具有通用性,换个环境很可能就不能用了,更好的办法:

获取form中字段(即除了上传的文件以外的那些元素)是中文,如果出现了乱码,使用了如下代码,解决了乱码的问题

String value = item.getString("UTF-8");

博客:http://www.cnblogs.com/qrlozte/p/3176545.html

小tips:

Surround with快捷键:

猜你喜欢

转载自www.cnblogs.com/thyHome/p/9030844.html
今日推荐