Struts2开发第一步

时间:2021-08-13 19:31:39

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

Struts2开发第一步

编写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>
输出:

Struts2开发第一步

在浏览器访问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";