发表于: 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”就不再指向正确的路径了。
绝对路径:是从盘符开始的路径,形如
则需要输入
...\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加盐太好破解了怎么弄复杂点
收获:
相对路径,拦截器,
评论