struts2_框架介绍

 

Struts2 的作用

前台mvc的实现   请求到视图的分离

配置Struts2 

在web.xml里配置struts2的过滤器

根据需求配置src目录下的struts2.xml文件

Struts2.xml 标签详解

<struts>
	<!-- ----------------------------------------------constant标签------------------------------------------------- -->
	<!-- 开发者模式,改了配置文件无需重新部署即可看到效果 -->
	<constant name="struts.devMode" value="true" />
	<!-- 打开动态方法调用,url后面跟!add 可以指定该action调用的class 方法 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	<!-- 指定Struts2默认的ObjectFactoryBean:action实例由spring创建 -->
	<constant name="struts.objectFactory" value="spring" />
	<!-- 可选值(name, type, auto, constructor,name)(默认name),设置spring的自动装配方式,只有引入spring插件后才有效 -->
	<constant name="struts.objectFactory.spring.autoWire" value="type" />
	<!--国际化-->
	<constant name="struts.custom.i18n.resources" value="messagesource"></constant>
	<!-- 上传文件大小限制设置 -->
	<constant name="struts.multipart.maxSize" value="629145600"/>
	<!-- ------------------------------------------------package标签-------------------------------------------------- -->	
	<!-- package:利用不同的namespace解决action的name相同的问题,即:前台和后台的index页面 -->
	<!-- namespace:定义了访问该package下action里jsp程序的URL路径的格式,即:http://localhost:8088/项目名/front/action名,默认为"",即处理你输入的URL找不到指定的action时候的跳转页面 -->
	<package name="global" extends="struts-default" namespace="">
		<!-- --------------------------------------------interceptors标签-------------------------------------------- -->
 		<interceptors>
			<interceptor-stack name="defaultStack">
				<interceptor-ref name="defaultStack">
					<param name="exception.logEnabled">true</param>
					<param name="exception.logLevel">error</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<!-- --------------------------------------------global-results标签-------------------------------------------- -->
		<!-- 公用result ,可以被同package下的其他action实现类返回global-results标签下的result的name值从而访问对应的资源(jsp文件)   -->
		<!-- 不同的package的extends如果指向包裹global-results标签的package的name(extends="global"),也可以通过其下的action实现类返回global-results标签下的result的name值从而访问对应的资源(jsp文件)-->
		<!-- 也能被通过extends公共result的 package 的name 的其他的package 里的action 实现类返回mainpage 从而访问 main.jsp -->
		<global-results>
			<result name="globalError">/WEB-INF/contents/public/error.jsp</result>
		</global-results>
		<!-- --------------------------------------------global-exception-mappings标签-------------------------------------------- -->
		<!-- 全局申明式异常捕获:所有的action抛出的异常如果没有在对应的exception-mapping中处理,则会在global-exception-mappings中的exception-mapping寻找对应的exception,找到后跳转到global-results中对应result(result name="globalError")-->
		<global-exception-mappings>
			<exception-mapping result="globalError" exception="java.lang.Exception"></exception-mapping>
	    </global-exception-mappings>
	</package>
	<package name="default" namespace="/" extends="struts-default">
 		<!-- --------------------------------------------default-action-ref标签-------------------------------------------- -->
     	<!-- 访问该package下不存在的 action时默认返回 name=aa的action -->
     	<default-action-ref name="aa">
    		<action name="aa">
    			<result>/default.jsp</result>
    		</action>
    	</default-action-ref>	
    </package>
	<package>
 		<!-- --------------------------------------------action标签-------------------------------------------- -->
		<!-- class:定义了访问该package下action里JAVA程序的路径,即不同的action封装不同的包,该包下的class类必须继承ActionSupport接口,默认调用public String execute()方法,因为ActionSupport接口里封装了一系列我们可以方便调用的方法,然后根据该class返回的值a即为接下来要跳转的result-name=a下面的jsp文件 -->
		<!-- method = "a": 不推荐使用:动态指定该使用class类里的a方法,必须有Stringl类型返回值b,再取name=b的result  -->
		<!-- method:class里有几个方法,就要配置几个不同的action,麻烦.改用在url中指定method的方法,只要一个action,即: /localhost:8088/项目名+namespace/action名/action名!class里的某方法名 或者通配符 -->
		<action name="index " class="package包名.class类名" method="add"> 
			<!-- --------------------------------------------result标签-------------------------------------------- -->                                                                 
			<!-- 指定访问该result的页面跳转方式 -->
			<!-- 不指定时 默认为 dispatcher 方式,服务器端跳转(jsp:forward) -->
			<!-- type="redirect":客户端跳转(目标不能为Action) -->
			<!-- type="chain":服务器端forword跳转(目标可以是Action) -->
			<!-- type="redirectAction":客户端跳转(目标可以是Action) -->
			<result name="a" type="dispatcher">/Hellow.jsp</result>
            <result name="b">/World.jsp</result>
		</action>	
    </package>		
	<!-- --------------------------------------------include标签-------------------------------------------- -->
	<!-- 引入指定的strut2.xml文件 -->
 	<include file="struts/struts-security.xml" />	
</struts>

 

Struts2 的action如何动态调用实现类的指定方法

1.url后面加上 !方法名  指定该action调用的具体方法

2.通配符来实现使配置文件最简化

        <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
            <result>/Student{1}_success.jsp</result>
        </action>
        
        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
            <result>/{1}_{2}_success.jsp</result>
            <!-- {0}_success.jsp -->
        </action>

/actions/Teacher_add 即可访问  TeacherAction.java 里的add 方法,如果返回sucess 则 访问  Teacher_add_success.jsp.jsp

Struts2的 action实现类如何接受参数,该参数有什么用

     action接受参数的方式

URL格式:http://localhost:8088/项目名+spacename/action名/action名!class里的c方法名?a=1&b=2
action接受参数的方式是调用对应的class里的设置参数的方法:对应的class里要有对应类型的成员变量x,y,seta(){this.x=a}和setb(this.y=b)的方法,才能拿到传递进来的参数,至于c()里怎么用这俩参数无所谓

    DomainModel接受参数的方式:

public class UserAction extends ActionSupport {
	
	private User user;
	//private UserDTO userDTO;
	public String add() {
		System.out.println("name=" + user.getName());
		System.out.println("age=" + user.getAge());
		return SUCCESS;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
}

ModelDriven接收参数的方式:

public class UserAction extends ActionSupport implements ModelDriven<User>{
	
	private User user = new User();
	
	public String add() {
		System.out.println("name=" + user.getName());
		System.out.println("age=" + user.getAge());
		return SUCCESS;
	}

	@Override
	public User getModel() {
		return user;
	}
	
}

Struts2的 action实现类如何给request,session,application里塞值

public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
	
	private Map<String, Object> request;
	private Map<String, Object> session;
	private Map<String, Object> application;
	
	//DI dependency injection 依赖注入
	//IoC inverse of control  控制反转
	public String execute() {
		request.put("r1", "r1");
		session.put("s1", "s1");
		application.put("a1", "a1");
		return SUCCESS; 
	}

	@Override
	public void setRequest(Map<String, Object> request) {
		this.request = request;
	}

	@Override
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

	@Override
	public void setApplication(Map<String, Object> application) {
		this.application = application;
	}
	
	
}

前台通过s标签或者jsp去获取 request,session,application

<s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> 

Struts2 如何动态的给将要访问的result 的页面传值

<li><a href="user/user?type=1">传参数</a></li>  


   <package name="user" namespace="/user" extends="struts-default">
	    <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
	    	<result type="dispatcher">/user_success.jsp?t=${type}</result>
	    </action>	    
    </package>

public class UserAction extends ActionSupport {
	private int type;
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	@Override
	public String execute() throws Exception {
		return "success";
	}

}

注意  : action实现类里的属性要设置get set 方法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值