Struts2学习笔记.docx
- 文档编号:10065473
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:28
- 大小:26.62KB
Struts2学习笔记.docx
《Struts2学习笔记.docx》由会员分享,可在线阅读,更多相关《Struts2学习笔记.docx(28页珍藏版)》请在冰点文库上搜索。
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--> --表示过滤所有的请求--> --表示默认系统页面为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属性 所对应的类进行处理 --> --请注意下面的代码type="dispatcher"(请求转发)相当于.Net里面的Serever .Transfer这里还有很多类别请参考struct-default,值得注意的是如果type="redi rect"的话就会重定向页面,这样原来页面的request相关参数将不会自动保存。 --> 重启服务器,在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" " 关于参数要查看验证类别所调用的类,看它的成员变量来确定。 这里列举的只是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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2 学习 笔记