当前位置: 首页 > news >正文

网站搭建哪里找有名气网站建设行业知乎

网站搭建哪里找有名气,网站建设行业知乎,罗田住房和城乡建设局网站,前端做网站直播Struts2第二天学习 解决struts.xml文件的冗余 将所有的配置文件放在一份struts.xml将会导致, 文件繁杂且容易出错, 将有如下的解决方案: 分文件编写Struts2的配置文件:对于具有类似功能的action就可以放入不同对应的xml文件中, 最后使用struts标签中的include fileinclude fileuser.xml/include处理例如:1. struts.xmlstrutsconstant namestruts.devMode valuetrue/constantinclude fileA.xml/includeinclude fileB.xml/include/struts2. A.xmlstrutspackage nameA extendsstruts-defaultaction nameaddAresult/success.jsp/result/action/package /struts3. B.xmlstrutspackage nameB extendsstruts-defaultaction nameaddBresult/success.jsp/result/action/package /struts封装请求数据到对象中 静态参数封装: 使用struts.xml配置param参数, 调用动作类的setXXX方法做数据注入,默认编码utf-8, 不会出现乱码问题 例: struts.xml配置strutspackage nameuser extendsstruts-defaultaction nameaddUser classcom.action.UserAction methodsaveUserparam nameusernameA/paramparam nameage18/param/action/package /struts在动作类中的配置:public class UserAction extends ActionSupport{private String username;private int age;public String getUsername(){return username;}public void setUsername(String username){this.username username;}public int getAge(){return age;}public int setAge(){this.age age;}public String saveUser(){ //action方法return null; } } 当访问index.jsp中addUser操作的时候, struts.xml触发saveUser的action, 将username, age中参数通过UserAction中的set方法做注入操作 整个注入的过程中, 首先会自动为UserAction生成一个user对象, 将username, age通过set方式进行赋值 Struts2是通过staticParams的拦截器做注入操作, 这里注意必须保证, 注入的param标签中的name必须与Action类中的属性同名 在param中的age参数18是作为字符串出现的, 当使用set操作的时候, 字符串自动转换为数字动态参数封装: 就是对用户提交的表单数据封装到实体模型中 当用户使用表单提交数据的时候, 在Servlet中, 直接使用request.getParameter(参数名)处理 而在Struts2中, 系统默认将表单数据一一通过set操作封装到Action类的属性中 在struts.xml不需要做参数配置, 例如:action nameaddUser classcom.action.UserAction methodsaveUser/action无需指定param 注: 此处的操作是由params拦截器完成的, 通过拦截器将表单数据填入对应的Action类中同名同类型使用此种方式出现的问题是: Action不应该处理对JavaBean数据的处理, Action的主要功能是对用户操作的反馈针对上述的问题, 提出如下的操作1. 动作类与实体模型分开 在动作类中不采用上面的方式(将username, age等属性放入动作类), 而是将数据单独封装为User类处理 例:public class UserAction extends ActionSupport{private User user;public String getUser(){return user;}public void setUser(User use){this.user user;}public String saveUser(){ //action方法return null; } } 在index中, 作如下处理 用户名: input nametext nameuser.username/ 此处说明: user.username就类似于Servlet中的将数据存入request, session中传递 注: 在index.jsp中要注意: user.username中, user必须与Action中属性名相同, username必须与User中的属性名相同在表单数据封装到实体类中分为以下2个步骤:1. 通过Action类中的get方法查看当前User实例是否存在, 不存在则new一个, 然后使用Action中的set方法为bean引用赋值2. 调用action中get方法获得bean对象, 通过注入的方式为实例对象赋值, 整个过程中在struts.xml无需做配置, 过滤器会自动将表单中数据封装到action中对象上 此时的赋值一样是param拦截器进行处理 需要注意的, 当在上述的1操作中, 如果bean的实例对象存在, 那么就不会执行set操作, 直接执行get操作, 最后对该实例对象赋值2. 在动作类与实体模型分开的基础上, 进行模型驱动 如果只是单纯地将动作类与实体模型分开, 容易出现的问题就是在写jsp的过程中必须保证, 模型变量之间的联系, 如果某个地方的变量名错误, 很容易导致错误 当采用模型驱动的方式, 在一定程度上可以减轻jsp的开发 如标题所说, 模型驱动就是使用已存在的bean实例驱使jsp中表单数据进行封装, 而不是让jsp去指定向哪个实例中的哪个属性进行封装数据 模型驱动的2个步骤: 1. 让Action实现ModelDriven接口, 实现getModel方法(返回值泛型) 2. 使用模型驱动, 数据模型必须自己实例化 例:Action类: public class UserAction extends ActionSupport implements ModelDrivenUser{private User user new User();public User getModel(){//重写ModelDriven中的getModelreturn user;}public String registerUser(){return null; }}index.jsp:用户名:input typetext nameusername/br/年龄:input typetext nameage/br/input typesubmit value注册/struts.xml:action nameregisterUser classcom.action.UserAction methodregisterUser/action注: 模型驱动使用的是ModelDriven拦截器 数据类型转换 需要注意的是, 通过客户端填写的数据都是String或String[] - 获取表单中字符串数据 - 使用set方法填充模型数据 - POJO- POJO - 使用get方法获取数据 - jsp显示(字符串类型) 注: 在set填充数据的时候Struts2会根据数据类型做自动转换处理注: 系统的类型转换在某些方面可能不满足实际需求, 需要我们自己定义类型转换器. 下面介绍一下自定类型转换器 在Struts2中具有一个TypeConvert的接口, 当实现该接口就可完成自定义类型的转换, 存在的问题是该接口中的convertValue方法显得过于繁琐, 因此一般采用继承TypeConvert的子类解决问题 编写类继承TypeConvert的子类StrutsTypeConverter, 实现抽象方法: public abstract Object convertFromString(Map context, String[] values, Class toClass); 以及 public abstract String convertToString(Map context, Object o); convertFromString是将用户输入的String数据转化为指定类型 convertToString是将指定该类型转化为String类型 context: 存放动作访问的所有数据 values: 存放用户输入的值 toClass: 要转换的目标类以转换日期为例: public class MyTypeConverter extends StrutsTypeConverter{private DateFormat df new SimpleDateFormat(mm/dd/yyyy); //例如将1/1/2019变为字符串, 按照当地时间格式存入数据库//重写convertFormStringpublic Object convertFromString(Map context, String[] values, Class toClass){if (values null || values.length 0){return null;}String str values[0];if(toClass java.util.Date.class){try{return df.parse(str);} catch(Exception e){e.printStackTrace() return null;}}}return null; } //重写convertToString public abstract String convertToString(Map context, Object o){if(o instanceof Date){return df.format((Date)o);} return null; }注册转换器 - 局部注册: 在javaBean包下建立一个 javaBeanName-conversion.properties的文件javaBeanName代表类名, 文件名必须按照上面的格式在.properties文件中将需要转换的属性注册转换器例: birthdaycom.convert..MyTypeConverter- 全局类型转换器: 需要使用转换的数据类型注册转换器在src路径下, 建立一个xwork-conversion.properties属性的文件, 这里的文件名也是固定的例: java.util.Datecom.convert..MyTypeConverter此处由于针对全局元素, 所以直接将Data类型作为转换器注册对象经过上述的步骤就能将指定类型转换为本身需要的类型 转换失败后的处理 转换失败后不能将异常抛给用户, 所以, 一般采用如下操作: 在结果视图标签中, 添加result nameinput/index.jsp/result 当出现异常的时候, Struts2会自动切换到input视图处理input回显数据 常规的Servlet回显数据使用的是将数据存入request中, 通过EL表达式在表单中回显数据 而Struts2采用的是配置标签, 使用Struts2自带标签, 在使用input回显操作的时候将会对数据做自动填充, 填充至表单中, Struts2中自带的标签就是对原本的html标签的一种修饰以及功能加强 如下操作: % taglib uri/struts-tags perfixs% %--使用Struts2自带标签--% s:forms:textfield nameusername label用户名/s:textfields:textfield namepassword label密码/s:password /s:form 剩余标签以及内部属性,自行查阅 当使用Struts2提供的标签库的时候, 数据的回显, 不再需要request封装表单信息提示 当用户提交表单数据的时候, 需要对表单数据做验证操作, 如果信息错误则给用户一个错误提示, 在Servlet中, 采用的是request封装数据, 结合js做验证 在Struts2中采用的也是标签配置, 例如: s:fielderror/s:fielderror %--字段错误提示, 此处的s借用上面的--% s:actionerror/ %--动作错误--% 当字段出现错误的时候, 做数据回显, 会作自动的提示操作, 告诉用户对应的输入出现什么样的错误 注: 当出现数据类型转化错误, 将会触发conversionError的拦截器(前提必须是Action继承ActionSupport), 该拦截器将会进入input视图如果没有对字段信息做处理, 将会以默认的方式显示, 显示一堆英文对用户不友好, 所以下面将针对编写自定义信息提示做叙述自定义表单数据信息提示以及验证规则 一般采用客户端与服务端共同对信息进行验证 下面介绍Struts2的服务端验证, 下面的所有的操作都是基于Action类继承ActionSupport来处理的 自定义表单数据信息提示 form表单中的数据总是针对JavaBean某个字段而言, 所以有以下处理: 在JavaBean路径下, 新建一个与Bean类名相同的properties的文件, 然后针对需要自定义的字段进行信息配置 例如:在User.properties中invalid.fieldvalue.birthday出生日期有误, 使用yyyy-MM-dd格式注: 在properties文件中, 中文会自动用Unicode编码代替文件的key必须是invalid.fieldvalue.属性名文件value代表显示的中文提示信息处理Action类中动作方法的验证 使用重写validate方法解决验证 在ActionSupport中提供了一个validate方法, 那是系统默认的验证操作, 自定义验证规则就需要重写父类方法 例:public void validate(){if (StringUtils.isEmpty(user.getUsername)){addFieldError(username, 用户名必须输入);} } //在Struts2中提供一个Map用于封装操作错误信息, 通过addFieldError方法添加错误信息 //username代表错误信息的字段名, 用户名必须输入代表错误提示信息注: 使用上面的validate操作具有一个弊端, 就是会对所有的动作操作做验证规则, 如上面的操作, 如果user的username一直为空, 当用户执行其他动作操作, 就会报错 例如: 在Action类中具有一个findAll操作 public String findAll(){return SUCCESS; } 当用户没有注册( 此时的username为null )而去执行findAll操作, 出现的问题就是: 即使findAll操作成功. 但是依旧抛异常 出现这种情况的原因就是: validate对所有的动作都进行验证解决上述问题, 采用有如下的方案: 给不需要验证的动作添加一个SkipValidation注解 如上面的操作, 为findAll添加一个SkipValidation注解, 使得跳过findAll, 不去验证它 validation方法遵循书写规范 将上面的validate改为validateRegist, 使得用户注册的时候只验证regist动作, 而不去验证findAll动作 声明式验证, 不使用函数式验证方式, 而是编写xml配置文件, 制定验证规则 在动作类所在的目录下, 新建一个 动作类类名-validation.xml的文件 例如: 文件名: UserAction-validation.xml ?xml version1.0 encodingUTF-8? !DOCTYPE validators PUBLIC-//Apache Struts//XWork Validator 1.0.3//ENhttp://struts.apache.org/dtds/xwork-validator-1.0.3.dtdvalidatorsfield nameusernamefield-validator typerequiredStringmessage请输入用户名/message/field-validator/field /validators对username属性做requiredString验证(表示username不能为空)注: 它是针对动作类中所有的动作方法做验证 在动作类所在的目录下, 新建一个 动作类类名-动作名-validation.xml的文件就可以实现对特定的动作进行验证 例如: 文件名: UserAction-regist-validation.xml ?xml version1.0 encodingUTF-8? !DOCTYPE validators PUBLIC-//Apache Struts//XWork Validator 1.0.3//ENhttp://struts.apache.org/dtds/xwork-validator-1.0.3.dtdvalidatorsfield nameusernamefield-validator typerequiredStringmessage请输入用户名/message/field-validator/field/validatorsStruts.xml中代码package nameuser extendsstruts-defaultaction namefindAll classcom.action.UserActionresult/success.jsp/result/actionaction nameregist classcom.action.UserAction methodregistresult typeredirect/success.jsp/resultresult typeexists/message.jsp/resultresult typeinput/success.jsp/result %--视图回显--%/action/package此时的操作就只是单纯针对于regist验证器参数注入 只是单纯地配置validation.xml并不能满足对输入数据的检查要求, 它只能做到根据field标签中type类型来检查数据, 所以需要使用验证器参数注入增强验证功能 常用验证器自行百度 验证器参数注入有两种方式, 如下: 基于字段: 先获取需要验证的字段名, 然后对其内容进行验证 例如: validatorsfield nameusernamefield-validator typerequiredStringparam nametrimfalse/parammessage请输入用户名/message/field-validator/field/validators上面针对type为requireString的验证器做trim注入, 将该验证器的trim属性设置为false表示验证器不除去空格基于验证器: 先判断当前需要验证的类型属于哪一类, 然后再判断需要验证哪个字段 例如:validators typerequiredStringvalidatorparam namefieldnameusername/parammessage请输入用户名/message/validator/validators对username做注入, 表示对username做判断requiredString操作注: 一个验证器只能处理一个验证请求, 需要对同一属性做多种条件判断, 需要多个 field-validator, 例如对password判断, 需要判断password长度, 以及password是否为已输入. validatorsfield namepasswordfield-validator typerequiredStringmessage请输入密码/message/field-validatorfield-validator typestringlengthparam nameminlength3/paramparam namemaxlength8/parammessage密码长度${minlength}~${maxlength}/message/field-validator/field/validators还需要注意的是, 密码中含有特殊字符, 可以将密码作为文本处理, 防止特殊字符出错 上面有错, 还请指出, 如果认为我写的还不错, 还请点个赞, 多多支持一下, O(∩_∩)O~~
http://www.pierceye.com/news/358757/

相关文章:

  • 谷歌网站优化可以做物理题的网站
  • 公司的网站建设是什么部门品牌餐饮加盟网站建设
  • 深圳品牌网站建设公司哪家好学建网站 必须学那些知识
  • 国内设计网站推荐山东省建设安全生产协会网站
  • 南京专业网站开发团队如何用手机建网站
  • 在婚恋网站上做红娘怎么样正规网络推广服务
  • 网络媒体设计是做什么的西安网站优化公司
  • 有项目去哪里找投资人河南网站优化排名
  • 灯塔建设网站网上做流量对网站有什么影响
  • 网站模板 黑色建设网站安全措施
  • 临沂企业网站建设珠海建设网站的公司哪家好
  • 中国网站建设公司排行榜网站建设精美模板
  • 国家对于学校网站建设深圳网站建设公司网络服务
  • 承德建站公司福田庆三整鼻子好吗
  • 域名和网站关联seo优化是指
  • 爱站网官网关键词周口网站关键词优化
  • vps网站管理器阿里云如何做网站
  • 网站是什么意思例如营销型网站文案怎么做
  • 五莲县网站建设wordpress去掉链接中的吗
  • 贡井区建设局网站建网是什么
  • 高端大气网站模板南京网站制作西安
  • wordpress站点标题和副标题网站内容要突出什么原因
  • 网站建设公司排行杭州wordpress站外链接跳转页面
  • 哪个网站可以做行程攻略哈尔滨市建设工程招标网
  • django网站开发实例望城建设局网站
  • 住房和城乡建设网站方案网页界面设计的网络系统有哪些
  • 自己做的网站怎么设置文件下载商城app搭建
  • 好看的网站分享查域名注册详细信息查询
  • 中山网站建设招聘宜宾seo快速排名
  • 网站制作 福宁网络有限公司单页网站seo优化