自己动手写crud+分页 出现问题

问题

  1. 我遇到了很多路径问题,总结一下有
    1. request.getRequestDispatcher( )转发路径
  2. 把mysql limit句子的两个参数作用弄混淆了,第一个表示偏移量,第二个是表示获取的数量,但我以为是截止量
  3. 我把jquery文件放在了web-info文件夹下,然后设置自动提示的src位置,结果出现错误。这里自动提示的文件位置是错的,根本获取不到。需要自己设置。另外,把scripts文件夹放置在 应用根目录 下比较好。
  4. 编码问题。比如说新增一个账户,表单传递过来的信息,直接放置在数据库中出现乱码。需要设置request.setCharacterEncoding(“utf-8”);
  5. 一开始设计表的字段时,注意不要使用mysql 的关键字,否则会报错。我因为要用“指令”这个词,就直接设置了order字段。结果出现错误。
  6. 数据库连接的资源文件单独放置在一个文件db.properties,在读取时,注意key要和文件里面的相同。
  7. 注意测试。每完成一个模块,要测试代码的正确性与否。比如,我写完“获取连接”的代码后,然后就开始兴奋的写crud这些。但是,连接部分有错误,获取的是空指针,然后一层层找bug,最后问题在连接上。
  8. 关于分层。service层承上启下,所以设置一个接口,然后写一个实现它的类,这样有错误就不用来回改control层的代码。
  9. 设计。这件事情很重要,关于要实现的业务,逻辑等等,一开始就要规划好,所以要画“流程图”,“时序图”,然后根据图来写代码。其实一个项目,最重要的是前期规划,实际上代码部分占用的时间很少。但是我没有规划,所以一边写一边改,真的浪费时间。
  10. 关于返回值。数据库操作分为两种,读操作和写操作,读操作返回数据,失败则返回null,写操作返回一个规定的代号。然后根据代号告诉页面,操作成功或者失败。
  11. post还是get。我到底是用post方式提交,还是用get方式呢。我
  12. 关于null到底是什么。遇到一个问题,判断一个字符串delete是不是空,delete!=null||delete.length()!=0如果delete=null,将会判断null.length( )将导致错误。然后我查了一下知乎,有个人说的很透彻,摘录如下
  13. :对一个对象的引用,其实只是变量保存了这个对象的地址而已,变量本身并不是一个对象。当你定义了一个变量用来引用一个对象,但却没有实际构造/引用对象,变量也就无从保存对象的地址。所以,null不是对象,而是一个空指针,不是对象为null,而是变量为null。至于题主所说的类型转换,只要明白变量和对象的区别,问题也就不存在了。变量其实不存在类型这一说,只不过是强类型语言为了减少代码编写过程产生的错误,顺便让IDE能够提供自动完成等智能化功能,约束了变量的使用而已。类型转换过程中,转换的是变量引用的对象而非变量本身。
  14. 判断null和空字符串
  15. 为什么局部变量必须初始化,成员变量不用初始化。我在网上搜索后,答案是这样的。
  16. 类的成员都有个默认值,在new一个类对象的时候自动赋值,boolean对应false,数字型的都是0,对象类型的都是null。局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。出于速度和安全性两个方面的综合考虑,解决方案就是虚拟机不初始化,但要求编写者一定要在使用前给变量赋值。
  17. 关于jstl的原理。在jstl里面可以根据${object.field}获取一个对象的各种成员变量,我很疑惑,这些变量都是私有的,为什么不是用方法获取。然后我把一个get方法删除之后,程序报错。jstl背后应该调用了get方法。
  18. form表单的提交。在看别人的代码时,总是会看到这么一段,object==null||object.length==0 同时判断空字符串或空,我很疑惑,表单提交的值会为null吗?答案如下:
  19. 如果表单中的input元素有对应的name值,但没有填写,那么获取到的是"",如果没有对应的name,即在request域中不对该对象的引用,则为null;
  20. 在该博客https://www.cnblogs.com/qiuting/p/5373571.html 里面总结的很好,现摘录如下:

自己动手写crud+分页 出现问题

  1. 关于jdbc的连接。
  2. tomcat缓存或者project缓存。在写代码时候,明明已经更改了,但页面显示还是老样子。找了半天,是缓存的问题。servers-右键-clean;project-clean;
  3. 由于表单传递的全部是字符串。需要使用Integer.parseInt() 来进行解析,在解析之前,要判断空字符串和null,否则会出现java.lang.NumberFormatException.for input String ""
  4. 关于eclipse的警告。有时候警告不注意也会出现异常。所以也要关注警告。
  5. request.setCharacterEncoding( ).首先,request和response是两个容器,里面携带了各种参数。然后获取这些参数,是需要以一定的格式解析的。这个博客总结的很好,http://blog.csdn.net/u013030276/article/details/50420024
    摘录如下:

一、request.setCharacterEncoding():用来确保发往服务器的参数以汉字的编码来提取,设置从request中取得的值或从数据库中取出的值。
指定后可以通过request.getParameter()获取自己想要的字符串,如果没有提前指定,则会按照服务器端默认的“iso-8859-1”来进行编码;该方法只对post请求有效,对get请求无效;对于get请求,应该在server.xml中指定:URIEncoding=utf-8;
注意:在执行request.setCharacterEncoding()之前不能执行request.getParameter()方法;
原因:应该是在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析提交内容,setCharacterEncoding()自然就无效。
二、response.setCharacterEncoding():设置HTTP 响应的编码,用于设置服务器给客户端的数据的编码
一般不会用这个方法来设置响应编码,
一般使用response.setContentType()方法来设置HTTP 响应的编码,同时指定了浏览器显示的编码;
因为他在执行该方法通知服务器端以指定编码进行编码后,会自动调用response.setCharacterEncoding()方法来通知浏览器以指定编码来解码;使用此方法要在response.getWriter()执行之前或response提交之前;