`

struts学习笔记

 
阅读更多
一、得到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框架的核心目标是提供一个结构化的开发环境,将业务逻辑、数据处理和用户界面有效地...

    [摘]Struts 学习笔记之ActionForm

    博客文章"Struts学习笔记之ActionForm - xiaodaoxiaodao——蓝小刀的自言自语 - BlogJava.mht"可能包含更深入的实践示例和经验分享,包括如何处理ActionForm的生命周期、动态Form Beans、国际化等话题。通过阅读这篇...

    pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.002)

    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

    基于ssm框架+mysql+jsp实现的监考安排与查询系统

    有学生和教师两种角色 登录和注册模块 考场信息模块 考试信息模块 点我收藏 功能 监考安排模块 考场类型模块 系统公告模块 个人中心模块: 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

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.001)

    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车牌识别代码实现代码【含界面GUI】.zip

    matlab

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于Web的毕业设计选题系统的设计与实现(springboot+vue+mysql+说明文档).zip

    随着高等教育的普及和毕业设计的日益重要,为了方便教师、学生和管理员进行毕业设计的选题和管理,我们开发了这款基于Web的毕业设计选题系统。 该系统主要包括教师管理、院系管理、学生管理等多个模块。在教师管理模块中,管理员可以新增、删除教师信息,并查看教师的详细资料,方便进行教师资源的分配和管理。院系管理模块则允许管理员对各个院系的信息进行管理和维护,确保信息的准确性和完整性。 学生管理模块是系统的核心之一,它提供了学生选题、任务书管理、开题报告管理、开题成绩管理等功能。学生可以在此模块中进行毕业设计的选题,并上传任务书和开题报告,管理员和教师则可以对学生的报告进行审阅和评分。 此外,系统还具备课题分类管理和课题信息管理功能,方便对毕业设计课题进行分类和归档,提高管理效率。在线留言功能则为学生、教师和管理员提供了一个交流互动的平台,可以就毕业设计相关问题进行讨论和解答。 整个系统设计简洁明了,操作便捷,大大提高了毕业设计的选题和管理效率,为高等教育的发展做出了积极贡献。

    机器学习(预测模型):2000年至2015年期间193个国家的预期寿命和相关健康因素的数据

    这个数据集来自世界卫生组织(WHO),包含了2000年至2015年期间193个国家的预期寿命和相关健康因素的数据。它提供了一个全面的视角,用于分析影响全球人口预期寿命的多种因素。数据集涵盖了从婴儿死亡率、GDP、BMI到免疫接种覆盖率等多个维度,为研究者提供了丰富的信息来探索和预测预期寿命。 该数据集的特点在于其跨国家的比较性,使得研究者能够识别出不同国家之间预期寿命的差异,并分析这些差异背后的原因。数据集包含22个特征列和2938行数据,涉及的变量被分为几个大类:免疫相关因素、死亡因素、经济因素和社会因素。这些数据不仅有助于了解全球健康趋势,还可以辅助制定公共卫生政策和社会福利计划。 数据集的处理包括对缺失值的处理、数据类型转换以及去重等步骤,以确保数据的准确性和可靠性。研究者可以使用这个数据集来探索如教育、健康习惯、生活方式等因素如何影响人们的寿命,以及不同国家的经济发展水平如何与预期寿命相关联。此外,数据集还可以用于预测模型的构建,通过回归分析等统计方法来预测预期寿命。 总的来说,这个数据集是研究全球健康和预期寿命变化的宝贵资源,它不仅提供了历史数据,还为未来的研究和政策制

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    婚恋网站 SSM毕业设计 附带论文.zip

    婚恋网站 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

Global site tag (gtag.js) - Google Analytics