struts2学习笔记(一)

一、struts2简介

1.1 struts2是什么

struts2是一个web层的架构,初步实现了mvc的模式,使得网站开发变的更加的便捷。

如图所示:

1.2 struts2的优点

自动封装参数、参数校验、结果的处理(转发、重定向)、国际化、显示等待页面、表单的重复提交。

1.3 struts2的历史

struts2与structs1的区别就是没有任何关系,struts2前身是webwork框架,改名了,改成了struts2了,因为struts比较有名。

二、struts2框架搭建

2.1 导包

由于不知道导入哪些包,我们可以解压struts2的压缩包,找到里边的apps,里边有demo,我们打开一个最简单的demo,找到下边的lib里边的包就可以了

同样用360压缩打开,这是我们的war包

里边的lib的包赋值出来就行了。

2.2 编写Action类

struts2中的每一个请求都看做为一个Action,一个Action由一个Action类来处理。

package cn.itcast.action;

public class HelloAction {

	public String hello(){
		return "success";
	}
}

2.3 编写配置文件struts.xml

在src下边创建一个名字为struts.xml的配置文件,这是struts2的核心配置文件。并导入约束:

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="hello" namespace="/hellospace" extends="struts-default">
		<action name="HelloAction" class="cn.itcast.action.HelloAction"
			method="hello">
			<result name="success">/index.jsp</result>
		</action>
	</package>
</struts>

2.3 配置struts2核心过滤器

struts2通过过滤器拦截请求,进入自己的框架内处理,所以要配置一下,在web.xml中加入以下配置。

  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

2.4 添加index.jsp页面

添加一个index.jsp页面,请求之后要转发到index.jsp中,在里边写入一些内容。

浏览器访问 http://localhost:8080/strutsday01/hellospace/HelloAction  如果现实正常,说明配置成功。

三、配置详解

3.1 struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	
		package: 将Action封装配置在一起,构成一个包,区分一下一组有相似功能的Action
		name:包名,起到标识作用,随便起,不能和其他包重复。
		namespace:名称空间,访问其中所有action地址的前缀
		extends:继承自那个包,一般写struts-default,当然也可以定义自己的包,包中已经封装了一些常见的功能,继承之后就不用重新配置了
	 
	<package name="hello" namespace="/hellospace" extends="struts-default">
	
		action:配置一个Action类
		name:action类的名称,访问action的时候要用这个名称,也不一定是和类的名称一样。
		class:action类的完全限定名,struts需要根据这个配置找到对应的类
		method:要执行类中的哪个方法来处理请求。
		
	
		<action name="HelloAction" class="cn.itcast.action.HelloAction"
			method="hello">
			
			result:action类中的方法返回的结果,返回结果一般是字符串,name与其对应,后边根要处理的页面
			type:指定结果需要用哪种类型来处理,默认是dispather转发,还有redirect等等。
			 
			<result name="success" type="dispather">/index.jsp</result>
		</action>
	</package>
	<!--
		包含其他的struts.xml的配置,如果配置比较多的情况下,可以使用
	  -->
	<include file="cn/itheima/b_dynamic/struts.xml"></include>
</struts>

3.2 struts2常量配置

3.2.1 默认配置

相当于框架的一些参数配置,也说常量配置。

默认的常量配置在下边这个路径:

打开之后可以看到:

3.2.2 配置方式

方式一:

在struts.xml中配置

 i18n:国际化. 解决post提交乱码
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

方式二:

在src下面创建struts.properties文件

然后从default.properties里边复制已有的配置进行覆盖。

方式三:

在web.xml中配置

<context-param>
  	<param-name>struts.i18n.encoding</param-name>
  	<param-value>UTF-8</param-value>
</context-param>

struts启动后,加载配置的顺序为:

default.properties

struts-default.xml

struts-plugin.xml

struts.xml

struts.properties

web.xml

总结:一般我们推荐在struts.xml中配置,用<constant>标签来配置。

3.2.3  一些常用的常量配置

	 i18n:国际化. 解决post提交乱码 
	<constant name="struts.i18n.encoding" value="UTF-8"></constant>
	指定访问action时的后缀名 
		http://localhost:8080/struts2_day01/hello/HelloAction.do
	
	<constant name="struts.action.extension" value="action"></constant>
	指定struts2是否以开发模式运行
			1.热加载主配置.(不需要重启即可生效)
			2.提供更多错误信息输出,方便开发时的调试
	 
	<constant name="struts.devMode" value="true"></constant>

3.2.4 动态方法调用配置

前边我配置的时候一个action里边只有一个方法可以处理请求,但是有时候我们期望一个action可以有多个方法可以处理请求,不然就太麻烦了,比如处理一个业务的增删改查可以放到一个aciton中去。

我们可以根据访问的地址动态的调用我们的action中的方法,

比如HelloAction_add访问HelloAction类中的add方法,比如HelloAction_update访问HelloAction类中的update方法。

配置如下:


<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	<package name="dynamic" namespace="/dynamic" extends="struts-default">
		<action name="DynamicAction_*" class="cn.itcast.action.DynamicAction"
			method="{1}">
			<result name="success" type="dispatcher">/index.jsp</result>
		</action>
	</package>
</struts>

DynamicAction类:

package cn.itcast.action;

public class DynamicAction {

	public String add() {

		System.out.println("add");
		return "success";
	}

	public String update() {

		System.out.println("update");
		return "success";
	}
}

3.2.5 struts中的默认配置

<package name="default" namespace="/default" extends="struts-default">  
    method:默认是execute方法
	<action name="DefaultAction" class="cn.itcast.action.DefaultAction">                                     
        name:默认是success,type:默认是dispathcer
  		<result >default.jsp</result>                                  
	</action>                                                          
</package>                                                             
package cn.itcast.action;

public class DefaultAction {

	public String execute(){
		return "success";
	}
}

四、Action类的编写方式

4.1 原生POJO

package cn.itcast.action;

public class HelloAction {

	public String hello(){
		return "success";
	}
}

4.2 实现Action接口

package cn.itcast.action;

import com.opensymphony.xwork2.Action;

public class StrutsAction1 implements Action {

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}

}

4.3 继承ActionSupport

package cn.itcast.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class StrutsAction2 extends ActionSupport {

	

}

不过这三种方式都得去配置

<package name="Action1" namespace="/action1" extends="struts-default">     
	<action name="StrutsAction1" class="cn.itcast.action.StrutsAction1">   
		<result>/index.jsp</result>                                        
	</action>                                                              
</package>                                                                 
<package name="Action2" namespace="/action2" extends="struts-default">     
	<action name="StrutsAction2" class="cn.itcast.action.StrutsAction2">   
		<result>/index.jsp</result>                                        
	</action>                                                              
</package>                                                                 

推荐是用继承ActionSupport方式

ActionSupport类的作用
    struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。
    Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。

五、总结

今天我们初步学习了struts2的框架搭建。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值