struts1和struts2的区别:
struts1:sun公司
(1)核心控制器:ActionServlet
(2) 需要继承Action或者DispachAction
(3)必须在web容器中配置
(4)页面信息可以封装到formBean中
(5)继承Action之后必须重写execute()方法,传递四个参数
(6)继承DispachAction之后可以自己定义方法名,也必须传递四个参数
(7)跳转方式,mapping.findForward("要跳转的页面");
struts2:webwork
(1)核心控制器:filter
(2)不需要继承Action,类中的放法自己定义返回String
(3)定义一个bean,通过get和set方法就可以获取信息,struts2自动把页面信息封装到request作用域中
(4) 跳转方式,return "配置文件中对应的页面跳转" 默认success; 创建一个struts2的一个项目:
定义一个类
导jar包(8个)
web.xml文件中配置核心控制器叫filter
struts.xml文件(如果没有配置就必须叫这个名字,如果名字错了,
找不到对应的action配置,如果没有配置路径就必须放到src下,代码根目录下)
struts.xml文件中需要的标签:
<package>标签:导包
属性:name:给包起了一个名字(随便起得,为了继承的时候用的)
namespace :命名空间,以"/"开头
extends:struts-default
<action>:找Action类
属性:name:给类随便起的一个名字,访问的路径
class:类的路径,不写的时候,默认为ActionSupport
method:类中需要访问的方法,如果不写,默认访问Action类中的execute方法
<result>:页面跳转
name:返回值,name值如果不写,默认success,action中根据这个名字去跳转,页面的地址必须以"/"开头
struts2的工作流程:
1.用户发送请求,请求交个核心控制器filter(web.xml),拦截以.action(不写就是默认的,可以不写)结尾的所有请求
2.通过struts.xml文件找到对应的action
3.action再调用业务逻辑类处理业务逻辑
4.根据给定的返回值通过struts.xml文件中的result标签中的name属性找到对应的路径(跳转页面)
校验:
1.拦截器
(1).定义一个类叫TestInterceptor实现Interceptor接口
(2).重写intercept方法在这个方法中去判断信息存不存在
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("拦截器已经进入");
String result=null;
if(1==1){//session.get 判断用户信息事是否存在
result =arg0.invoke();
}else{
result="login";
}
return result;
}
(3).在struts.xml配置文件中去配置相应的配置信息:
<interceptors>:有很多个
name:随便起的名字 class:拦截器类的路径
<interceptor name="interceportemp" class="com.starting.interceptor.TestInterceptor" />
自己定义的拦截器的堆栈,name:自己定义的名字
<interceptor-stack name="tempStack">
继承来的,已有的方法,引用已经寻在的
<interceptor-ref name="defaultStack" />
引用自己定义的name:和自己定义的拦截器的name值是一样的 <interceptor-ref name="interceportemp" />
</interceptor-stack>
</interceptors>
<action name="user_*" class="com.starting.struts2.action.UserAction" method="{1}" > <result>/WEB-INF/pages/success_{1}.jsp</result>
<interceptor-ref name="tempStack"/>:某个action类中调用拦截器就在这个action中直接调用自己定义的拦截器
</action>
2.调用validate方法
(1).定义一个Action类,继承ActionSupport
(2).重写validate方法
@Override
public void validate() {
// StringUtils.isEmpty(cs)
if (this.getUser().getUsername() == null
|| "".equals(this.getUser().getUsername().trim())) {
this.addFieldError("user.username", "用户名不能为空");
}
}
(3).如果给某个特定的方法验证:
public String execute() {
System.out.println("execute被调用" + username);
return "success";
}
//validate后加特定的方法名
public void validateExecute() {
if (this.getUser().getUsername() == null
|| "".equals(this.getUser().getUsername().trim())) {
this.addFieldError("user.username", "用户名不能为空");
}
}
(4).页面输出验证消息
导struts2标签 <%@ taglib prefix="s" uri="/struts-tags" %>
<s:fielderror/>通过这个标签去输出验证消息
(5).struts.xml配置文件中需要配置<result name="input">/index.jsp</result>
3.配置文件validate框架
(1).建一个类叫PersonAction,定义几个需要验证的属性值比如:name,mobile,get,set方法
(2).建一个xml配置文件叫PersonAction-validation.xml("-"前半部分名字必须同类名相同:为特定的某个类做验证,"-"后半部分的名字叫validation.xml:约定)
(3).在PersonAction-validation.xml配置文件中去配置相应的验证
<validators>
<field name="name">:name:对应的类中的属性名
<field-validator type="requiredstring">:验证框架自己提供的验证方法,验证是否为空
<param name="trim">true</param>:去空格,去左右空格
<message>用户名不能为空!</message>:验证消息
</field-validator>
</field>
<field-validator type="regex">
<param name="expression"><![CDATA[^1[358]\d{9}$]]></param>:正则表达式:判断手机号
<message>手机号格式不正确!</message>
</field-validator>
</field>
</validators>
(4).页面输出
4.类型转换(String --Date之间的转换)
流程:在页面的文本框中输入一个字符串,想把这个字符串转换成Date型的
通过文本框中的name值去找到消息资源文件中对应的key值,通过这个value值找到对应的转换类
在类中进行转换,在Action类中取到转换后的值,在页面显示
(1).定义一个类叫 DataTypeChange继承DefaultTypeConverter
(2).重写convertValue方法
@Override
public Object convertValue(Map context, Object target, Member member,
String propertyName, Object value, Class toType) {
//时间的格式
SimpleDateFormat format =new SimpleDateFormat("yyyymmdd");
try {
if(toType == Date.class){//判断是否为Date类型toType:java.util.Date
String[] str=(String[])value;//类型之间的转换
return format.parse(str[0]);
}
if(toType==String.class){//判断是否为String类型
Object[] obj=(Object[])value;
return format.format(obj[0]);
}
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
(3).配置消息资源文件UserAction-conversion.properties:"-"前办部分,为某一个类特定的
类型转换"-"后半部分:约定
createtime=com.starting.typechange.DataTypeChange:
createtime:文本框中的name值,类中需要转换类型的属性名
com.starting.typechange.DataTypeChange:转换类,给createtime转换类型的类
如果是通用的
java.util.?=com.starting.typechange.DataTypeChange
1Struts2中Action通过什么方式获得用户从页面输入的数据又是通过什么方式把其自身的数据传给视图的Action从页面获取数…
第一章MiniStruts的制作不使用Servlet也不使用requestgetParameter获取参数是用户能够直接访问Dao…
1struts2步骤1创建web项目2添加struts2的必须jar包3添加支持配置webxml文件4创建界面和相应的action…
20xx年5月13日221312Struts2总结fdteamcaptain陈玉龙1Struts2的起源和背景Struts2以We…
Day1一框架概述1三大框架是企业主流JavaEE开发的一套架构Struts2SpringHibernate2什么是框架为什么要学…
Struts2框架培训日志92020xxStruts2框架培训日志Struts框架的起源Struts是在20xx年5月发布第一个版…
Struts2项目开发总结注Struts2版本Struts216数据库Oracle9i所须架包commonslogging104j…
Day1一框架概述1三大框架是企业主流JavaEE开发的一套架构Struts2SpringHibernate2什么是框架为什么要学…
Struts2基础三种方式接收用户输入1使用领域对象接收用户输入2使用ModelDrivenaction页面示例注意代码黑体部分3…
1Struts2中Action通过什么方式获得用户从页面输入的数据又是通过什么方式把其自身的数据传给视图的Action从页面获取数…