花井美纱影音先锋合集:Struts2学习总结
来源:百度文库 编辑:偶看新闻 时间:2024/05/10 09:00:04
这周花了一个星期的时间学习了Struts2,今天就总结一下,以便后面使用时可以参考,顺便理理思路,嘿嘿。
Struts和Struts2都是属于控制转发的框架,而在Struts2中功能比较强大,而且使用方便,不过我在好多测试中都很费神,因为不报错,也不出来我想要的结果,很无奈,嘿嘿!
首先说下它的应用如何搭建:在老版本中有5个必须包,但是现在我用的是2.1.8这个版本就不止5个jar包了,
包括:
struts2-core-2.1.8.jar(这是struts2的核心包),commons-loging-1.0.4.jar(通用日志记录包),
freemarker-2.3.15.jar(是一个模板引擎,一个基于模板生成文本输出的通用工具),
ognl-2.7.3.jar(这是struts2的表达式语言库即对象图导航语言),
xwork-core-2.1.6.jar(由于struts2就是从xwork衍生过来的,所以这包夜是必须的), commons-fileupload-1.2.1.jar(struts2的上传下载包),
common-io-1.3.2.jar(这个包在低版本中是不需要的),
struts-convention-plugin-2.1.8.jar(这是注解配置用的),我在这列出了这8个jar包基本是就够用了。
导入包后如果不用注解配置,那struts2也肯定有个配置文件,默认叫struts.xml,这个文件必须放在classes中,也就是放在src下。
这两件事做完后就要在web.xml中进行配置,因为struts2跟1不一样,它不用配置servlet,而是过滤器,配置如下(固定写法):
struts2
org.apache.struts2.dispatcher.FilterDispatcher
actionPackages
com.mwt.action.zhujie
struts2
/*
以上步骤做完之后,struts2的架子也就搭起来了,好像不是很复杂哦!
接下来我主要说下struts2的运行流程和它的重点也就是常用的功能:
当我们在页面发出一个请求之后,由于服务器提前已经加载了web.xml,所以这个过滤器就会拦截到所有的请求,然后会默认去classes下的struts.xml中找对应的action(即action配置标签中的name属性),在struts2中访问后缀是.action,不写后缀也会被默认加上.action。action执行完后都会返回一个字符串,此时在去struts.xml中找result标签的name属性对应的资源,可以是jsp、html、.action等。
举例说明:
1、action
struts2中的action很简单,不用集成任何类,也不用实现任何接口,这和struts1是有区别的,他只要有一个返回字符串的execute方法就行了,但如果有多个方法时,名字也可以随便起,不一定是execute。
2、struts.xml
这个配置文件是struts2的核心配置文件,这个没什么可说的,就直接贴出代码再代码中详细的介绍吧:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
/success.jsp
/fail.jsp
/global/a2
/methodTest/add.jsp
/methodTest/update.jsp
/methodTest/delete.jsp
/methodTest/add.jsp
/methodTest/update.jsp
{1}User.jsp
a2
/success.jsp?username=${username}
/success.jsp
/fail.jsp
s2
/success.jsp
3、在看看action,这个action很简单就一个方法。
public class LoginAction extends ActionSupport{
User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
if(user.getUsername().trim().equalsIgnoreCase("baobao"))
return SUCCESS;
//因为继承了ActionSupport,所以可以直接这样返回,其实内部也是返回了一个小写的success字符串。
return ERROR;
}
}
4、在看看页面的访问方式:
add 访问命名空间为test2下的name值为m的这个action种方法名叫add()的方法。
s1
s1
这两中写法是一样的。
5、页面获取值方式:
欢迎您:
ognl获得的用户名称:
用el也可以代替上面的struts2标签(说明struts2的值栈中的内容也放进了request作用域!):${user.username}
调用user对象中的公共方法(属于值栈中):
调用JDK中静态方法(返回个0到1的随机数):
如果是java.lang.Math下的类可以省略掉前面的类:
action中静态方法调用:
6、在action中如何获得HttpServletRequest对象,有了它HttpSession也就很容易获得了。
/*
* 第一种方式:用ServletActionContext这个类的getRequest()静态方法就可以直接获取request,但必须在方法中 * 初始化,不能直接给类成员赋值。
* 第二种方式:用IOC控制反转直接注入request,这是struts2自带的注入,只要实现了ServletRequestAware这个借 * 口再实现了它的set方法就行了
* 今天就用第二种方式做个试验
* 注意:其实在用struts2时很少用到request这个对象,因为在action中所有的属性都会通过struts2的值栈技术直接 * 传到页面或者另一个action。
*
*/
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
//不用request,就用${}再页面直接取值,这种值栈技术很难让人琢磨
//s或者其他域只要有get和set方法就能在令一个action或者页面直接取值。
private String s;
private double d;
public String execute(){
request.setAttribute("username","感冒快点好吧!");
s="值栈技术存值";//在页面直接用${s}取值
d=1232354;//在另一个action中取值
return SUCCESS;
}
7、最后在说下struts2的注解,注解的好处显而易见,它可以让框架完全脱离xml配置文件,很容易学习,配置起来也相当方便,我还是挺喜欢这种配置的,其实好多框架都用到了注解,比如hibernate、spring都有注解,这些就跟JDK中的注解一样,比如@Override这个就是重写提示的注解。
我用struts2就做了一个小例子,可结果很令人失望,一直不出效果,难道与版本有关系?哎,还是先贴出代码吧!
/*
* struts2注解(先看action注解,这个struts2真的很奇怪,老版本跟新版本的注解变化很多)
* 老版本直接用,而且注解标示也不多,action也就4个,而这新版本我用的是struts2.1.8还要再导个包
* 叫struts2-convention-plugin-2.1.8.jar幸好这包在源码包中有。
*/
//首先标注必须在web.xml中配置注册下
//@ParentPackage(value="struts-default")默认就这包可以不写
//@Namespace(value="space")可以不要命名空间
//@Result(name="success",location="/success.jsp")这里只有一个跳转结果时用,在老版本这个location要换成value
@Namespace(value="space")
@Action(value="test",results={
@Result(name="success",location="/success.jsp"),
@Result(name="error",location="/fail.jsp",type="redirect")
})
public class ZhujieAction extends ActionSupport{
//这里的名字可必须以Action为后缀,访问时就以前面的单词首字母改成小写就行了。(不过有多个方法怎么分辨还不清楚,可能会在@Action()中配置多个value属性。)
public String test(){
if(1>0) return SUCCESS;
else return ERROR;
}
}//现在还是测试不成功,算了,先放弃吧!代码绝对没问题(多么自信的男人呀,嘿嘿!)。
好了,Struts2就先写到这,这些都是比较常用的知识点,其实struts2还有好多功能呢,比如自带了好多拦截器跟过滤器作用差不多,不过功能比较强大,还有它的好多标签在页面我也很少用,我从来不专门学习一个框架的标签的,感觉很浪费时间,而且意义不大,struts2还有自己的文件上传下载、异常处理、OGNL导航表达式等等,这些就等用到了再学吧。好了就先说到这吧,今天上班来的早,公司就我一个人,太安静了,所以突然说了这么多,嘿嘿!
补充:
★Struts中的OGNL(对象图导航语言)采用了struts2的标签获取值,因此我很少用,上面也说过不喜欢用某种框架自带的标签,但见了要能认识。比如:Struts2中的HttpSession已经被封装成了Map类型,只要类实现了SessionAware这接口,重写了setSession就可以自动注入进去,在页面用的话就直接 ,这只是#的其中一种用法,其实它也就等价于session.getAttribute("userName");不过我还是习惯用HttpSession。
Struts和Struts2都是属于控制转发的框架,而在Struts2中功能比较强大,而且使用方便,不过我在好多测试中都很费神,因为不报错,也不出来我想要的结果,很无奈,嘿嘿!
首先说下它的应用如何搭建:在老版本中有5个必须包,但是现在我用的是2.1.8这个版本就不止5个jar包了,
包括:
struts2-core-2.1.8.jar(这是struts2的核心包),commons-loging-1.0.4.jar(通用日志记录包),
freemarker-2.3.15.jar(是一个模板引擎,一个基于模板生成文本输出的通用工具),
ognl-2.7.3.jar(这是struts2的表达式语言库即对象图导航语言),
xwork-core-2.1.6.jar(由于struts2就是从xwork衍生过来的,所以这包夜是必须的), commons-fileupload-1.2.1.jar(struts2的上传下载包),
common-io-1.3.2.jar(这个包在低版本中是不需要的),
struts-convention-plugin-2.1.8.jar(这是注解配置用的),我在这列出了这8个jar包基本是就够用了。
导入包后如果不用注解配置,那struts2也肯定有个配置文件,默认叫struts.xml,这个文件必须放在classes中,也就是放在src下。
这两件事做完后就要在web.xml中进行配置,因为struts2跟1不一样,它不用配置servlet,而是过滤器,配置如下(固定写法):
以上步骤做完之后,struts2的架子也就搭起来了,好像不是很复杂哦!
接下来我主要说下struts2的运行流程和它的重点也就是常用的功能:
当我们在页面发出一个请求之后,由于服务器提前已经加载了web.xml,所以这个过滤器就会拦截到所有的请求,然后会默认去classes下的struts.xml中找对应的action(即action配置标签中的name属性),在struts2中访问后缀是.action,不写后缀也会被默认加上.action。action执行完后都会返回一个字符串,此时在去struts.xml中找result标签的name属性对应的资源,可以是jsp、html、.action等。
举例说明:
1、action
struts2中的action很简单,不用集成任何类,也不用实现任何接口,这和struts1是有区别的,他只要有一个返回字符串的execute方法就行了,但如果有多个方法时,名字也可以随便起,不一定是execute。
2、struts.xml
这个配置文件是struts2的核心配置文件,这个没什么可说的,就直接贴出代码再代码中详细的介绍吧:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
a2
3、在看看action,这个action很简单就一个方法。
public class LoginAction extends ActionSupport{
User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
if(user.getUsername().trim().equalsIgnoreCase("baobao"))
return SUCCESS;
//因为继承了ActionSupport,所以可以直接这样返回,其实内部也是返回了一个小写的success字符串。
return ERROR;
}
}
4、在看看页面的访问方式:
add 访问命名空间为test2下的name值为m的这个action种方法名叫add()的方法。
s1
s1
这两中写法是一样的。
5、页面获取值方式:
欢迎您:
用户名:${param.username}
Request作用域测试:username=${username}
s=${s}
ognl获得的用户名称:
用el也可以代替上面的struts2标签(说明struts2的值栈中的内容也放进了request作用域!):${user.username}
<%=request.getAttribute("user.username")%>
调用user对象中的公共方法(属于值栈中):
调用JDK中静态方法(返回个0到1的随机数):
如果是java.lang.Math下的类可以省略掉前面的类:
action中静态方法调用:
6、在action中如何获得HttpServletRequest对象,有了它HttpSession也就很容易获得了。
/*
* 第一种方式:用ServletActionContext这个类的getRequest()静态方法就可以直接获取request,但必须在方法中 * 初始化,不能直接给类成员赋值。
* 第二种方式:用IOC控制反转直接注入request,这是struts2自带的注入,只要实现了ServletRequestAware这个借 * 口再实现了它的set方法就行了
* 今天就用第二种方式做个试验
* 注意:其实在用struts2时很少用到request这个对象,因为在action中所有的属性都会通过struts2的值栈技术直接 * 传到页面或者另一个action。
*
*/
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
//不用request,就用${}再页面直接取值,这种值栈技术很难让人琢磨
//s或者其他域只要有get和set方法就能在令一个action或者页面直接取值。
private String s;
private double d;
public String execute(){
request.setAttribute("username","感冒快点好吧!");
s="值栈技术存值";//在页面直接用${s}取值
d=1232354;//在另一个action中取值
return SUCCESS;
}
7、最后在说下struts2的注解,注解的好处显而易见,它可以让框架完全脱离xml配置文件,很容易学习,配置起来也相当方便,我还是挺喜欢这种配置的,其实好多框架都用到了注解,比如hibernate、spring都有注解,这些就跟JDK中的注解一样,比如@Override这个就是重写提示的注解。
我用struts2就做了一个小例子,可结果很令人失望,一直不出效果,难道与版本有关系?哎,还是先贴出代码吧!
/*
* struts2注解(先看action注解,这个struts2真的很奇怪,老版本跟新版本的注解变化很多)
* 老版本直接用,而且注解标示也不多,action也就4个,而这新版本我用的是struts2.1.8还要再导个包
* 叫struts2-convention-plugin-2.1.8.jar幸好这包在源码包中有。
*/
//首先标注必须在web.xml中配置注册下
//@ParentPackage(value="struts-default")默认就这包可以不写
//@Namespace(value="space")可以不要命名空间
//@Result(name="success",location="/success.jsp")这里只有一个跳转结果时用,在老版本这个location要换成value
@Namespace(value="space")
@Action(value="test",results={
@Result(name="success",location="/success.jsp"),
@Result(name="error",location="/fail.jsp",type="redirect")
})
public class ZhujieAction extends ActionSupport{
//这里的名字可必须以Action为后缀,访问时就以前面的单词首字母改成小写就行了。(不过有多个方法怎么分辨还不清楚,可能会在@Action()中配置多个value属性。)
public String test(){
if(1>0) return SUCCESS;
else return ERROR;
}
}//现在还是测试不成功,算了,先放弃吧!代码绝对没问题(多么自信的男人呀,嘿嘿!)。
好了,Struts2就先写到这,这些都是比较常用的知识点,其实struts2还有好多功能呢,比如自带了好多拦截器跟过滤器作用差不多,不过功能比较强大,还有它的好多标签在页面我也很少用,我从来不专门学习一个框架的标签的,感觉很浪费时间,而且意义不大,struts2还有自己的文件上传下载、异常处理、OGNL导航表达式等等,这些就等用到了再学吧。好了就先说到这吧,今天上班来的早,公司就我一个人,太安静了,所以突然说了这么多,嘿嘿!
补充:
★Struts中的OGNL(对象图导航语言)采用了struts2的标签获取值,因此我很少用,上面也说过不喜欢用某种框架自带的标签,但见了要能认识。比如:Struts2中的HttpSession已经被封装成了Map类型,只要类实现了SessionAware这接口,重写了setSession就可以自动注入进去,在页面用的话就直接