Struts2学习笔记.docx

上传人:b****0 文档编号:10065473 上传时间:2023-05-23 格式:DOCX 页数:28 大小:26.62KB
下载 相关 举报
Struts2学习笔记.docx_第1页
第1页 / 共28页
Struts2学习笔记.docx_第2页
第2页 / 共28页
Struts2学习笔记.docx_第3页
第3页 / 共28页
Struts2学习笔记.docx_第4页
第4页 / 共28页
Struts2学习笔记.docx_第5页
第5页 / 共28页
Struts2学习笔记.docx_第6页
第6页 / 共28页
Struts2学习笔记.docx_第7页
第7页 / 共28页
Struts2学习笔记.docx_第8页
第8页 / 共28页
Struts2学习笔记.docx_第9页
第9页 / 共28页
Struts2学习笔记.docx_第10页
第10页 / 共28页
Struts2学习笔记.docx_第11页
第11页 / 共28页
Struts2学习笔记.docx_第12页
第12页 / 共28页
Struts2学习笔记.docx_第13页
第13页 / 共28页
Struts2学习笔记.docx_第14页
第14页 / 共28页
Struts2学习笔记.docx_第15页
第15页 / 共28页
Struts2学习笔记.docx_第16页
第16页 / 共28页
Struts2学习笔记.docx_第17页
第17页 / 共28页
Struts2学习笔记.docx_第18页
第18页 / 共28页
Struts2学习笔记.docx_第19页
第19页 / 共28页
Struts2学习笔记.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Struts2学习笔记.docx

《Struts2学习笔记.docx》由会员分享,可在线阅读,更多相关《Struts2学习笔记.docx(28页珍藏版)》请在冰点文库上搜索。

Struts2学习笔记.docx

Struts2学习笔记

Struts2学习笔记

1入门

1.1配置入门,安装JDK、Tomcat、Eclipse、MyEclipse等环境,下载strut2框架。

1.2第一个Struts2

1)新建一个Web工程(stud_struts2_note),将struts2的(freemarker-[verid].jar、ognl-[verid].jar、struts2-core-[verid].jar、xwork-[verid].jar、commns-logging-[verid].jar)这五个核心组件拷贝到工程下面的WEB-INF\lib目录下面。

修改WEB-INF目录下面的web.xml文件如下:

xmlversion="1.0"encoding="UTF-8"?

>

xmlns="

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

--过滤器名struts2-->

struts2

org.apache.struts2.dispatcher.FilterDispatcher

struts2

--表示过滤所有的请求-->

/*

--表示默认系统页面为login.jsp-->

login.jsp

2)添加两个jsp页面分别为login.jsp,output_login.jsp,代码如下:

login.jsp:

<%@pagelanguage="java"contentType="text/html;charset=gbk"pageEncoding="gbk"%>

<%@taglibprefix="s"uri="/struts-tags"%>

formaction="login">

textfieldname="username">

textfield>

passwordname="password">

password>

submitvalue="提交">

submit>

form>

output_login.jsp:

<%@pagelanguage="java"contentType="text/html;charset=gbk"

pageEncoding="GBK"%>

<%@taglibprefix="s"uri="/struts-tags"%>

usernameis:

${requestScope.username}


passwordis:

propertyvalue="password"/>

3)增加Action处理表达数据,首先新建包org.dql.Action,添加LoginAction.java类,代码如下:

packageorg.dql.action;

importcom.opensymphony.xwork2.ActionSupport;

publicclassLoginActionextendsActionSupport{

privateStringusername;

privateStringpassword;

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

@Override

publicStringexecute()throwsException{

if(username!

=null&&!

username.equals(""))

returnSUCCESS;

else

returnINPUT;

}

}

4)在WEB-INF\classes目录下增加配置文件(struts.xml)代码如下:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

//struts.apache.org/dtds/struts-2.0.dtd">

--action的name属性表示以后表单使用action只要和该值相同,就会调用class属性

所对应的类进行处理

-->

/login.jsp

--请注意下面的代码type="dispatcher"(请求转发)相当于.Net里面的Serever

.Transfer这里还有很多类别请参考struct-default,值得注意的是如果type="redi

rect"的话就会重定向页面,这样原来页面的request相关参数将不会自动保存。

-->

/output_login.jsp

重启服务器,在IE键入http:

//localhost:

8080/stud_struts2_note/查看效果

______________________________________________________________________________

______________________________________________________________________________

2输入校验

2.1使用服务代码

源代码关联(到www.opensymphony.org使用svn和cvs分别下载xwork,和ognl),然后将源代码的关联到相应的位置,至于struts2的关联只需要将其关联到所下载解压后的struts-[verid]即可。

使用服务代码验证有两种级别(ActionError、FieldError),addFieldError返回的是一个Map(类似.NET)里面的Hashtable,而addActionError返回的则是List。

修改LoginAction.java的execute()方法,重写ActionSupport类的validate方法相关代码如下:

@Override

publicvoidvalidate(){

if(StringUtil.IsEmptyString(username)

||!

(username.length()>=6&&username.length()<=20))

this.addFieldError("username","用户名不能为空!

且长度必须在(6~20)之间。

");

if(StringUtil.IsEmptyString(password)

||!

(password.length()>=6&&password.length()<=20))

this.addFieldError("password","密码不能为空!

且长度必须在(6~20)之间。

");

}

@Override

publicStringexecute()throwsException{

returnSUCCESS;

}

这样如果对应的文本框输入不正确就会验证不通过。

fielderror>

fielderror>用于显示FieldError级别的错误信息,

actionerror/>用于显示ActionError级别的错误信息。

需要注意的是使用了标签显示错误会和struts2默认的信息重复,可设置表单的属性(theme="simple")除去默认的显示信息如标签的label信息、默认的错误信息等等。

2.2使用struts2的验证框架,

小技巧,查看struts2验证框架可使用type:

依次展开(xwork-[verid]com.opensymphony.xwork2.validator.validatorsdefault.xml),打开该文件就可以看到它内置的可用验证类别。

要对某个Action进行验证就得在和该Action的class文件同一目录创建名为([Action名]-validation.xml)的文件。

以下是使用Register-validation.xml对RegisterAction进行验证的部分代码:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEvalidatorsPUBLIC

"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"

"

配置验证用户名不能为空

密码不能为空

10

20

密码长度必须在${minLength}和${maxLength}之间

确认密码不能为空

10

20

确认密码长度必须在${minLength}和${maxLength}之间

电子邮件格式不正确

1

150

年龄必须在${min}和${max}之间

1900-01-01

2100-01-01

出生日期必须在${min}和${max}之间

学历必须选择

关于参数要查看验证类别所调用的类,看它的成员变量来确定。

这里列举的只是field验证方式,还有validator(该验证方式一个验证对应多个字段,而field则是一个字段可对应多项验证)方式,这里不做列举。

(注意:

如果使用诸如int,date类型进行验证,则被验证的Action字段数据类型必须以之想符,否则会出现异常;另外同一个Action可能根据具体的要求不同而需要的验证也有所差别,所以可针对具体的业务逻辑进行不同的验证。

这时属性文件的命名则变为([Action名]-[y业务逻辑名]-validation.xml)如:

PointAction-execute-validation.xml)

3类型转换

输入校验之前,struts会对客户端所提交的信息进行默认的类型转换。

但是很多时候我们需要使用自定义的装换类转换。

如下,客户端输入一个坐标点,服务器将其转转换为一个point对象。

假定客户端输入一个坐标点,显然这是自定义类型,struts2将不会自动对其进行转换。

这时我们就需要进行类型转换。

如下:

首先,分别在相应的位置创建point.jsp、PointAction.java、output_point.jsp并对其进行相应的配置;其次,建立org.dql.converter包,并在该包下建立PointConvert类用于转换;最后在PointAction.java的同级目录下建立一个属性文件(PointAction-conversion.properties)代码和内容分别如下:

point.jsp

<%@pagelanguage="java"contentType="text/html;charset=gbk"

pageEncoding="gbk"%>

<%@taglibprefix="s"uri="/struts-tags"%>

formaction="PointsAction">

textfieldname="sid">

textfield>

坐标点,用","隔开:

textfieldname="point">

textfield>

submitvalue="提交">

submit>

form>

output_point.jsp

<%@pagelanguage="java"contentType="text/html;charset=gbk"

pageEncoding="gbk"%>

<%@taglibprefix="s"uri="/struts-tags"%>

pointsmessage:


sid:

propertyvalue="sid"/>

propertyvalue="point"/>

x=:

propertyvalue="point.x"/>

y=:

propertyvalue="point.y"/>

PointAction.java

packageorg.dql.action;

importcom.opensymphony.xwork2.ActionSupport;

importorg.dql.bean.*;

publicclassPointActionextendsActionSupport{

privatePointpoint;

privateStringsid;

publicPointgetPoint(){

returnpoint;

}

publicvoidsetPoint(Pointpoint){

this.point=point;

}

publicStringgetSid(){

returnsid;

}

publicvoidsetSid(Stringsid){

this.sid=sid;

}

@Override

publicStringexecute()throwsException{

returnSUCCESS;

}

}

PointConvert.java

packageorg.dql.converter;

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Map;

importorg.dql.bean.*;

importorg.apache.struts2.util.StrutsTypeConverter;

publicclassPointConvertextendsStrutsTypeConverter{

@Override

publicObjectconvertFromString(Maparg0,String[]arg1,Classarg2){

Pointpoint=newPoint();

String[]parameterValues=arg1[0].split(",");

intx=Integer.parseInt(parameterValues[0]);

inty=Integer.parseInt(parameterValues[1]);

point.setX(x);

point.setY(y);

returnpoint;

}

@Override

publicStringconvertToString(Maparg0,Objectarg1){

Pointpoint=(Point)arg1;

StringBuildersb=newStringBuilder();

intx=point.getX();

inty=point.getY();

sb.append("[x=").append(x).append(",y=").append(y).append("]");

returnsb.toString();

}

}

PointAction-conversion.properties

point=org.dql.converter.PointConvert

注意PointAction-conversion.properties属性文件表示PointAction中出现的自定义成员使用该文件中所指定的类进行类型转换。

类型转换属性文件的命名规则[Action名]-conversion.properties。

在该文件中必须对PointAction出现的每个变量对进行指定框架才会对其进行转换否则将引发异常。

这显得很麻烦,可用一个全局的类型转换属性文件指定某一种自定义类型调用的转换类,做法是在WEB-INF\classes目录下建立名为xwork-conversion.properties的属性文件,在该文件中进行指定,这样的话在该项目中出现的所用被指定的类都会调用文件中所指定的类进行类型转换。

xwork-conversion.properties

org.dql.bean.Point=org.dql.converter.PointConvert

4拦截器

4.1简单拦截器

拦截器是一种实现AOP(Aspect-OrientedProgramming)的一种实现方法,它的思想是在执行一个方法之前将其拦截,这时可在其前面执行一些代码,然后在执行真正要执行的代码,执行完了之后在执行一段指定的代码。

一般而言拦截器大都使用代理来实现,下面是一个拦截器的例子。

拦截器接口:

packagedql.interceptor;

publicinterfaceInterceptorInterface{

publicvoidbefore();

publicvoidafter();

}

拦截器实现类:

packagedql.interceptor;

publicclassInterceptorimplementsInterceptorInterface{

publicvoidbefore()

{

System.out.println("theinterceptorclassbeformethod!

");

}

publicvoidafter()

{

System.out.println("theinterceptorclassaftermethod!

");

}

}

业务接口:

packagedql.interceptor;

publicinterfaceBusinessInterface

{

publicvoiddoSomething();

}

业务实现类:

pa

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2