发表于: 2017-10-27 21:50:06
2 709
今天完成的事情:
今天把ssm框架搭建正式完成。然后让师兄看了一下,师兄说没有一点restful风格。好吧,但是最起码是搭建完成了。任务里面要求的json今天下午也运用了,还有log4j打印日志也可以了,接下来就是修改成restful风格。
首先是我的controller层:
@RequestMapping(value = "/users",method = RequestMethod.GET)
public String listUser(Model model) {
List<User> list = userService.queryAllUser();
model.addAttribute("list", list);
logger.info("所有用户");
return "listUser";
}
@RequestMapping(value = "add",method = RequestMethod.POST)
public String addUserForm(){
return "addUser";
}
@RequestMapping(value = "delete",method = RequestMethod.GET)
public String delete(){ return "deleteUser"; }
@RequestMapping(value = "update",method = RequestMethod.POST)
public String updateUserForm(){
return "updateUser";
}
@RequestMapping(value = "/addUser",method = RequestMethod.POST)
public String add(Model model,User user) {
userService.add(user);
model.addAttribute("user", user);
return "redirect:/users";
}
@RequestMapping(value = "/deleteUser",method = RequestMethod.GET)
public String deleteUser(int id) {
if (userService.queryUserById(id) != null) {
userService.delete(id);
return "redirect:/users";
} else {
return "error";
}
}
@RequestMapping(value = "updateUser",method = RequestMethod.POST)
public String update(Model model,User user){
User user1=new User();
if(userService.queryUserById(user.getId())!=null){
user1.setQq(user.getQq());
user1.setStuType(user.getStuType());
user1.setEntrance(user.getEntrance());
user1.setGraduated(user.getGraduated());
user1.setOnlineId(user.getOnlineId());
user1.setName(user.getName());
user1.setWish(user.getWish());
user1.setTutor(user.getTutor());
user1.setWhereGet(user.getWhereGet());
user1.setLink(user.getLink());
}else {
return "error";
}
userService.update(user1);
List<User> list=userService.queryAllUser();
model.addAttribute("list",list);
return "redirect:/users";
}
对于师兄提出的三个问题,首先今天看书找了一下没有找到,然后师兄告诉我不使用@requestparam注解实现传递参数的方法,可以把user封装成一个对象直接传递给controller层。
public String update(Model model,User user){
就像这样。直接把对象穿过来。
第二个问题,参数太多,将参数封装成一个对象,这个我想了好久找不到具体的方法。这个也是困扰我没有实现restful风格的一个难题。这个问题还要学习知识点解决。
然后自己没有用restful风格,所以写了好多个jsp页面,然后在每个页面添加form表头,进行表单和controller的传递。
这是我的jsp页面:
我的listUser.jsp:
<json:object>
<json:array items="${list}" var="u" name="user">
<json:object>
<json:property name="id" value="${u.id}"/>
<json:property name="name" value="${u.name}"/>
<json:property name="qq" value="${u.qq}"/>
<json:property name="stuType" value="${u.stuType}"/>
<json:property name="entrance" value="${u.entrance}"/>
<json:property name="graduated" value="${u.graduated}"/>
<json:property name="onlineId" value="${u.onlineId}"/>
<json:property name="tutor" value="${u.tutor}"/>
<json:property name="wish" value="${u.wish}"/>
<json:property name="link" value="${u.link}"/>
<json:property name="whereGet" value="${u.whereGet}"/>
</json:object>
</json:array>
</json:object>
用json-taglib输出所有的用户。
然后贴一下我的form标签传递会controller层:
<form method="post" action="${ctx}/add">
<input type="submit" value="新增用户"/>
</form>
<form method="post" action="${ctx}/update">
<input type="submit" value="修改"/>
</form>
<form method="get" action="${ctx}/delete">
<input type="submit" value="删除"/>
</form>
分别传递到增删改查控制器,再通过控制器传回增删改查页面:
RequestMapping(value = "add",method = RequestMethod.POST)
public String addUserForm(){
return "addUser";
}
@RequestMapping(value = "delete",method = RequestMethod.GET)
public String delete(){ return "deleteUser"; }
@RequestMapping(value = "update",method = RequestMethod.POST)
public String updateUserForm(){
return "updateUser";
}
然后在页面添加信息回传给控制器,比如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<html>
<head>
<title>修改用户信息</title>
</head>
<body>
<form action="${ctx}/updateUser" method="post">
<table>
<caption>修改用户信息</caption>
像这样。然后增删改查基本都是通过这种方法实现的。没有用上restful风格,接下来要修改成restful风格。
然后随便添加了两条数据,发现json输出到页面的内容好难看,还没有c标签输出的好看:
json风格:
最后本来一切都挺顺利,结果我的日志,死活打印不出来,用的是和任务一一样的东西,任务一可以,任务二就是不行。然后各种百度,都是让
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
放在
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
这个前面,还是没有用,最后只能请教师兄,师兄看了半天也是没有发现错误。
最后没有办法,师兄把他的日志拷贝给我,试了一下OK了,然后我对着对了半天发现基本一样。我就试着把我的日志一行一行的代替师兄的日志,来找错误,然后发现,我的日志一句一句粘贴回来,竟然也可以运行,不是很理解。这个问题困了我比较久。
然后是日志配置:
# logger设置
log4j.rootLogger = INFO,stdout,error,info
# 输出到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.systemOut.layout.ConversionPattern=[%-3p][%-d{yyyy/MM/dd HH:mm:ss}][%l][%n][%m][%n]
log4j.appender.systemOut.immediateFlush=TRUE
# 输出到文件-ERROR级别
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File = /root/log2/error.log
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
# 输出到文件-INFO级别
log4j.appender.info = org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.File =/root/log2/info.log
log4j.appender.info.Append = true
log4j.appender.info.Threshold = INFO
log4j.appender.info.layout = org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
师兄的日志,但是我已经一句一句的替换成我自己的了。
输出效果:
然后测试了一下,没有问题。
明日计划的事情:
明天请假回家5天,有急事。
遇到的问题:
log4j日志打印输出,还有restful风格。log4j日志,师兄把他的日志配置文件拷贝给我,算是解决了。restful还是得继续学习。
收获:
我感觉我的任务二就是一直在磨,但是还是快磨成功了。这里面一度以为自己没有不适合做程序员,哎,最后耐着性子一点一点得总结知识点,慢慢实验,实在搞不出来问师兄,最终还是看到效果得。
任务开始时间:2017/10/18
预计完成时间:2017/10/25
延期:延期2天
延期原因:任务二,知识点比较零散,边学习边敲代码,比较慢,目前剩下restful风格没有完成,接下来要请假5天,任务会继续延期。请假回来,争取早日完成restful风格。
下次预计完成时间:2017/11/2
禅道:http://task.ptteng.com/zentao/project-task.html
评论