说明路径不对
单词打错,妈的,多少年都没犯这种低级错误了。。。。擦
action中没有class属性,只调用了默认的action。
我自己是这样理解的,因为auth没有指定对应的action,所以系统会自动生成一个默认的action,该action默认返回SUCCESS。在视频中,老师第一次通过auth可以直接访问/WEB-INF/page/manager.jsp,就是因为那个默认的action返回了一个SUCCESS,而且,那时候并没有加入我们自定义的拦截器,所以可以直接访问WEB-INF下的文件。后来,我们自定义了的拦截器和拦截器栈,在自定义拦截器中添加了相关的处理代码,并在auth的action中引用了myStack,这时候auth执行的流程发生了变化。当用户直接在URL中输入auth后,这时候它会经过多个拦截器,自然也会被我们自定义的拦截器拦截到,接着执行拦截器中的处理代码,判断用户是否成功登陆过,如果没有成功登陆过,则返回登陆页面;如果已成功登陆过,则通过invoke()方法调用默认的action,因为默认的action默认返回SUCCESS,然后跳转到/WEB-INF/page/manager.jsp页面。整个执行的流程应该就是这样子的。。。
回头去看下第4章的“Struts2内建拦截器”,你就知道答案了
struts2默认只拦截以.action或者无后缀名得了url,不会拦截jsp或者html文件
你少写了一行 <result name="login">/login.jsp</result>
空指针异常
在LoginAction.java中已经把登录信息传入到session会话中去了,而ActionContext获取的session是用来获取登录信息的,以判断用户是否已经登录。
auth就是你直接访问manager.jsp它对你进行限制,就是你url输入/项目/auth时,它就先进入拦截器了呀,然后拦截器判断你登录没有,并给你返回结果集,如果没登录,拦截器给你返回"login",根据你配置的结果集它找到login.jsp进行登录
配置的login那个action只是为了你直接访问login去登录
是因为<action>中的子标签<result>有一个默认的“type=dispatcher”(转发),如果设置为“type=redirect”(重定向),就会改变url,但数据会丢失
你是不是login.action中success打了引号
有的是默认建立时附带index.jsp
对应所调用的Action中的方法的返回值,视频中返回的是内置变量SUCCESS,其实就是个String类型的success..,另外这种问题你可以使用system.out.println()的方法去看看输出的具体是什么.
说白了 invoke()返回了一个字符串 但是你的action 的 <result name="返回的字符串">/login.jsp</result>
<result name 你没有设置
如果您那些基本配置,已经Action类中的set/get方法都正确的话.我实在看不出您的代码有那些错误!
几点建议,你可以调下试试:1:把你配的拦截器放在跳转上面,即
<interceptor-ref name="myStack"></interceptor-ref>
<result name="login">/login.jsp</result>
2: return 建议加引号 SUCCESS;虽然hibernate内置有返回对象了,但是保险点.
时间好像有点长...不知道你解决了没有 这个原因多半是LoginAction.java中的session.put部分出现问题。
配置文件.xml 和 .action文件 中的 login 大小写要一样才行!!!
这是做操session对象的一种方法,实现sessionaware接口 ,private 一个 map类型 的session对象,set方法就是设置它。跟一个普通属性类似啊,如定义一个name,生成set、get方法
public void setSession(Map<String, Object> session) {
this.session = session;
}
不是arg0,后来把private Map<String,Object> session改成这句private Map<String,Object> session = ActionContext.getContext().getSession();就不报错了
因为Manager.jsp页面不在WEB-INF目录下,浏览器输入URL是访问不到的,所以需要auth来跳转,也因此只需要对auth配置拦截器判断是否已经登录,登录了就放行执行auth这个ACTION的内容也就是跳转,没登陆就跳转到登录页面login.jsp
通过password和username的getter/setter方法来获取到,我是这样觉得的
原来是登陆不需要拦截,登陆的action要放到别的包下面,与使用拦截器的包分开即可