my-Life项目开发流程

时间:2021-10-24 11:40:50

一:新建java web项目  (懂得使用gradle哦!)

1.http://www.cnblogs.com/xylle/p/5234380.html

2.新建项目后,然后新建module, 如果甲Module要使用乙Module的类,我们可以在gradle中编译乙Module的类。  实现导入!

你的问题:mapper语句!

3. mybatis的@Param:此注解可以让sql语句语法更宽松!   #{}和${}都可以!   不然只能是#{}。

4. 建表——》 写mapper文件(sql文件)、dao接口、domain;

注意还有数据库配置文件哦!     所以最重要的还是mybatis的配置文件和spring的配置文件哦!     spring整合mybatis;这个要好好的看看哦!

二:重大突破

1.我居然学会用mybatis generator生成JavaBean、mapper文件、接口了!  哈哈哈哈!       找回自信!你可以的!

http://blog.csdn.net/wyc_cs/article/details/9023117

      http://blog.csdn.net/zhshulin/article/details/23912615

配置好配置文件——》 java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

2.我也学会了哦:

         A. exploded archive (development mode) 这种叫开发模式这是直接把文件夹,jsp页面 ,classes等等移到tomcat 部署文件夹里面,进行加载部署

B. Packaged Archive(production mode) 这种叫发布模式,这是先打成war包,再发布。

三:遇到的问题

1.mapper文件的路径问题,找不到?   这时候代码提示就是调错利器了!  致伟大的IDE!

2.看之前项目的package不就知道它需要什么包了吗?   9494

3.generator生成的sql语句只有insert:   哦,没有设置主键哦!

4.java区分: 双引号和单引号哦!   String:“”     char:‘’

四:项目搭建

1.R工具类里的变量必须声明为final,@Requestmapping的value才不报错!     必须是常量(声明为final就没事了)

2.vm文件居然可以在地址栏直接访问!   dream-heaven.vm

3.问题描述:  web.xml没有读取到,项目是怎么启动的呢?        将青奥的build.gradle里面的东西copy进来就OK!

4.log4j的配置文件复制进来就可以用?  居然这省事?

5.报错信息

  A:2016-11-08 17:59:23,706 ERROR (org.springframework.web.context.ContextLoader:331) - Context initialization failed

  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'indexController' defined in file   [C:\Users\Administrator\Desktop\life\classes\artifacts\sunwin.zhangdong.web\exploded\sunwin.zhangdong.web-  1.0-  SNAPSHOT.war\WEB-  INF\cla  sses\sunwin\zhangdong\web\controller\IndexController.class]: Post-processing failed of bean type [class sunwin.zhangdong.web.controller.IndexController]   failed; nested exception is java.lang

        解决:将之前青奥项目的gradle的那个copy到gradle.build里面。

B: tomcat依旧报错:     org.apache.catalina.core.StandardContext startInternal SEVERE: Error                                                             listenerStart org.apache.catalina.core.StandardContextstartInternal

                SEVERE: Context [/******] startup failed due to previous errors

解决:http://xpenxpen.iteye.com/blog/1545648

6. 地址栏请求没有进入断点? 什么鬼?   (Spring MVC模块哦)    Spring的试图解析!     (参照王金生的项目哦!哈哈,抄,你总会吧!)

答:说明dispatcherServlet没有拦截到?

五:遇到的问题

台阶一: 断点会影响tomcat的正常启动的哦!

台阶二: spring mvc的配置文件:视图的解析这里要好好的看下哦!     对配置文件的深入理解!

台阶三: web.xml 中的  dispatchServlet的url-pattern这个何解呢?   多个顺序执行?

台阶四: 伪静态

答:设置请求后缀名为html,控制器返回逻辑名,然后为逻辑名添加“.vm”后缀(spring mvc做视图的解析)!

台阶五:视图无法解析,web.xml中的配置问题,路径没配对,没找到vm文件。    主控制器不用return哦!

台阶六:List<domain>的size打印出来,但domain的属性值为啥就没查不出来呢?    title属性查出来为null?   但content是有的哦!   什么情况?

答:哦,原来是mapper文件里实体类和数据库表对应的时候字段搞错了!

六:

1.什么鬼? 之前项目是好的,突然访问就404了,用gradle刷一下,重启居然又好了?

七:web项目启动顺序:web容器——》spring 容器

八:

定义请求路径,资源没有return路径,返回的是ModelAndView,vm文件是如何找到的呢?

还有页面死活解析不了velocity:$!R;  这是什么鬼?     href属性没有值?        哦哦,没有添加到http的session中,用spring的话:添加到modelMap里哦!

九:

1.静态与非静态调用!  注意类名的大小写哦!

2.增加代码流程:点击button,调用js方法,调用ajax提交表单!      请求被控制器拦截:控制器调用service方法——》service层调用dao方法

1.触发ajax, 请求参数准备好!  然后发送过去。

2.拦截请求,请求参数入参, 控制器内部调用service层方法,service的方法内部调用dao层的方法。 实现数据的CRUD!

so easy!复杂的地方框架都封装了!    真正有内容的地方:视图渲染、请求参数入参! 

3.parsererror,  status: 200, statusText: "OK"     这是为什么呢?

答:哦,ajax参数url是空的,velocity没解析出来哦!

十:

1.spring MVC的机制:控制器里可以带ModelMap哦! 盛装bean的容器!   spring创建的modelMap哦!

2.404错误,ajax提交的url路径没有?  还是没被拦截?    哦哦,url为空,所以才找不到资源路径啊!

3. R工具类里的请求路径?       P里面:定义视图文件的路径!

视图的真实路径都是完整的目录哦!(相对目录)

4.spring控制器处理请求:返回String、modelMap、modelAndView?

5. 500:Could not resolve view with name 'guidelines.find' in servlet with name 'spring-web'

        是不是因为文件目录太深了?  vm/../../文件位置。  初步断定是这样子的哦!     好像不是哦! vm文件夹下的.vm文件都会遍历到?

6. 富文本编辑框的内容无法被表单序列化?  所以创建的时候内容没有!   查找王金生的哦!     看来好像不是得!去掉richtext照样没内容!

form表单无法被序列化: 序列化值为空! 我了个擦!

答:哦,表单的input元素必须有name属性哦! 不然无法传值的哦!

7. ajax创建记录后:数据库中没有值,应该是ajax请求参数绑定的时候出了问题!   所以domain的值为null!

ajax请求被拦截了,但是请求参数入参失败!

十一:  读项目代码

1.ModelAndView?  必须return?    是的噢,或者将ModleMap作为方法的形参,这样就可以啦!

2.AjaxResult:    封装Ajax请求的响应消息   统一规范Ajax响应消息的内容

3.参数如何传递到控制器中的?    springMVC的机制

十二:

1.客户端与服务端的操作都是建立在: 发送请求——》 拦截处理请求——》生成并返回响应——》处理响应

1.@RequestMapping可以在类上面配置哦!

2.spring MVC:完成"http请求信息入参"(这一点非常的重要哦)

Servlet API: 或者直接用HttpServletRequest request请求对象

控制器返回值:ModelAndView(模型和逻辑视图名)、String(逻辑视图名)

控制产生模型数据,而视图是为了渲染模型数据!(渲染:就是呈现方式) 各种文件格式

@RequestParam('password'): 请求参数"按名称匹配方式"入参

@RequestParam等等:方法签名!

数据校验:在执行业务逻辑前要进行数据校验!

Http请求报文到达服务器后,web服务器会将其封装成一个HttpServeltRequest对象。

乱码的原因:velocity配置的问题? 很可能哦!(之前项目不是这样吗?)

宏:批处理,多条指令合并!  完成一项任务!

十三:

1.项目启动首页报404,因为请求都没有被拦截哦!  没进控制器!

2.css、js文件找不到!   $!basePath    文件路径写成绝对路径!这样就不会有问题了!

十四:

1.enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。   encode type

2.servlet用来处理请求! (晚饭后看看吧)

3.移动端320px?

4.表单:收集用户输入信息!

对信息编码(在请求报文中),发送http请求报文到服务器端!

服务端将请求报文封装为HttpServlet的实例! 后端以面向对象的方式操作!

服务器端利用HttpServletResponse的实例,完成对响应报文的设置,然后发送回客户端!

十五:

1.ajax创建那个终于搞定了啊! 哈哈哈! 原来是页面input的name属性必须设置为何domain一样的啊!

快乐是什么? 成功是什么?  就是得其所想! 自己强烈的想做成一件事,然后历经磨难终于柳暗花明,得到预期!   哈哈哈,哈哈哈!    加油,young man!

2. 406:客户端浏览器不接受所请求页面的 MIME 类型!

答:解决方法: 因为请求时候的MIME类型是application/html;   相应的却是application/json!

所以将请求时候的MIME类型改为application/json即可!      奇了怪了,就是按照王工的那个来大家你的啊!

3.错误的原因:jar包的版本依赖问题导致的哦!

十六:

1.请求报400,看来是web.xml先处理的请求吧!

答:解决400,原来是请求参数不合法吧!  因为创建时间在转换过程中肯定出错了!

2. jquery:   $.each()

3. id为啥获取不到呢?   页面不显示?   和domain中的属性名不一样? 啥情况啊!

答:哦哦,访问类变量id的时候是调用那个它的getxx方法,此处的getInteger(), 改为getId()即可。

undefined:未引入就先使用了哦!   必须先引入jquery,然后才能用jquery哦 !  (顺序又忘了注意)

4. int和integer

5,guideMapper:500错误     Dao层:空指针异常;   数据库表id是自增长的,所以插入的时候就不能再包含id了,或者选择insertSelective。

6.数据库update无效?    dao层的方法执行失败。     原来是id没有传递进去哦!  擦了!

好好利用debug功能吧!  看debug模板界面,不要只看代码后的输出!  还有打印出来就什么都知道了!   哦哦! 哈哈!

执行update、delete操作的时候一定要知道唯一标识此条记录的domain哦!

十七:  debug,所有的错误信息都要看一下哦,不要只看开头,以根错误为起点、重点,但解决不了就需结合下面的错误信息哦!

1.擦了,突然间报一大堆错误!    bean无法创建?   http://blog.csdn.net/zzg1229059735/article/details/51320218

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [sunwin.zhangdong.dao.GuidelinesMapper]    found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations:      {@org.springframework.beans.factory.annotation.Autowired(required=true)}

答:通过添加注解解决了,但又报错了,  原来是mapper文件里面一个单词被空格分开了,日。。。。。。。查了快整整一天。。。。。。

mapper文件有错,导致无法创建dao层接口的实现类,所以无法完成dao  bean的创建,连锁反应!

依旧有错:BeanDefinitionStoreException     nested exception is java.lang.ArrayIndexOutOfBoundsException: 2675

再答:日,原来是注解搞得鬼,去掉@Qualifier("guidelinesMapper") 就好了!

2. 删除操作报406(ajax删除)

哦,老问题了,请求后缀改为.json就Ok了!

然后居然还报错,哦,ajax的data参数你居然都写错了,很久不用的下场啊!     data:String或Object

3. 日期的问题,日期在数据库中的格式,日期java类型?

十八:

1.com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB    server version for the right syntax to use near '' at line 1

a:表里的字段命名,有无和mysql的关键字冲突。

十九:

1.记得浏览器中打开页面,导航栏上面的页面icon图标哦!    <link rel="icon" href="../../favicon.ico">

2.登录模块(数据合法性、合理性校验)   抽空总结一下表单中常用的校验规则哦!

java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

   答:因MySQL的时间类型datetime范围是1000-01-01 00:00:00 到 9999-12-31 23:59:59,所以报错。

逻辑思想:

  a:页面发起请求-》请求拦截——》交给指定的控制器处理请求——》然后返回逻辑视图(login页面),没有数据模型哦!

  b:填写表单信息(验证格式、长度),提交表单(定义目标url哦,请求方法),服务器拦截此请求,进行数据验证(用户名和密码都一致),如果匹配,则返回相应            的视图,

并执行逻辑操作(记录用户登录日志   等等)。如果不匹配,则返回当前页的逻辑视图、数据模型(错误信息)。

c:安全性补充:密码加密!

01:密码加密

     02:md5摘要

03:http://www.jb51.net/article/73292.htm

04:摘要(散列算法,不可逆的)第一,同一输入得到的输出是唯一的;第二,输出的大小是固定的;第三:不可能从输出得到输入的任何信息。

05:密码加密后还需加盐(这样更安全)。

06:防暴力破解:图片验证码(一次消费)

d:注意

    01:请求消息入参(页面input框的name属性和domain的属性名一致) 。 按名称(name)匹配哦!

02:  需要在视图解析配置文件里配置哦,暴露session中的属性,velocity变量才能解析得到结果哦!   哎,你为什么要放到session中呢?  spring提供的也是

可以得啊,ModleAndView  ModelMap等等。

3.注册模块(数据合法性、合理性校验)

a:页面发起请求 href——》请求拦截——》交给指定的控制器处理请求——》返回逻辑视图(注册页面) 同样没有数据模型哦!

  b:(非空校验、格式校验、长度校验)提交表单,后端校验:验证码校验、注册过的用户名应该不予注册,所以这里要判断用户名是否已经注册,

     最后将此信息更新到数据库的user表中哦! 即可!

理解逻辑:用户名一定是唯一的,密码是可以重复的!

c: 补漏,service层抛出的方法控制器层的方法也要声明异常哦! throws!

MysqlDataTruncation: Data truncation: Data too long for column 'password' at row 1

答:顾名思义,就是password的字段在数据库中的长度太短了哦 !

d:思路决定出路: 读代码心得

  1.文件路径的问题,IDE认,但浏览器不认哦! 尤其是background属性的url。

  2.下路菜单组件:大盒子(触发button,下拉菜单列表)

  3.CDN

  4.注意文件导入的顺序:css存在样式的覆盖, js文件存在依赖。

  5.注意设置页面的min-height哦! 或者 设置footer为fixed定位。

  6.div ul li a

  7.下路单选框 在herf属性中写javascript代码

  想要做到:选中下拉框中的指定元素,那么就打开一个此option的url页面。

  当下拉框改变时(onchange事件),获取当前下拉框Dom对象的options属性(数组),获取指定的选中Dom的属性值。

  总结:onchange事件 + window.open(url) 关键是获取url!

  8.Meta http://www.jb51.net/web/70787.html (整理到博客哦)

  0:name属性和http-equiv属性

    a:元数据可以被使用浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 Web 服务调用。

    b:定义文档关键词,用于搜索引擎。<meta name="keywords" content="HTML, CSS, XML, XHTML, JavaScript">

    c:定义web页面描述:<meta name="description" content="Free Web tutorials on HTML and CSS">

    d:定义页面作者:<meta name="author" content="Hege Refsnes">

   http-equiv属性:

    a:每30秒刷新页面:<meta http-equiv="refresh" content="30">

    A、Expires(期限)

    B、Pragma(cache模式) 注意:这样设定,访问者将无法脱机浏览。

    C、Refresh(刷新) 自动刷新并指向新页面。

  9.图片的显示规则,搞清楚哦! 不要问为什么规则是这样!

  10.jqeury的高度函数等等!

  11.标签页激活:不能选其父元素哦! a

  12.前端:读取图片(都是请求) 必须知道请求的url是什么? 你要请求什么,总得告诉服务器吧!

  图片url、视频的url

  视频播放:通过url向服务器发起请求,然后服务器不停的发送数据给你,插件做的应该就是不断的发送请求、处理响应。

  13.图片上传:将图片文件保存到服务器指定目录,将地址保存到数据库服务器中。

  视频上传:同理吧!

  14.js中的参数问题哦! 看js教程,整理到博客哦!

  15.alert console.log() js调试利器哦! 别忘了!

  16.图片显示:

二十:

1.实现velocity变量是全局!

                                                                     项目基础巩固 

1.对返回内容的长度截取:

       方式一:在java代码中做处理:servie、控制器java代码    substring()

方式二:在vm页面做处理,用vm语法。

2. <script src="" charset=""></script>

3.rest清除<input type="hidden"/>  hidden后就是默认了无法从界面上改其值,  reset本来就是让表单的值重置恢复到默认。

                              项目重难点突破

架构技术方案:

  表现层: springMVC(web.xml配置文件、spring mvc配置文件)

  业务逻辑层:spring事务 (spring配置文件和mybatis配置文件的整合)

  数据访问层:mybatis (mapper文件、mybatis配置文件、mapper接口)

  日志:log4j

  开发工具:IntelliJ idea、git、svn、gradle、tomcat、jrebel

项目的启动顺序:

  web容器启动——》spring容器

  web.xml ——》 springmvc.xml(表现层)、spring-mybatis.xml(业务逻辑+持久层)

  WEB容器的加载顺序是:ServletContext -> context-param -> listener(监听) -> filter(过滤) -> servlet(拦截)

  web.xml文件的学习: http://blog.csdn.net/believejava/article/details/43229361

认知:

1.spring:一个轻量级的IOC和AOP的容器框架!

2.mybatis:半自动ORM框架

3.控制器内部返回视图的逻辑名(视图的路径和文件名)(路径、后缀名自己配哦)

参考的优秀资源:

1.http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html  (mybatis的中文api)。

http://www.mybatis.org/mybatis-3/  (mybatis的英文api)。

本机桌面上的mybatis的pdf文档。

2.http://www.admin10000.com/document/6436.html

3.http://jinnianshilongnian.iteye.com/blog/1594806

                              项目心得

一:排错,解决问题的利器

1.Debug

2.打印出来:System.out   console.log()   alert()

二:本质的东西

1. 文字内容的CRUD

2. 图片的上传、下载、删除

3. 视频的上传、下载、删除

4. 以上资源访问性能的提升!(用户体验)

三:yes,就是这种感觉,这种费力解决问题后的感觉。  成就感,你需要的就是遇到问题去解决的能力,而不是退缩和逃避!  加油,骚年!

追求兴趣和事业的一致!   哈哈哈哈哈哈哈啊。。。。。。

良性循环:一定要让自己走上!      解决问题——》增加信心和乐趣——》再去攻克更难的问题——》循环往复——》终成正果。