这是今天写的时候遇到的问题,首先说说JSP与servlet配合时的问题
建立了一个filter,验证session里的username属性,如果为空则认为未登陆,返回到登陆页面,而登陆是JSP做表现层,servlet做控制层,可是一直不能成功。原因是在JSP的form提交之后,其实session里并没有username属性,也就是说其实还是相当于JSP提交之后,要再向相关的servlet请求,也是一次请求,和用户直接输入地址访问是没有差别的,当然不能通过filter了。说到底,这最终还是两个servlet,还是需要两次请求才可以。可以在JSP里手动向session添加username解决问题,当然这是很蠢的办法,要想解决还是应该更精心地设计filter。
另外一个就是学习servlet的异步调用方法,发现一直没法出异步进程结束后的结果。看了一下tomcat的日志,原来是一个filter的问题,有个chain不支持异步调用,这个就比较简单了,在web.xml中相关filter中添加<async-supported>true</async-supported>属性就可以了。问题虽然很简单,但是也提醒了这个filter真是应该慎用,不然就会出很多问题。