Struts2开发第一步

使用Struts2进行开发,首先需要导入Struts2所需的jar包,开发所需基本jar包:


编写web.xml文件,添加Struts2核心过滤器:

<filter>
  	<filter-name>struts</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
编写后台代码:

public class HelloWorldAction {
	
	public String execute() {
		System.out.println("HelloWorld");
		return "index";
	}

}
编写struts.xml文件:

在src目录下建立struts.xml文件

<struts>
	<package name="helloworld" namespace="/" extends="struts-default">
		<action name="helloWorldAction" class="cn.itcast.HelloWorld.HelloWorldAction">
			<result name="index">index.jsp</result>
		</action>
	</package>
</struts>
编写index.jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	欢迎页面!
</body>
</html>
输出:


在浏览器访问http:localhost:8080/struts2_01/helloWorldAction.action,页面跳转至index.jsp页面,Eclipse控制台输出Hello World,证明Struts2环境配置正确。


总结:

1.在web.xml文件中只有一个过滤器,不再需要繁琐的配置;

2.action是一个简单的javabean,与servlet容器没有依赖关系,便于单元测试;

3.多了一个struts.xml文件,该文件配置了url和需要跳转的jsp文件。


注意:

struts.xml文件必须在classpath的根目录下。


补充:

struts.xml为什么一定要在classpath根目录下?

我们在web.xml文件中配置了StrutsPrepareAndExecuteFilter过滤器,查看StrutsPrepareAndExecuteFilter中的init方法:

public void init(FilterConfig filterConfig) throws ServletException {
        InitOperations init = new InitOperations();
        try {
            FilterHostConfig config = new FilterHostConfig(filterConfig);
            init.initLogging(config);
            Dispatcher dispatcher = init.initDispatcher(config);
            init.initStaticContentLoader(config, dispatcher);

            prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
            execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
			this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);

            postInit(dispatcher, filterConfig);
        } finally {
            init.cleanup();
        }

    }


 可以看到在 
init.initDispatcher(config)
中加载了相关配置文件,查看initDIspatcher(config)方法可以看出struts2通过dispatcher.init()方法初始化信息。
public Dispatcher initDispatcher( HostConfig filterConfig ) {
        Dispatcher dispatcher = createDispatcher(filterConfig);
        dispatcher.init();
        return dispatcher;
    }
查看dispatcher的init()方法可以看出init_TraditionalXmlConfigurations()加载了XML配置文件

public void init() {

    	if (configurationManager == null) {
    		configurationManager = createConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);
    	}

        try {
            init_DefaultProperties(); // [1]
            init_TraditionalXmlConfigurations(); // [2]
            init_LegacyStrutsProperties(); // [3]
            init_CustomConfigurationProviders(); // [5]
            init_FilterInitParameters() ; // [6]
            init_AliasStandardObjects() ; // [7]

            Container container = init_PreloadConfiguration();
            container.inject(this);
            init_CheckConfigurationReloading(container);
            init_CheckWebLogicWorkaround(container);

            if (!dispatcherListeners.isEmpty()) {
                for (DispatcherListener l : dispatcherListeners) {
                    l.dispatcherInitialized(this);
                }
            }
        } catch (Exception ex) {
            if (LOG.isErrorEnabled())
                LOG.error("Dispatcher initialization failed", ex);
            throw new StrutsException(ex);
        }
    }
最后我们查看init_TraditionalXmlConfigurations()方法,

private void init_TraditionalXmlConfigurations() {
        String configPaths = initParams.get("config");
        if (configPaths == null) {
            configPaths = DEFAULT_CONFIGURATION_PATHS;
        }
        String[] files = configPaths.split("\\s*[,]\\s*");
        for (String file : files) {
            if (file.endsWith(".xml")) {
                if ("xwork.xml".equals(file)) {
                    configurationManager.addContainerProvider(createXmlConfigurationProvider(file, false));
                } else {
                    configurationManager.addContainerProvider(createStrutsXmlConfigurationProvider(file, false, servletContext));
                }
            } else {
                throw new IllegalArgumentException("Invalid configuration file name");
            }
        }
    }
我们看到其中有一个变量configPaths = DEFAULT_CONFIGURATION_PATHS,该常量的值如下,可以看出变量并不再任何包下,应该在classpath根目录下:

private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值