请教一下Jfinal拦截器中页面跳转

发布于 2021-11-30 16:00:43 字数 3507 浏览 735 评论 2

@Jfinal 您好,最近在尝试使用Jfinal写一个小demo试试手,Jfinal用起来好赞的!感谢!

然而在实现登录验证功能时,我想这样:对登录进行密码校验之后用getSession().setAttribute("isLogin","lalala");存,跳转到展示数据的主页redirect("/main");。

假如用户直接访问/main,我会在其处理的action所绑的第一个拦截器LoginIntercept进行验证“isLogin”的正确性的操作,若null或不是"lalala",则inv.getController().render("login.jsp")、或者inv.getController().redirect("/login"),然而发现都不能跳转到想要的页面,提示:

HTTP ERROR 404

Problem accessing /index.jsp. Reason:

Not Found

Powered by Jetty:// ;


以及:

八月 10, 2015 9:58:29 下午 org.apache.jasper.servlet.JspServlet serviceJspFile
严重: PWC6117: File "E%3A%5Cworkspace%5Cgreport_car_test%5CWebRoot%5Cindex.jsp" not found

附上相关代码片段:

配置路由:


public void configRoute(Routes me) {
		me.add("/", LoginController.class); // 第三个参数为该Controller的视图存放路径,缺省与第一个参数相同
		
		me.add("/main",OnlineController.class,"/");
		
	}



进localhost默认渲染login.jsp,login.jsp里面会<form id="newForm" method="post" name='newForm' action='/login'>用户密码交由LoginValidator.class校验,校验通过后set参数再 redirect("/main")。



public class LoginController extends Controller {
	public void index() {
		render("login.jsp");
	}
	
	@Before(LoginValidator.class)
	public void login(){
		getSession().setAttribute("isLogin","lalala");
		redirect("/main");
	}

}

这里想交给LoginIntercept校验是否已登录


public class OnlineController extends Controller {
	@Before({LoginIntercept.class,FileExistIntercept.class})
	public void index() {	
	    //乱七八糟的代码略
            render("main.jsp");
	}

然而并不行

public class LoginIntercept implements Interceptor {
	public void intercept(Invocation inv) {
		Controller ctl = inv.getController();
		String isLogin = (String) ctl.getSession().getAttribute("isLogin");
		if(isLogin == null || !isLogin.equals("lalala")){
			System.out.println("wtf!");
			ctl.render("login.jsp");
		}
	}
}



请问是哪里设计有问题还是?

难道是缺了inv.invoke();。。。我去试试。。。


加了else{inv.invoke();}后这层是可以了


但是第二个拦截器那里又有问题了,里面有



String pathname = PathKit.getWebRootPath() + File.separator + "online_history" + File.separator
				+ date + File.separator
				+ hour + ".html";
		File file = new File(pathname);
		if (file.exists()) {//本地有文件时
			try {
				inv.getController().renderHtml(FileUtils.readFileToString(file));
			} catch (IOException e) {
				System.out.println("读取缓存网页数据失败");
				e.printStackTrace();
			}
		} else if(ifGetNewData){//本地没文件则去实时取
			inv.invoke();
		}else{
			inv.getController().renderText("并没有此天的历史记录");
		}



inv.getController().renderHtml(FileUtils.readFileToString(file));这一句,当当地文件不存在时,inv.invoke();去进行OnlineController的index()的后续动作时,正常;但当当地文件存在时,直接 inv.getController().renderHtml(FileUtils.readFileToString(file));没法展示,为何呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

终陌 2021-12-01 01:22:10

可以不需要 nginx 就可以,只不过需要通过多域名映身到多个项目

执手闯天涯 2021-11-30 22:15:50

@JFinal 额,,其实我问的就是只有IP没多域名,同个tomcat咋办。。算了不行我就用tomcat或者嵌入一下完整的jetty试试吧。感谢前辈提供Jfinal这么好的框架,辛苦了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文