在使用controller返回试图之后,jsp页面使用相对路径引用的资源发生错误

问题描述:

    前台跳转到controller执行完业务之后,controller跳转到前台的jsp页面(jsp页面可以正确访问),但是前台jsp页面所有使用相对路径引用的资源路径都发生了错误,所有资源的路径前面都添加上了一个controllerKey,导致资源无法正常访问。

    controller返回试图使用绝对路径


controller

public void index() {
		//查询游戏数据
		Integer gameId = getParaToInt("gameId");
		String iptvName = getSessionAttr("iptvName");
		if(gameId != null && iptvName != null){
			User user = User.dao.queryUserByIPTVName(iptvName);
			Game game = Game.dao.queryGameById(gameId);
			Integer userId = user.get("u_id");
			
			System.out.println("GameDetailController------gameId=" + gameId);
			System.out.println("GameDetailController------userId=" + userId);
			System.out.println("GameDetailController------game=" + game.toString());
			System.out.println("GameDetailController------UserCollection=" + UserCollection.dao.queryUserCollectionById(userId, gameId).toString());
			
			setAttr("isCollection", UserCollection.dao.queryUserCollectionById(userId, gameId) != null ? true : false);
			setAttr("game", game);
		}
		renderJsp("/gameDetail.jsp");
	}

路由配置

@Override
	public void configRoute(Routes me) {
		me.add("/index", IndexController.class);
		me.add("/user", UserController.class);
		me.add("/userCollection", UserCollectionController.class);
		me.add("/gameDetail", GameDetailController.class);
	}



jsp页面

<div class="article-btn00"><img id="btn00" src="images/gameDetail/btn-collection01.png" alt=""></div>
	<div class="article-btn01"><img id="btn01" src="images/gameDetail/btn-play01.png" alt=""></div>
	<div class="article-btn02"><img id="btn02" src="images/gameDetail/btn-back01.png" alt=""></div>
	

错误内容:

    QQ截图20160808180510.png

评论区

JFinal

2016-08-08 18:30

context path 设置为 "/" 即可,看一下这篇博文: http://my.oschina.net/jfinal/blog/353062

ityuri

2016-08-18 14:48

@JFinal
首先非常感谢您的回复。您的博文我看了一下,但是好像描述的不是这个问题。我重新理一下这个问题。
问题描述:
使用jfinal中,如果在controller之中用非默认方法(index),而是用其它函数,那么返回视图到jsp界面之后。
会出现该jsp页面使用相对路径引用的资源的相对url路径问题。会在相对路径之前加上所使用的controller的method-name

解决办法:
1.使用redriect重定向,可以解决,但是不能使用request作用域了
2.是因为jsp页面中缺少了一个基本的标签,添加上了base标签之后就可以解决了,eclipse项目默认生成的项目是没有这个标签的,所以说如果想简单处理,加上就可以解决
3.使用web项目根路径引用图片、样式表等资源就可以
4.只使用所有控制器的index方法

JFinal

2016-08-18 17:01

@ityuri 页面中的资源都用的相对路径,所以在请求以后这些资源会以浏览器 url 栏中当时的路径有关,例如:
你的图片 src="images/123.jpg",你的浏览器地址栏中的是 "/FBBL/gamesDetail",所以最终的资源路径是 src="/FBBL/gamesDetail/images/123.jpg",这个是 web 规范决定的,与 jfinal 无关
解决办法极其简单,资源路径使用绝对路径即可,以 "/" 打头即为绝对路径,这样的话路径就不会随着浏览器地址栏中的路径乱来了

JFinal

2016-08-18 17:02

具体一点,将资源路径改为: src="/images/123.jpg", context path 改为 "/",这样就不会在 url 中出现 FBBL 这样的前缀了

ityuri

2016-08-19 11:47

@JFinal 受教了,非常感谢!

热门反馈

扫码入社