我们先看Struts2的一个简单例子,由于它是一个前端框架,所以我仅仅贴出了前端的代码和配置文件信息:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置Struts2的核心的过滤器 -->
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Struts.xml
<?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>
<!-- 配置为开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- 把扩展名配置为action -->
<constant name="struts.action.extension" value="action" />
<!-- 把主题配置为simple -->
<constant name="struts.ui.theme" value="simple" />
<package name="default" namespace="/" extends="struts-default">
<!-- 当Struts2与Spring整合后,class属性可以写bean的名称 -->
<action name="test" class="testAction">
<result name="success">/test.jsp</result>
</action>
</package>
</struts>
Action.java
@SuppressWarnings("serial")
@Controller
@Scope("prototype")
public class TestAction extends ActionSupport{
public String test() throws Exception
{
return "success";
}
}
web.xml的主要作用是配置struts2的核心过滤器,当我们在网页中输入一个地址http://localhost:8080/test/test.action的时候,该过滤器根据其后缀.action为来判断其框架是否为struts2.假如是,那么就开始根据框架的处理流程来处理。
struts.xml是struts2的核心配置文件,当我们的action名称为struts的时候,会报错,毕竟这是一个关键字。起名字的时候上心点。
当该请求要交给struts2框架来处理的时候,我们会根据.action前面的内容,比如test.action来决定调用那个业务。为TestClass的test方法。来实现调用。当处理结束后,返回一个值,例子中返回了index,这时候核心配置文件struts.xml又起到了映射作用,根据返回的值来确定跳转到那个页面。
struts2中提供了很多的拦截器,用来将httpservletrequest请求中的请求参数解析出来,传入到用户制定的action中,我们定义的action类不是业务控制层,而是action代理。
所以,工作流程比较简单:过滤器(web.xml)->struts.xml->Action.java->jsp