一、得到HttpServletRequest、HttpSession、HttpApplication对象 1、 通过ActionContext类来得到HttpServlet一组对象 //--申明对象获得request对象 ActionContext ac = ActionContext.getContext(); //获得对象 Map request = (Map) ac.get("request");--获得request对象 Map session = ac.getSession(); --获得session对象 Map application = ac.getApplication(); --获得application对象 //存值 session.put("user",user);--存信息 //取值 ${User.name } –-取数据 二、配置文件中的设置 1、设置用户界面,默认值为xhtml风格 <constant name="struts.ui.theme" value="simple"></constant> 2、设置提交容许的后缀 <constant name="struts.action.extension" value="aspx,do,html"/> 3、struts.xml处理动态方法、动态结果 1、struts.Xml文件里的配置 <action name="Login" class="web.action.LoginAction" method="login" > <result name="success" type="dispatcher">${tiaoZhuan}</result> </action> <!-- 注册验证 --> <action name="Register" class="web.action.LoginAction" method="register"> <result name="success" type="redirect">${tiaoZhuan}</result> </action> 注释: 通过method属性的值来决定处理请求的是web.action.LoginAction的那个方法; ${tiaoZhuan} —- 动态结果; 2、页面处理请求实现动态请求 <form action="Register!login.action" method="post"> 4、通配符处理动态请求 <!— 用户验证通配符验证 name="*User";拦截所有以User结尾的请求 method="{1}";截取请求User前面的类容 --> <action name="*User" class="web.action.LoginAction" method="{1}" > result name="success" type="dispatcher">${tiaoZhuan}</result> action> //页面 <form action="loginUser.action" method="post">-- Login页面 <form action="registerUser.action" method="post">--注册页面 5、常用结果类型(result里面的配置) 例:<result name="success" type="redirect">${tiaoZhuan}</result> 1、dispatcher —- 默认转发 2、redirect –- 重定向 3、redirectAction --- 针对*.Action或者*.*请求的重定向 6、全局结果 <!-- 设置全局结果,全部的 input,error都来这里处理--> <package name="default" namespace="/" extends="struts-default"> <global-results> <result name="input">Login.jsp</result> <result name="error">cuoWu.html</result> </global-results> 。。。。。。 </package> 7、配置默认的Action <package name="default" namespace="/" extends="struts-default"> <!-- 配置默认的处理请求,如果找不到Action就进入defaultAction里根据defaultAction的结果返回 --> <default-action-ref name="defaultAction"/> <!-- 默认的Action处理 --> <action name="defaultAction"> <result>cuoWu.html</result> </action> </package> 8、处理中文乱码的配置 <!—- il8n是’L’不是’一’--> <constant name="struts.il8n.encoding" value="UTF-8" /> 三、拦截器; 例子:Struts2_005Text 1、申明拦截器 <interceptors> <!-- 定义拦截器 name="myTime"拦截起名字 class="interceptor.TimerInterceptor"拦截器的全局定名 --> <interceptor name="myTime" class="interceptor.TimerInterceptor" /> </interceptors> 2、设置默认引用拦截器 <!--设置默认引用拦截器,与interceptors,package同级 --> <default-interceptor-ref name="myTime" /> 3、在action中调用拦截器 <action name="*User" class="web.action.LoginAction" method="{1}" > <!-- 为Action设置拦截器 --> <interceptor-ref name="userCheck"> <!-- 设置不拦截的方法 --> <param name="excludeMethods">login</param> </interceptor-ref> <!-- 元素拦截器,动态改变Action中message元素的值 --> <param name="message">aaaaaa</param> <!-- 调用默认的拦截器 --> <interceptor-ref name="defaultStack"/> <result name="success" type="dispatcher">${tiaoZhuan}</result> </action> 4、拦截器类的写法 public String intercept(ActionInvocation invocation) throws Exception { //开始时间 long startTime = System.currentTimeMillis(); //执行后续拦截器或Action,返回结果 String result = invocation.invoke(); //后续处理工作 long executionTime = System.currentTimeMillis() - startTime; System.out.println("这次拦截花费" + executionTime + "时间"); return result; } 注: 调用下一个方法:(String result = invocation.invoke()); 拦截器类可以不去调用下一个拦截器直接返回一个字符串(return “eooor“;) 将结果返回给程序; 5、拦截器全些法 <interceptors> <!-- 定义拦截器 name="myTime"拦截起名字 class="interceptor.TimerInterceptor"拦截器的全局定名 --> <interceptor name="myTime" class="interceptor.TimerInterceptor"/> <interceptor name="userCheck" class="interceptor.UserInterceptor"/> <!-- 拦截器栈 --> <interceptor-stack name="MyStack"> <!-- 引用其他拦截器 --> <interceptor-ref name="myTime"/> <!-- 引用userCheck拦截器,并为该拦截器设置不拦截的方法 --> <interceptor-ref name="userCheck"> <!-- 设置不拦截的方法 --> <param name="excludeMethods">login</param> </interceptor-ref> <!-- 引用struts2默认的拦截器,(必需要加,不然可能出现问题) --> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <!-- 设置默认引用的拦截器栈或拦截器(设置拦截器和拦截器栈语法一样) --> <default-interceptor-ref name="MyStack"/> 4、使用struts2自带的报错文档 1、需要将核心配置文件的 -- fielderror.ftl 路径到myEclps安装目录下找; 2、将<li></li>删除,<ul 改成<lable 3、将该过得文件粘贴到文工程下 4、struts2中Ajax支持 <sx:a href="FenYelookupAllHouse?page =%{#session.pageSize+1}" targets="xianShi">下一页</sx:a> 传值 四、国际化; 例子 -- Struts2_005Text 1、编写资源文件 1、文件命名规则 以“.properties”为后缀例:.properties 2、文件内容 user.name=name; user.passWord=password sumber=login user.name表示键name是值,在页面通过struts2标签通过键取值; 例: <s:textfield key="user.name" name="user.name" /> 注: key="user.name"键 name="user.name"表示文本框的值 2、在struts.xml配置资源文件 <!— 指定资源文件的名字和路径 --> <constant name="struts.custom.i18n.resources" value="message"/> 五、验证框架(实例);例子 -- Struts2_005Text 1、创建RegisterAction实现对注册的处理 2、在struts.xml中配置action <!-- 用户验证通配符验证 --> <action name="*User" class="web.action.LoginAction" method="{1}" > <!-- 元素拦截器,动态改变Action中message元素的值 --> <result name="success">${tiaoZhuan}</result> <!-- 配置验证框架后必须配置input类型的返回值,用来控制跳转页面 --> <result name="input">register.jsp</result> </action> 3、创建jsp页面 <body> <s:form action="registerUser" method="post" theme="simple"> <s:text name="user.name"/> <s:textfield key="user.name" name="user.name" /><br/> <!-- 用户名错误信息显示 --> <s:text name="user.passWord"/> <s:password key="user.passWord" name="user.pwd" /><br/> <!-- 密码错误信息显示 --> <s:fielderror cssStyle="color: red" fieldName="user.passWord" /> <s:password label="确认密码" name="repassWord"></s:password> <s:fielderror cssStyle="color: red" fieldName="agpwd" /> <s:textfield label="电话号码" name="user.telephone"></s:textfield> <s:fielderror cssStyle="color: red" fieldName="user.telephone" /> <s:submit value="注册"></s:submit> </s:form> </body> 4、创建验证文件,使用验证框架编写验证规则 <validators> <!-- 验证用户名 --> <field name="user.name"> <!-- 验证非空 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空</message> </field-validator> <!-- 验证长度 --> <field-validator type="stringlength"> <param name="minLength">4</param> <param name="maxLength">4</param> <message>用户名必须在${minLength}~${maxLength}</message> </field-validator> </field> <!-- 验证密码非空 --> <field name="user.passWord"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密码不能为空</message> </field-validator> <!-- 确认密码是否一致 --> <field-validator type="fieldexpression"> <param name="expression">user.passWord==repassWord</param> <message>两次密码必须相同</message> </field-validator> </field> </validators> 注: 1、<field name="user.name">里name必须是对象点属性 2、<field-validator type="requiredstring">type表示验证类型 1、Requiredstring —- 验证是否为空 2、stringlength —- 验证长度 3、fieldexpression -- 验证两次输入是否一致 1、expression –- 表示匹配字符 4、regex – 自定义 <field-validator type="fieldexpression"> <param name="expression">正则表达式或表达式 </param> <message>格式不符 </message> </field-validator> 3、文件命名:className-validation.xml或ClassName-alias-validation.xml className表示action的名字(RegisterAction) alias表示配置在struts里Action的名字 <action name="*User" class="web.action.LoginAction" method="{1}" > 4、文件放在于action相同的目录下 六、OGNL表达式—- 例子:leiXingZhuanHuan 1、<s:set name="age" value="10" scope="request"/> Scope属性用于指定变量的作用域,取值范围可以是page,request,session,application,和action。如果没有指定scope,取默认值action,变量将被同时保存到request作用域中和ActionContext。 2、从作用域中取值 1、将值存入变量age的值存到request作用域中,然后取出 <s:set name="age" value="10" scope="request"/> <s:property value="#request.age"/> 、通过迭代从作用用中取(集合)值 <s:iterator value="#session.listHouse" id="house"> <s:property value="#house.title"/> </s:iterator> OGNL表达式案例:leiXingZhuanHuan <body> 录入信息如下:<br/> 名称:<s:property value="name"/> <br/> 年龄:<s:property value="age"/> <br/> 生日:<s:property value="birthday"/> <br/> 坐标:<s:property value="point"/> <br/> --------------------测试OGNL取后台值栈里集合的值--------------------- <br/> <!-- <s:iterator value="listpoint" id="p"></s:iterator>迭代标签 迭代集合(集合中存得是对象) 测试 OGNL取值(listPoint值栈里面集合的值) vavalue取出后台存入时的集合,迭代为对象或值 id为对象取一个别名,如果是对象的话,处理后是将值存入作用域中,而不是值栈 --> ---迭代集合中的对象 <br/> <s:iterator value="listpoint" id="p"> <!-- <s:property value="#p.x"/> OGNL表达式的取值标签,如果不指定value则默认取栈顶元素 value,带#表示是从作用域中取值,不带则表示从值栈中取值 struts2所有标签都支持OGNL表达式例如:<s:url value="%{#p.x}"/>,也能取出对象point的属性值 --> <s:property value="#p.x"/> <br/> </s:iterator> <!-- 迭代对象 --> ---迭代对象 <br/> <!-- 直接去值栈中取对象value="point"不用去给对象取别名 直接通过<s:property value="x"/>就可以取出对象的属性值(x是point的属性) --> <s:iterator value="point" > <s:property value="x"/> <br/> <s:property value="y"/> <br/> </s:iterator> -----------------------测试前台存值然后取值------------------------ <br/> <!-- 将值存入变量age的值存到request作用域中 value可以存字符串、数字也可以存对象 例:value="User",存的是对象;value=" 'User' "存得就是字符串 在不知道输出的是对象还是字符串的时候加上"%"表示输出字符串;例:%{#session.NumberAll} --> <s:set name="number" value="15" scope="request"/> <s:property value="#request.number"/> <br/> -------------------------------%的作用------------------------------ <br/> <s:set name="myurl" value="'http://localhost:8080/mvc'"/> <s:url value="#myurl"/> <br/> <s:url value="%{#myurl}"/> </body> 七、自定义类型转换器--例子:leiXingZhuanHuan 例子 创建自定义类型转换器,且继承StrutsTypeConverter,实现 1、将一个或多个字符串值转换为指定的类型 public Object convertFromString(Map context, String[] val, Class toType) 2、将指定对象转化为字符串 public String convertToString(Map context, Object object) 2、 配置类型转换器(2种方式) 1、全局: 1、文件名:固定不变 xwork-conversion.properties 2、文件里写的类容: 转换类全名=转换器全名 例:entity.Point=converter.PointConverter 或 java.util.Date=converter.DateConversion 3、文件存放路径:src跟目录下 2、特定类: 1、文件名(红色部分固定),className表示需要类型转换的类的名字(必须一样) className-conversion.properties 例:RegisterAction- conversion.properties 2、文件下写的内容 特定类下的属性名=转换器全名 例:point= converter.PointConverter 3、文件存放路劲 于需要能转换的特定类相同跟目录 3、定制转换错误信息 1、所有类型的转换错误信息(全局) 1.在struts.xml中指定资源文件的基名 <constant name="struts.custom.i18n.resources" value="full"/> 注:value的值自定义,但是必须于报错文档相对应 full.properties 2.在full.properties中创建key-value xwork.default.invalid.fieldvalue =字段“{0}”的值无效 注:xwork.default.invalid.fieldvalue是固定不变的 2、定制特定的转换错误信息 在action的目录下创建一个资源文件RegisterAction.properties RegisterAction:action类名一致(特定类型转换类),properties固定不变 文件类容 invalid.fieldvalue.birthday=生日转换错误 invalid.fieldvalue固定不变,birthday类对应的属性 八:struts2标签 1. 迭代标签 1、 通过该方法可以得到迭代时的序列号 <s:iterator value"resultList" id="result" status='st'> 下标为:<s:property value='#st.index'/> </s:iterator> 3、小结 1、Action必须有一个返回类型是String的类;返回值随意但是返回值必须和struts.xml配置文件相对应; 2、Action类可以是继承ActionSuppor的类,也可以是实现Action的类,也可以是普通类; 3、当Action类要做前台验证时就必须是继承ActionSuppor的类; 4、Action类有属性申明、方法 经验: 1、 在web.xml配置文件中Error pages下可以设置拦截器,拦截404。。。,以及错误如Exection等; 2、 命名要规范,不能用关键字; 3、 对象在前台不需要加载 4、 在struts2要用list集合,则需要将hibernate配置文件中的<set>节点改成<bag>节点,实体类用list去接受数据;
相关推荐
在本“Struts学习笔记(四)”中,我们将会深入探讨Struts框架的核心概念、工作原理以及如何实际运用到项目开发中。 首先,Struts框架的核心目标是提供一个结构化的开发环境,将业务逻辑、数据处理和用户界面有效地...
博客文章"Struts学习笔记之ActionForm - xiaodaoxiaodao——蓝小刀的自言自语 - BlogJava.mht"可能包含更深入的实践示例和经验分享,包括如何处理ActionForm的生命周期、动态Form Beans、国际化等话题。通过阅读这篇...
pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。
基于java的大学生兼职信息系统答辩PPT.pptx
基于java的乐校园二手书交易管理系统答辩PPT.pptx
tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl
Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175
有学生和教师两种角色 登录和注册模块 考场信息模块 考试信息模块 点我收藏 功能 监考安排模块 考场类型模块 系统公告模块 个人中心模块: 1、修改个人信息,可以上传图片 2、我的收藏列表 账号管理模块 服务模块 eclipse或者idea 均可以运行 jdk1.8 apache-maven-3.6 mysql5.7及以上 tomcat 8.0及以上版本
tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl
Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175
matlab
基于java的毕业生就业信息管理系统答辩PPT.pptx
随着高等教育的普及和毕业设计的日益重要,为了方便教师、学生和管理员进行毕业设计的选题和管理,我们开发了这款基于Web的毕业设计选题系统。 该系统主要包括教师管理、院系管理、学生管理等多个模块。在教师管理模块中,管理员可以新增、删除教师信息,并查看教师的详细资料,方便进行教师资源的分配和管理。院系管理模块则允许管理员对各个院系的信息进行管理和维护,确保信息的准确性和完整性。 学生管理模块是系统的核心之一,它提供了学生选题、任务书管理、开题报告管理、开题成绩管理等功能。学生可以在此模块中进行毕业设计的选题,并上传任务书和开题报告,管理员和教师则可以对学生的报告进行审阅和评分。 此外,系统还具备课题分类管理和课题信息管理功能,方便对毕业设计课题进行分类和归档,提高管理效率。在线留言功能则为学生、教师和管理员提供了一个交流互动的平台,可以就毕业设计相关问题进行讨论和解答。 整个系统设计简洁明了,操作便捷,大大提高了毕业设计的选题和管理效率,为高等教育的发展做出了积极贡献。
这个数据集来自世界卫生组织(WHO),包含了2000年至2015年期间193个国家的预期寿命和相关健康因素的数据。它提供了一个全面的视角,用于分析影响全球人口预期寿命的多种因素。数据集涵盖了从婴儿死亡率、GDP、BMI到免疫接种覆盖率等多个维度,为研究者提供了丰富的信息来探索和预测预期寿命。 该数据集的特点在于其跨国家的比较性,使得研究者能够识别出不同国家之间预期寿命的差异,并分析这些差异背后的原因。数据集包含22个特征列和2938行数据,涉及的变量被分为几个大类:免疫相关因素、死亡因素、经济因素和社会因素。这些数据不仅有助于了解全球健康趋势,还可以辅助制定公共卫生政策和社会福利计划。 数据集的处理包括对缺失值的处理、数据类型转换以及去重等步骤,以确保数据的准确性和可靠性。研究者可以使用这个数据集来探索如教育、健康习惯、生活方式等因素如何影响人们的寿命,以及不同国家的经济发展水平如何与预期寿命相关联。此外,数据集还可以用于预测模型的构建,通过回归分析等统计方法来预测预期寿命。 总的来说,这个数据集是研究全球健康和预期寿命变化的宝贵资源,它不仅提供了历史数据,还为未来的研究和政策制
基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx
基于java的超市 Pos 收银管理系统答辩PPT.pptx
基于java的网上报名系统答辩PPT.pptx
基于java的网上书城答辩PPT.pptx
婚恋网站 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B