• 【Struts 2】Struts2环境搭建


    一、关键步骤

    1、创建Java Web项目
    2、引入Struts2的依赖包,将依赖包拷贝到WEB-INF/lib下
    * commons-logging-1.0.4.jar
    * freemarker-2.3.15.jar
    * ognl-2.7.3.jar
    * struts2-core-2.1.8.1.jar
    * xwork-core-2.1.6.jar
    * commons-fileupload-1.2.1.jar
    3、在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDispatcher

    <span style="font-family:KaiTi_GB2312;font-size:18px;">    <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>
        </span>

    4、提供struts2配置文件struts.xml,放到src下
    5、建立JSP(login.jsp、login_success.jsp、login_error.jsp)
    6、创建Struts2的Action,Struts2的action可以不用继承Struts2框架中的任何类,也不用实现Struts2框架中的任何接口,所以Struts2的Action可以是一个POJO(纯粹的Java对象)所以Struts2的Action测试更容易: Struts2缺省方法名称:public String execute() throws Exception;
       7、在Action中提供getter和setter方法,便于收集数据(这样收集数据的模式一般可以成为属性驱动模式,也可以采用模型驱动)
    8、将JSP和Action配置到struts.xml配置文件中

    二、实例解析


    说明:User为实体类

    LoginAction类:

    <span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.struts2;
    
    import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class LoginAction <span style="color:#ff0000;">implements Action,ModelDriven<User></span>{
    	/*实现模型驱动模式:
    	* 1,创建User
    	* 2,Action需要实现ModelDriven接口
    	* 3,实现getModel()方法,返回Bean对象*/
    	private User user=new User();
    	public User getModel(){
    		return user;
    	}
    	public String execute() throws Exception{
    		System.out.println(user.getUsername());
    		if ("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())) {
    			return "success";
    		}else{
    			return "error";
    		}
    	}
    }
    </span>

    login.jsp代码:

    <span style="font-family:KaiTi_GB2312;font-size:18px;"> <body>
        <form action="login.action">
        	用户:<input type="text" name="username"><br>
        	密码:<input type="password" name="password"><br>
        	<input type="submit" value="登录">
        </form>
      </body></span>

    注意:

    在配置文件中,我们可以发现存在这两个配置文件,第一个是:struts_user,第二个是:struts。为什么会存在着两个?比如说,我们的项目里面有10个模块,每个模块都需要在struts配置文件中配置相应的转向,如果每个人都去更改这个文件,那么势必会造成不同程度的冲突。而Struts2支持团队开发(多配置文件),可以为某个模块建立单独的配置文件,该配置文件的格式需要和struts.xml配置文件的格式一致,然后在Struts配置文件中采用标签<include>引入,如:

    struts_user配置文件:

    <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
    	<!-- 需要继承struts-default包,这样就拥有的最基本的功能 -->
    	<package name="struts2" extends="struts-default">
    		<action name="login" class="com.angel.struts2.LoginAction">
    			<!-- <result>标签的那么属性,如果不配置,那么缺省值为success -->
    			<result>/login_success.jsp</result>
    			<result name="error">/login_error.jsp</result>
    		</action>
    	</package>
    </struts>
    </span>
    struts配置文件:

    <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
    	<!-- 当struts.xml配置文件发生修改,会立刻加载,在生产环境下最好不要配置 -->
    	<constant name="struts.configuration.xml.reload" value="true"/>
    	
    	<!-- 会提供更加友好的提示信息 -->
    	<constant name="struts.devModel" value="true"/>
    	
    	<!-- 可使用多个include标签 -->
    	<include file="struts_user.xml"/>
    	
    </struts>
    </span>

    三、总结

    因为之前学习过Struts1,所以在接触2的时候,明显感觉到比较轻松的。它们的配置没有什么太大的区别,在struts1里面,我们采用ActionForm的方式收集数据,而在2里面,我们采用ModelDriven模式,其基本的原理都是一样的。接下来,总结总结struts2的基本原理和架构设计。

  • 相关阅读:
    [转载]分治算法详解
    数值的三种表示--C语言
    [转载]位运算操作
    递归--基于位运算的八皇后问题求解
    递归--基于回溯和递归的八皇后问题解法
    关于C/C++中数组元素的初始化
    递归的使用方法及说明
    递归--基于排列的八皇后问题解法
    Android笔记(二十) Activity中的跳转和值传递
    Android笔记(十九) Android中的Fragment
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010304.html
Copyright © 2020-2023  润新知