发表于: 2017-10-24 23:37:10
2 680
今天完成的任务:
1.将项目完善
首先加上了以前的aop统计时间。
然后将自己的增删改查都添加进去,并且使用拼接的方法,把他们的头尾都加上。这样界面还能看一下。。。
然后把首页改成登录界面。自己的想法是直接在Controller中添加一个总的@RequestMapping(“/”)
然后把登录界面的跳转@RequestMapping("/")改变一下,这样每次打开tomcat的时候默认去/对应的登录界面。
2部署到服务器
今天部署很顺利。。。首先改了一下resin的配置文件,改文件夹的名字,然后脚本改文件夹的名字,代码上传到svn就可以了。
部署好了以后在qq浏览器上有一点小问题,就是文字都变小了,但是在chrom上面就是可以的。。。。。看来果然改换浏览器了。
部署这里还有一个小问题,就是我的文件路径很多都是相对路径,按理来说应该找不到才对,但是目前是可以的。为了保险起见,还是都换成绝对路径吧。
标签${pageContext.request.ContextPath}
按理说idea会自动的跳出这个路径,但是我的不能自动跳出来。
百度了以后发现是因为我缺少一个依赖
jsp-api.jar
servlet-api.jar
这两个都需要,我缺了第一个。所以不行。加到pom中就可以使用了。
发布到服务器也是可以的。代码可以在svn上看到。
3.完成任务四剩下的时间标签。
什么是tag:一个tag就是一个普通的java类,它唯一特别之处是它必须继承 TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类 是由jsp容器提供的,无须开发人员自己实现。
tld:tag标签的配置文件,用来标识扩展名为tld的文件是存放标签名字和类的映射用的
标签库,他把页面标签和后面的Java类影射起来.减少了页面中的代码。使页面清晰。其实标签最后还是被解释成后台的Java代码。
具体是在用户在jsp页面中使用标签时,系统首先会先到xml文件中的 <taglib>标签中的<taglib-uri>和<taglib-location>这两对标签找到相对应的扩展名为tld文件,然后在 tld文件中的映射再找到相对应的taglib类。
首先加上一个添加时间的代码
u.setCreate_at(System.currentTimeMillis());
就是在添加的时候自动将时间添加到u对象里面。
根据网页的教程做,然后第一个问题是
<date:date value="${U5.get(0).create_at}"/>
这个标签里应该写什么?
value中应该写的是获取到的时间。
第二个问题是时间标签不对,最开始打印出来是1970年。。。所以很奇怪。后来是发现我数据库中时间格式有问题,一定要生成System.currentTimeMillis()。才能显示出来。
最后一个问题是之前没有把创建学生的字段加到model中,然后加入了以后发现插入不了,解决是mapping文件里面也要加上相应的字段。。。
最后的结果是这样的
然后这里学到了一个小知识,就是使用input标签实现下拉菜单。如下,这样就是有两个选择0,1。
学习状态:<select name="current">
<option selected>1 </option>
<option>0</option>
</select>
就是这样的。。
4.学习C标签
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!
需要的jar包是:jstl-1.2.jar。
jstl包含四个内容
core:核心标签库,我们学习的重点;
fmt:格式化标签库,只需要学习两个标签即可;
sql:数据库标签库,不需要学习了,它过时了;
xml:xml标签库,不需要学习了,它过时了。
c标签就是在core标签库下面的一个很常用的标签。在这里面最常用的是if 和foreach标签。
<c:if test="${判断语句}" var="" scope="">
</c:if>
c if 标签有三个属性,test(判断条件),var(用于存储条件结果的变量),scope(var属性的作用域)
<c:foreach var="" items="" begin="" end="" step="" varStatus="">
循环体
</foreach>
items 代表要被循环的信息,var代表当前条目变量名,varStatus代表循环状态变量名,begin是开始的元素(从0开始),end代表结束的元素,step代表每一步的步长。
下面就是单纯的循环5次,输出c:out中的内容。
<c:forEach begin="1" end="5">
<c:out value="hahha">
</c:forEach>
下面这个就是代表了循环的输出U1这个list中的内容。
<c:forEach items="${U1}" var="u1">
<tr>
<td>${u1.name}</td>
<td>${u1.occupation}</td>
<td>${u1.current}</td>
<td>${u1.introduction}</td>
</tr>
</c:forEach>
5.学习EL表达式
EL(Expression Language) 是为了使JSP写起来更加简单。
一般的形式是这样的${person.name} 写在花括号中,点的左边是一个对象,右边是对象的属性。也可以使用[]来代替{},并且[]有更多的使用方法比如在有符号的时候,用[]会比较好,不只是局限于使用bean或者map。暂时先不深入。
6.学习tiles中常用的几个标签各种的意思。
首先要有一个tiles的头标签
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<definition name="template" template="/jsp/template.jsp"/>
definition是代表了定义一个页面作为模板或者作为继承。Tiles的definition包含一个带有Tiles URL的逻辑名和一些属性值。插入是在后来用definition的名字来完成的。一个definition的逻辑名可以在站点中使用多次,实现对Tiles的轻松复用。
Tiles的definition可以继承自另外一个definition,并且能够重载其属性或者添加属性。这使得通过一些属性来构造不同的definition变得更加容易。比如,你可以定义一个“父类”的definition同时定义主要的 header, menu, footer, 和一个默认的 title。然后令你的每一个页面的definitions继承自这个“父类”的definition并重载title和body属性。
<put-attribute name="header" value="/jsp/header.jsp"/>
<tiles:insertAttribute name="header" />
这里的两个put-attribute 和insertAttribute 是一起来使用,上面的name中内容作为jsp模板中的插入,value对应的是需要拼接的头。
7.深度思考
3.熟练使用c标签,el表达式。
目前使用起来还是比较基础,然后需要深入的时候再去学。基础的内容写在上面了
4.为什么要使用tiles框架?
使用tiles是可以将界面切分开,然后复用重复的部分。另外在我们有大量界面的时候,修改起来只要修改拆分开的一个内容就可以将全部的都修改过来不需要自己每一个都去改。
8.将代码的Controller修改为使用post,put,get,delete来请求。
post对应新增,put对应修改,get对应查询list,delete用来删除。
首先先把添加和查询list显示出来,因为这两个对应的是post和get方法。不需要添加什么其他功能。就是首先将Controller中value改为User, method改为post,get。然后jsp的form中需要写上对应的方法。
然后是修改删除和更新,对应的是put和delete方法,这两种方法不能直接的使用。
是因为web.xml中readonly参数默认是true,即不允许delete和put操作,所以默认的通过XMLHttpRequest对象的put或者delete方法访问就会报告 http 403 forbidden 错误。
首先配置readonly
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
这个时候就可以使用put和delete的方法,但是很奇怪我使用的时候不会报错404,但是删除和更新的方法都没有用,就直接返回了list页面,所以就是这两个方法没有生效,而是直接使用了get方法。那还是不对
解决办法就是
在jsp的form中添加一个
<form action="/user" method="post">
这里是内容。。。。。
<input name="_method" type="hidden" value="put" />
使用隐藏的方法,通过post方法在使用put方法。
但是这样还是不能识别到内部的方法,还是会按照post的方法执行。就是新增。
继续在web.xml中加入
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
一定要放在所有的filter内容最下面。。。不然会报错。
参考:
http://blog.csdn.net/u011403655/article/details/44590315
redirect 可以不指定方法,直接使用默认的get方法。
9.任务总结。
任务四做了六天,然后刚刚开始就去实现静态页面转换成动态界面。这里主要是要针对界面先去分析需要的数据表是那些,需要用那些字段,然后创建好数据表。完成了之后就是需要去针对需要改成动态的地方按照dao---service---controller的顺序去写接口和实现跳转。然后在jsp中读取到传过来的数据,这样就可以实现转换成动态界面。这里面主要是有个相对路径和绝对路径的问题,最好用绝对路径不然可能读取不到css样式的文件。
第二部是去学习tiles然后把界面拆分开使用tiles拼接,这里需要去了解tiles是什么,然后怎么实现tiles,这里其实不是很困难,自己动手试一下就可以了。最后是打时间标签tag,这一部分就是一小块代码,也是比较容易,但是要自己去理解。
任务四里面学到的是怎么将静态的界面转换成动态,然后巩固了一下之前的Springmvc,了解传值是怎么从前端传到后端,最后是tiles框架, 这里还是挺有用的,学会了怎么拆分界面,怎么拼接。最后怎么使用tag标签。
明天的计划:
明天开始做任务五。
遇到问题:
遇到问题就是感觉东西都是会用了,但是细致的去讲还是不行。
收获:
了解了C标签,EL表达式,项目部署到服务器。学会了使用tag,踩了很多坑。
禅道:
任务四完成了
http://taskNaNteng.com/zentao/project-task-343.html
评论