Struts2框架(二):封装方法&其他介绍&注入方式详解

Struts2系列文章推荐:
👉 Struts2框架(一):入门xml配置及action编写
👉 Struts2框架(三):OGNL表达式与值栈
👉 Struts2框架(四):控制器&其他OGNL标签&拦截器
👉 待更新

1、第一章内容回顾

 Struts2的框架的概述
   什么是Struts2
     Struts2是一个基于MVC设计模式的web层的框架。
   常见的web层框架
     Struts2
     Struts1
     SpringMVC
     Webwork
   Web层框架
     基于前端控制器模型
 Struts2的入门程序
   下载Struts2的开发包
   解压Struts2开发环境
   创建web项目,引入jar包
     struts/apps/struts-blank.war/WEB-INF/lib/*.jar
   编写JSP页面
   编写Action类
   配置Action类
   配置核心过滤器
 Struts2的执行流程
   请求->核心过滤器(StrutsPrepareAndExecuteFilter)->执行一组拦截器(完成部分的功能)->Action->Result.
 Struts2的常见配置
   配置文件的加载顺序
     后配置的配置文件中的常量的值会覆盖先配置的配置文件的常量的值。
   Action的配置
     package配置
       name :包名
       extends :继承
       namespace :名称空间,与action中name共同决定访问路径
       abstract :用于其他包的继承
     action的配置
       name :与namespace共同决定访问路径
       class :Action类的全路径
       method :执行Action中的某个方法,默认值execute。
   constant配置(default.properties)
     设置Struts2的常量
   include配置
     分模块开发的使用
 Struts2的Action的访问
   Action的编写
     Action是POJO类
     Action实现Action接口
     Action继承ActionSupport类
   Action的访问
     通过method属性配置
     通过通配符的方式配置
     动态方法访问的方式

2、Struts2访问Servlet的API的方式

方式一:完成解耦合的方式

概述
在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的。在实际开发中,经常使用到Servlet的API,比如进行登录,将用户的信息保存到Session中,有的时候需要向页面输出一些内容,用到response对象。涉及到Servlet的API的访问。
编写JSP

<body>
	<form action="${pageContext.request.contextPath}/user_login" method="post">
		账号:<input type="text" name="username"><br/>
		密码:<input type="password" name="password"><br/>
		<input type="submit" value="确认">
	</form>
</body>

编写Action
完全解耦方式action

public class ActionDemo1 extends ActionSupport{
	public String login(){
		ActionContext context = ActionContext.getContext();
		Map<String, Object> parameters = context.getParameters();
		for (String key : parameters.keySet()) {
			Object[] values = (Object[]) parameters.get(key);
			System.out.println("key="+key+"==="+"values="+"==="+Arrays.toString(values));
			context.put("commonInfo", Arrays.toString(values)+"by common");
			context.getSession().put("sessionInfo", Arrays.toString(values)+"by session");
			context.getApplication().put("applicationInfo", Arrays.toString(values)+"by application");
		}
		return "loginSuccess";
	}
}

编写success页面

<body>
	<h1>成功跳转!</h1>
	<h3>${commonInfo }</h3>
	<h3>${sessionInfo }</h3>
	<h3>${applicationInfo }</h3>
</body>

注意
1、这种方式只能获得代表request、session、application的数据的Map集合,不能操作这些对象的本身的方法。
2、注意filter的配置!!!

方式二:使用原生的方式(***)

编写JSP
编写JSP
编写Action
编写Action
注意
1、这种方式可以操作域对象的数据,同时也可以获得对象的方法。
2、这种方式不仅能使用的方法多,而且贴近之前编写的习惯

方式三:接口注入的方式

编写JSP
编写JSP
编写Action
编写Action
注意
1、Servlet是单例的,多个程序访问同一个Servlet只会创建一个Servlet的实例。Action是多例的,一次请求,创建一个Action的实例(不会出现线程安全的问题)。
2、这种方式每次要使用一个对象都要重写一个方法,而且还要额外实现一个接口,比较麻烦

3、Struts2的结果页面的配置

结果页面的配置包括:全局结果页面、局部结果页面
全局结果页面
 全局结果页面:全局结果页面指的是,在包中配置一次,其他的在这个包中的所有的action只要返回了这个值,都可以跳转到这个页面。
   针对这个包下的所有的action的配置都有效。
全局结果页面
局部结果页面
 局部结果页面:局部结果页面指的是,只能在当前的action中的配置有效。
   针对当前的action有效。
局部结果页面
result标签的配置
 result标签用于配置页面的跳转。在result标签上有两个属性:
   name属性 :逻辑视图的名称。默认值:success
   type属性 :页面跳转的类型。
     dispatcher :默认值,请求转发。(Action转发JSP)
     redirect :重定向。(Action重定向JSP)
     chain :转发。(Action转发Action)
     redirectAction :重定向。(Action重定向Action)
     stream :Struts2中提供文件下载的功能。

4、Struts2的数据封装方式

方式一:属性驱动-提供set方法的方式(不常用)

Struts2框架是一个web层框架,web层框架(框架:软件的半成品,完成一部分功能)。Struts2提供了数据封装的功能。
编写页面
编写页面
编写Action
action

方式二:属性驱动-页面提供表达式方式

编写JSP
jsp
编写Action
编写Action2
注意
1、页面提供表达式的方式来封装数据很简单,就是在页面的name多了个前缀 对象名.属性,使用的是OGNL表达式
2、Action类中一定要提供get和set方法,因为Struts底层就是有拦截器来实现数据封装,封装的前提是要获取到这个对象,如果不提供get方法,那么底层每次都要创建一个对象,并附上一个属性值,到最后就创建了n个对象,这样的话输出这个对象也只有一个属性值

方式三:模型驱动-采用模型驱动的方式

编写JSP
编写JSP2
编写Action
编写Action3
注意
 模型驱动方式最常用的方式:
   缺点:只能同时向一个对象中封装数据。
 使用第二种可以向多个对象中同时封装数据
 属性驱动使用的拦截器是Params,模型驱动使用的是ModelDriven

5、Struts2的INPUT逻辑视图的配置

关于INPUT逻辑视图
 Action接口中提供了五个逻辑视图的名称:
   SUCCESS
   ERROR
   LOGIN
   INPUT :input在某些拦截器中会使用。
   NONE
INPUT逻辑视图的配置
INPUT的配置
在struts_demo.xml的package中:<result name="input">/regist.jsp</result>
在JSP中:添加标签库,<%@ taglib prefix="s" uri="/struts-tags"%>。并在下方添加错误信息提示,<s:fielderror/>

6、Struts2的复杂类型的数据封装

封装到List集合中

编写JSP
List_jsp
编写Action
ProductAction1
注意
1、在进行数据封装的时候,底层使用的实例化对象没有用到重写构造方法,使用的是默认的
2、get、set方法,其后第一个字母必须大写,否则无法初始化

封装到Map集合中

编写JSP
Map
编写Action
productAction2

7、CRM综合练习:保存客户代码实现

保存操作流程
 点击左侧的菜单页面页面:
 跳转到添加页面(经过Action):
 在添加页面中输入指定的信息,点击【保存】
 将数据提交到ActionServiceDAO
 最终回到列表页面
第一步:修改菜单页面上链接

<TR>
	<TD class=menuSmall><A class=style2 href="${pageContext.request.contextPath}/customer_saveUI" 
		target=main>- 新增客户</A>
	</TD>
</TR>

第二步:编写Action中的saveUI的方法

public String saveUI(){
	return "saveUI";
}

第三步:配置页面跳转
配置页面跳转
第四步:修改添加页面

<FORM id=form1 name=form1
	action="${pageContext.request.contextPath }/customer_save"
	method=post>

第五步:完成保存操作
 编写Action
customer_action
 编写Service

@Override
public void save(Customer customer) {
	dao.save(customer);
}

 编写Dao

@Override
public void save(Customer customer) {
	Session session = HibernateUtils.getCurrentSession();
	Transaction transaction = session.beginTransaction();
	System.out.println(customer);
	session.save(customer);
	transaction.commit();
}

第六步:配置页面的跳转
配置页面跳转1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hillain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值