发表于: 2018-01-23 10:09:54
1 629
今天完成的事情:
1.今天师兄审核任务提出了要求:
批量套用TIles模板,我在寻找的过程中碰到了这种,虽说不合适,但是觉得算个知识点:
<tiles:insertDefinition name="index"></tiles:insertDefinition>
直接在jsp页面引入模板
但是这种方法还是不够简便,所游戏选用下面的方法:
<!--在使用的时候记得加上路径,否则所有的页面都会套用这个页面-->
<!--<definition name="*" extends="11">-->
<!--<put-attribute name="body" value="/jsp/{1}.jsp"/>-->
<!--</definition>-->
使用通配符。{1}代表请求的原始界面,比如http://localhost:8080/slark/blog ,则这里{1}会被替换为blog,即相当于在原blog.jsp页面下增加了一个footer部分。这样的话就很舒服。
2.搞任务五遇到问题,关于重定向和转发的,百度了一下两者的区别:
http://blog.csdn.net/u012877472/article/details/50804568
这个博客没写那么多定义,而是举例子说明,很好。我在这里总结一下两者的区别:
重定向,其实是两次request
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
请求转发是服务器内部把对一个request/response的处理权,移交给另外一个对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。
转发在服务器端完成的;重定向是在客户端完成的
转发的速度快;重定向速度慢。
转发的是同一次请求;重定向是两次不同请求
转发不会执行转发后的代码;重定向会执行重定向之后的代码
转发地址栏没有变化;重定向地址栏有变化
转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成。
3.学习了一波加密,发现是真的搞不懂,于是参考师兄日报,原来是直接使用加密的工具类。。。
http://z2009zxiaolong.iteye.com/blog/1562197
于是我从上面的连接里面直接复制出来加密工具类。。。过程不表。然后就是新建一个数据表,用来存放账号密码,这个也比较简单。做完了这些准备工作之后仍然没有任何头绪,百度也找不到比较好的博客啥的,于是直接先把师兄的代码拷贝过来了,跑通再理解吧。。。
这是新建的数据表
然后是加密工具类,就不贴了,都在上面了
然后和表对应的model类,也不贴了
service方法传一下吧:
packagecom.ptteng.service;
importcom.ptteng.model.User;
importorg.springframework.stereotype.Service;
@Service
public interfaceUserService {
UsergetUser(String username);
booleancompareUser(String username,String password);
voidinsertUser(User user);
voidupdateLogtime(String username,longlogtime);
}
serviceImpl的话,就不贴了吧。。
dao层新添加的东西:
UsergetUser(String username);
voidinsertUser(User user);
voidupdateLogTime(@Param("username") String username,@Param("logtime")longlogTime);
因为是两个参数,用到了@Param注解,dao层加了之后,对应的mapper.xml文件也要加上对应的sql语句:
<selectid="getUser"resultType="com.ptteng.model.User">
SELECT*FROM user WHERE username = #{username}
</select>
<updateid="updateLogTime">
UPDATE user set logtime = #{logtime} WHERE username = #{username}
</update>
<insertid="insertUser"parameterType="com.ptteng.model.User">
insert into user (username,password,logtime) VALUES (#{username},#{password},#{logtime})
</insert>
那么这里面有了对应的语句,还学要service层来调用:
再写一个service:
packagecom.ptteng.service;
importcom.ptteng.model.User;
importorg.springframework.stereotype.Service;
@Service
public interfaceUserService {
UsergetUser(String username);
booleancompareUser(String username,String password);
voidupdateLogtime(String username,longlogtime);
}
然后是serviceImpl:
importcom.ptteng.dao.PageDao;
importcom.ptteng.model.User;
importcom.ptteng.util.Md5Util;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;
@Service
public classUserServiceImplimplementsUserService {
@Autowired
privatePageDaopageDao;
public booleancompareUser(String username,String password) {
String pwd = Md5Util.getMd5(password);
System.out.println(pwd);
User user =pageDao.getUser(username);
try{
if(user.getUsername().equals(username) && user.getpassword().equals(password)) {
return true;
}else{
return false;
}
}catch(Exception e) {
System.out.println(e);
return false;
}
}
publicUsergetUser(String username) {
User user =pageDao.getUser(username);
return user;
}
public voidupdateLogtime(String username, longlogtime) {
pageDao.updateLogTime(username,logtime);
}
}
}
至此,基层的配置已经完成了
接下来就是在controller里面造作了:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String Login(HttpServletRequest request, HttpServletResponse response, User user, Model model) throws Exception {
//定义一个时间,也是登陆时间,插进这个用户
Long time = System.currentTimeMillis();
user.setLogtime(time);
userService.updateLogtime(user.getUsername(), user.getLogtime());
System.out.println(user);
//定义加密需要的token
String s = user.getUsername() + "," + time;
//将这个字符串进行加密生成Token
String Token = new DesUtil("xizi").encrypt(s);
//保存到cookies
Cookie cookie = new Cookie("Token", Token);
//对cookies进行设置
cookie.setMaxAge(60);
cookie.setPath("/");
//添加到请求
response.addCookie(cookie);
//service层去鉴定账号密码是不是和数据库的对应
Boolean loginResult = userService.compareUser(user.getUsername(), user.getpassword());
if (loginResult == true) {
System.out.println(user.getLogtime());
return "redirect:/index";
} else {
return "error";
}
}
现在的确可以跑通项目,但是不是很理解这些操作为什么这样做,目前的程度是可以验证,但不知道是怎么样实现的,明天会继续加深理解。
今天遇到的问题:
对这个东西无从下手啊。。。教程也找不到合适的,就先copy大佬了,打算跑通了再去理解这些东西。至此呢,算是知道了这个加密的大概流程。
今天的收获:
接触到了MD5加密,知道了加密的大概流程以及重定向和转发的区别。
明天计划的事情
继续推进任务五,加深理解
评论