建一个web工程, 名为test_struts2,然后
struts2配置文件中:
<action name="aa" class="com.view.Test" method="test">
其中 name="aa",在WebRoot下创建一个包,名字为aa,然后运行http://127.0.0.1:8080/test_struts2/aa
就会出现错误提示
Stacktraces
There is no Action mapped for namespace / and action name aa/. - [unknown location] 什么原因呢
struts2配置文件中:
<action name="aa" class="com.view.Test" method="test">
其中 name="aa",在WebRoot下创建一个包,名字为aa,然后运行http://127.0.0.1:8080/test_struts2/aa
就会出现错误提示
Stacktraces
There is no Action mapped for namespace / and action name aa/. - [unknown location] 什么原因呢
改成http://127.0.0.1:8080/test_struts2/aa.action
比如把struts2的配置文件配置成:
<action name="manager" class="com.view.TestAction">
<result>/index.jsp</result>
</action>然后在WebRoot下建一个包,名字为manager,然后在manager包中创建文件delete.jsp,我想达到的效果是,当直接输入
http://127.0.0.1:8080/test_struts2/manager/delete.jsp的时候,转到index.jsp页面,
但是结果却是能直接访问delete.jsp文件。com.view.TestAction.java的代码如下:
public class TestAction extends ActionSupport{
public String execute() {
return Action.SUCCESS;
}
}
<action name="manager" class="com.view.TestAction">
<result>/index.jsp</result>
</action>
并没有起作用
我原本是用拦截器拦的,但是发现没有走配置拦截器的action。
struts2我是这样配置的,不知道错在哪,代码如下:<struts>
<constant name="struts.devMode" value="true" />
<package name="Myinterceptor" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="my" class="interceptor.MyInterceptor">
</interceptor>
<action name="manager" class="view.InterceptorAction" >
<result name="hasLogin">/manage/manage.jsp</result>
<result name="noLogin">/index.jsp</result> <!--用户没有登陆> <interceptor-ref name="my"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
<filter>
<filter-name>MyInterceptor</filter-name>
<filter-class>interceptor.MyInterceptor</filter-class>
</filter><filter-mapping>
<filter-name>MyInterceptor</filter-name>
<url-pattern>/manage/*</url-pattern>
</filter-mapping>
这样才能禁止非法访问jsp
struts.xml只能拦截action,对jsp无效
HttpServletRequest request=(HttpServletRequest)sreq;
HttpServletResponse response =(HttpServletResponse)sres;
if(request.getSession().getAttribute("userName")==null) {
response.sendRedirect("/index.jsp");
}
chain.doFilter(request,response);
}我在7楼说的不对,不是用拦截器,应该是过滤器,9楼和该楼是代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter>
<filter-name>MyInterceptor</filter-name>
<filter-class>interceptor.MyInterceptor</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyInterceptor</filter-name>
<url-pattern>/manager/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list></web-app>运行tomcat后出现如下异常:
严重: Exception starting filter MyInterceptor
java.lang.ClassCastException: interceptor.MyInterceptor还有一个疑问,如果这样配置web.xml的话,web.xml里有
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
,这样不是走不到
<filter-mapping>
<filter-name>MyInterceptor</filter-name>
<url-pattern>/manager/*</url-pattern>
</filter-mapping>
吗?
java.lang.ClassCastException 可能是interceptor.MyInterceptor类的代码有问题,代码如下public class MyInterceptor implements Filter {
public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)sreq;
HttpServletResponse response =(HttpServletResponse)sres;
if(request.getSession().getAttribute("userName")==null) {
response.sendRedirect("/index.jsp");
}
chain.doFilter(request,response);
}
}