【Struts2一】入门
来源:互联网 发布:哔哩哔哩for mac 编辑:程序博客网 时间:2024/06/03 22:51
Struts2是一个MVC框架!
框架的作用是让我们操作更爽!更优雅!
比如更加优雅的url配置,更简洁的获取表单数据,更爽快的方法级别的细粒度控制。。。。
一。Struts2工程步骤:
1.建立一个web工程,取名mystruts2,在web.xml中配置过滤器:
<filter >
<filter-name >struts2 </filter-name>
<filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
</filter >
<filter-mapping >
<filter-name >struts2 </filter-name>
<url-pattern >/* </url-pattern>
</filter-mapping >
2.导入相关包
3.源码根目录下的struts.xml:
解决struts.xml没有提示:
preference->搜索xml-> xml Catalog ->add 选择dtd文件的位置,key值为从xml文件copy!
<?xml version= "1.0" encoding ="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="user" namespace="/" extends="struts-default" >
<action name= "userAction" method ="add"
class= "com.oterman.struts.bean.UserAction" >
<result name= "index">index.jsp </result>
</action>
</package >
</struts>
4.新建一个action:UserAction,该action就是上面配置的action,里面有一个add方法,返回"index"
5.访问:localhost/mystruts2/userAction.action,既可以看到jsp页面!
extends 机制:
<package name="user" namespace="/aa" extends="struts-default">
<action name="userAction" method="add" class="cn.itheima03.struts2.action.UserAction">
<result name="index">index.jsp</result>
</action>
</package>
<package name="aa" namespace="/bb" extends="user"></package>
说明:
1、struts2配置文件中的包具有继承机制
2、name为aa的包已经把name为user的包的所有的内容继承过来了
3、访问命名空间为bb的userAction也行
4、因为在struts-default.xml文件中拥有struts2运行时的所有的内容,所以必须继承过来才能使用struts2
5、所以一个配置文件中的package必须继承struts-default.xml文件
6、在struts-default.xml文件中,定义了一些结果集,这些结果集是struts2运行的关键
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
<action name="userAction" method="add" class="cn.itheima03.struts2.action.UserAction">
<result name="index">index.jsp</result>
</action>
</package>
<package name="aa" namespace="/bb" extends="user"></package>
说明:
1、struts2配置文件中的包具有继承机制
2、name为aa的包已经把name为user的包的所有的内容继承过来了
3、访问命名空间为bb的userAction也行
4、因为在struts-default.xml文件中拥有struts2运行时的所有的内容,所以必须继承过来才能使用struts2
5、所以一个配置文件中的package必须继承struts-default.xml文件
6、在struts-default.xml文件中,定义了一些结果集,这些结果集是struts2运行的关键
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
如果namespace配置为/aa,那么/aa/uaseAction.action能正常访问action,但是结果集访问不到,需要将结果集放于webroot/aa/index.jsp;
/aa/bb/userAction.action,能访问到action,因为本级查找不到会往上一级查找,但是最多查找到/aa这一级!
action 的三种写法:
1、简单的一个javabean
2、让一个action 实现接口Action
public class ExecutionAction implements Action{
execute(){
}
}
在配置文件中
<action name="executeAction" class="cn.itheima03.struts2.action.ExecuteAction">
这里不需要写method属性,默认执行execute方法
3、让一个action类继承actionSupport
public class ActionSupport implements Action, Validateable, ValidationAware
说明:在ActionSupport类中做了很多的操作,比如:验证器、国际化等。程序员只要重写execute方法即可
4、在struts的配置文件中,在写action元素的时候,可以不写class属性
<action name="defaultAction">
<result name="success">index.jsp</result>
</action>
根据struts-default.xml
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
如果没有class属性,则struts2会去查找ActionSupport
2、让一个action 实现接口Action
public class ExecutionAction implements Action{
execute(){
}
}
在配置文件中
<action name="executeAction" class="cn.itheima03.struts2.action.ExecuteAction">
这里不需要写method属性,默认执行execute方法
3、让一个action类继承actionSupport
public class ActionSupport implements Action, Validateable, ValidationAware
说明:在ActionSupport类中做了很多的操作,比如:验证器、国际化等。程序员只要重写execute方法即可
4、在struts的配置文件中,在写action元素的时候,可以不写class属性
<action name="defaultAction">
<result name="success">index.jsp</result>
</action>
根据struts-default.xml
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
如果没有class属性,则struts2会去查找ActionSupport
二。配置文件中的通配符:
有了通配符,对于url的操作更加的优雅了 !通配符解决的就是url与action中的方法的映射问题!
<struts>
<package name="pattern1" namespace="/" extends="struts-default" >
<action name= "a_add" method ="add"
class= "com.oterman.struts.action.PatternAction" >
<result >index.jsp </result>
</action>
<action name= "b_add" method ="add"
class= "com.oterman.struts.action.PatternAction" >
<result >index.jsp </result>
</action>
<action name= "c_add"
class= "com.oterman.struts.action.PatternAction" >
<result >index.jsp </result>
</action>
</package >
</struts>
如上所示:为了实现多个地址访问同一个方法,可以使用通配符:
<action name= "*_add" method ="add"
class= "com.oterman.struts.action.PatternAction" >
<result >index.jsp </result>
</action>
浏览器访问时,可以通过url来指定要访问的方法:a_add!add.action, 感叹号后面表示要访问的方法!
通配符二:
<package name="pattern2" namespace="/" extends="struts-default" >
<!--
<action name="personAction" method="add"
class="com.oterman.struts.action.PersonAction">
<result >index.jsp</result>
</action>
<action name="studentAction" method="add"
class="com.oterman.struts.action.StudentAction">
<result >index.jsp</result>
</action>
-->
<action name= "*" method ="add"
class= "com.oterman.struts.action.{1}" >
<result >index.jsp </result>
</action>
</package >
通配符三:
TeacherAction中有add ,delete ,update方法
<action name= "teacherAction" class="com.oterman.struts.action.TeacherAction" >
<result >index.jsp </result>
</action>
采用如上配置,不指定method属性,在url中指定要访问的方法!
http://localhost/mystruts2/teacherAction!delete.action访问delete方法;(.action可以不要!!!)
通配符映射
在struts2的配置文件中可以使用通配符映射
<action name="personAction_*">
其中的*可以代表任意字符
*可以和{1}匹配
{1}可以出现在method、class、result中
method={1}
class="……{1}"
<result>………{1}.jsp</result>
<action name="*_*">这个是一个变态的写法,效率比较低,而且很容器和其他的url产生冲突
说明:通常的写法有两种
1、<action name="userAction_*" method="{1}" class=".....UserAction">
要写具体的类,方法可以用*来代替
2、方法的动态调用来做
在struts2的配置文件中可以使用通配符映射
<action name="personAction_*">
其中的*可以代表任意字符
*可以和{1}匹配
{1}可以出现在method、class、result中
method={1}
class="……{1}"
<result>………{1}.jsp</result>
<action name="*_*">这个是一个变态的写法,效率比较低,而且很容器和其他的url产生冲突
说明:通常的写法有两种
1、<action name="userAction_*" method="{1}" class=".....UserAction">
要写具体的类,方法可以用*来代替
2、方法的动态调用来做
三.拦截器:
1、如果有一个比较复杂的逻辑,在没有拦截器的情况下,会把这些需求全部写在action的方法中
这样会导致方法的结构不好
2、会把一些重用性的内容写在拦截器中
3、要把这些重用性比较高的代码以很好的组织形式结合起来,一个拦截器是不够的,所以需要
拦截器栈
4、怎么样写一个拦截器
1、声明一个拦截器
<interceptors>
声明了一个拦截器
<interceptor name="imageInterceptor" class="cn.itheima03.struts2.interceptor.MyInterceptor"></interceptor>
声明了一个拦截器栈:可以放很多个拦截器
<interceptor-stack name="myInterceptor">
<interceptor-ref name="imageInterceptor"></interceptor-ref>
为struts2默认执行的拦截器
interceptor-ref即能指向拦截器,也能指向拦截器栈
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
2、使用拦截器
<default-interceptor-ref name="myInterceptor"></default-interceptor-ref>
这样就可以覆盖struts-default.xml文件的内容了
3、写的拦截器类必须实现Interceptor接口
intercept(){
return invocation.invoke();//往下继续执行
}
1、如果有一个比较复杂的逻辑,在没有拦截器的情况下,会把这些需求全部写在action的方法中
这样会导致方法的结构不好
2、会把一些重用性的内容写在拦截器中
3、要把这些重用性比较高的代码以很好的组织形式结合起来,一个拦截器是不够的,所以需要
拦截器栈
4、怎么样写一个拦截器
1、声明一个拦截器
<interceptors>
声明了一个拦截器
<interceptor name="imageInterceptor" class="cn.itheima03.struts2.interceptor.MyInterceptor"></interceptor>
声明了一个拦截器栈:可以放很多个拦截器
<interceptor-stack name="myInterceptor">
<interceptor-ref name="imageInterceptor"></interceptor-ref>
为struts2默认执行的拦截器
interceptor-ref即能指向拦截器,也能指向拦截器栈
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptor"></default-interceptor-ref>
3、写的拦截器类必须实现Interceptor接口
intercept(){
return invocation.invoke();//往下继续执行
}
0 0
- 【Struts2一】入门
- Struts2入门(一)
- struts2入门(一)
- Struts2入门(一)
- Struts2入门(一)
- Struts2入门学习(一)
- Struts2入门(一)
- Struts2学习笔记一之Struts2入门
- struts2+spring+mybatis入门一
- Struts2自学入门(一)
- 【struts2】(一)入门伊始
- Struts2 入门讲解(一)
- struts2入门程序(一)
- 总结一:Struts2入门与配置
- 传智Struts2笔记(一)入门
- 传智Struts2笔记(一)入门
- java web(二) struts2入门一
- struts2.2.x入门应用(一)
- Ubuntu12.04 安装PyCharm
- Android ListView滑动过程中控件显示重复/错误问题之原理分析...
- 细说LoadRunner参数化(转)
- 从密码学角度看腾讯常用的TEA加密算法
- 编码占位
- 【Struts2一】入门
- android ndk jni 字符串 String jstring
- gdb调试带参数程序
- 关闭个人网站主页
- centos 7 安装gamit和GMT
- 已超过传入消息(65536)的最大消息大小配额
- 欢迎使用CSDN-markdown编辑器
- 时光荏苒须当惜,风雨阴晴勤值历。
- postgres 递归查询 示例