Struts2开发第一步

来源:互联网 发布:六人定律知乎 编辑:程序博客网 时间:2024/06/08 07:29

使用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";











0 0
原创粉丝点击