发表于: 2017-09-12 23:00:34

1 851


今天完成的事情:

今天做到拦截器的时候数据库里的图片突然无法访问了,存的地址是./t11/imges/687.png这种,为了解决这个问题,研究了一下相对路径和绝对路径

采用相对路径遇到的问题 

相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。 

如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。 
如果采用SpingMVC的action返回页面,那么由于页面路径与action路径不同,使得浏览器无法正确解释页面中的路径,如页面为/pages/cust/cust.jsp,图片所有目录为/images/title.gif,这时在/pages/cust/cust.jsp中的所用的路径为”../../images/title.gif”,但是如果某一个action的forward指向这个jsp文件,而这个action的路径为/cust/manage.do,那么页面内容中”../../images/title.gif”就不再指向正确的路径了。 

绝对路径:是从盘符开始的路径,形如 

C:\windows\system32\cmd.exe 
相对路径:是从当前路径开始的路径,假如当前路径为C:\windows 
要描述上述路径,只需输入 
system32\cmd.exe 
实际上,严格的相对路径写法应为 
.\system32\cmd.exe 
其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。 
假如当前路径为c:\program files 
要调用上述命令,则需要输入 
..\windows\system32\cmd.exe 
其中,..为父目录。 
当前路径如果为c:\program files\common files 

则需要输入 

...\windows\system32\cmd.exe

${pageContext.request.contextPath}

等同于

<%=request.getContextPath()%>

一个是el表达式一个是jsp表达式

意思就是取出部署的应用程序名或者是当前的项目名称

比如我这个项目url地址

我就可以写成这样

${pageContext.request.contextPath}/login

${pageContext.request.contextPath}取出来的是/mytask

/代表了localhost:8080

我在图片地址里输入的是相对路径,本来它的jsp页面url是这样的

然后呢现在变成了这样图片就找不到了

所以是路径出了问题,根据前面的研究改成../t11/imges/687.png,就是到它的父目录去找

可以了

还有一个东西

对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
比如:
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
那么:
s1==s2 是 false      //两个变量的内存地址不一样,也就是说它们指向的对象不一样,
故不相等。
s1.equals(s2) 是 true    //两个变量的所包含的内容是abc,故相等。

再来看我一下我做完的东西吧

启动jetty,进入index.jsp页面

点首页进入学员页面

此时点职业,如果是第一进来就会由拦截器跳到登陆界面

假设我不知道账户密码,可以下面的Don't hava a account?进行注册

随便注册一下

注册成功,然后返回登陆界面看看,我先输入错误的密码

再返回输入正确的密码

登陆进职位页面了,然后我可以返回首页再进来,由于用了cookie就不用输密码了

然后在首页职位这一行最后多了一个登出选项,一开始我还等着cookie失效过了再试拦截器呢,然后从博韬大佬日报里发现还可以写个登出

点击登出

退到了首页,然后再点职位进去看看

好了又要输入密码了,cookie失效拦截器发挥作用了

昨天的那个问题,主要是没理解md5加盐是做什么的锅。我数据库里存的账户密码本来是自己写进数据库表里的,然后不是在输入的时候是加盐后的么,所以一直对不上。现在加了注册功能就可以了,注册的密码会直接加盐之后存到数据库,这样就可以拿两个都是加盐之后的密码做比较了。

//注册页面
@RequestMapping(value = "/regist",method = RequestMethod.GET)
public String regist(){
return "regist";
}

@RequestMapping(value = "/register",method = RequestMethod.POST)
public String register(@RequestParam("user") String user, @RequestParam("password") String password){
String md5= MD5Util.stringToMD5(user+password);
   userService.insert(user,md5);
   logger.info("----->"+user+md5);
   return "success";
}

登出

@RequestMapping(value = "/logout",method = RequestMethod.GET)
public String logout(HttpServletResponse response){
Cookie cookie = new Cookie("token",null);
   cookie.setMaxAge(0);
   response.addCookie(cookie);
   return "redirect:/home";
}

拦截器,用预处理来实现登陆检查

public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

Cookie[] cookie = httpServletRequest.getCookies();
   if (cookie != null) {
for (int i = 0; i < cookie.length; i++) {
if (cookie[i].getName().equals("token")) {
String token = cookie[i].getValue();
               byte[] tk = TypeUtil.hexStringToByte(token);
               byte[] tk1 = DES.decrypt(tk, "12345678");
               String tk2 = new String(tk1);
               String id = "";
               String time = "";
               for (int j = 0; j < tk2.length(); j++) {
char c = tk2.charAt(j);
                   if (c == '=') {
for (int k = j + 1; k < tk2.length(); k++)
time = time + tk2.charAt(k);
                       break;
                   }
id = id + c;
               }
if (userService.select(Integer.parseInt(id)) != null) {

return true;
               }
}
}
}
httpServletRequest.getSession();
   String contextpath = httpServletRequest.getScheme() + "://" + httpServletRequest.getServerName() + ":" + httpServletRequest.getServerPort() + httpServletRequest.getContextPath();
   String uri = contextpath + "/login";
   httpServletResponse.sendRedirect(uri);
   return true;
}

其实这个我还没怎么看懂,需要改改

明天计划的事情:

不懂的再看看,优化代码

遇到的问题:

图片路径问题,md5加盐太好破解了怎么弄复杂点

收获:

相对路径,拦截器,


返回列表 返回列表
评论

    分享到