struts1是阿帕奇公司开发的耦合性很高
xwork是OpenSystem。
后来阿帕奇买了xwork。成就了struts2(struts2并不是struts1的升级版)
搭建上struts2框架前期
新建一个web项目 我们命名为week3
- 获取发布包 struts2官网 apache github 百度
在这里我用到的是下面这个发布包struts2-2.3.24.1
以后有机会可以研究:bootstrap
- 导入jar包.切记不能导入lib包下的所有包(后面用maven自动导包)。它包很多里面很多包都是有冲突的。
我们需要导入的包可以参考一下目录的所有包导进去。struts-2.3.24.1\apps\struts2-blank\WEB-INF\lib*
-
配置web.xml(在这下面truts-2.3.24.1\apps\struts2-blank\WEB-INF有一个web.xml作为参考) 在这里过滤任何以.action结尾的都会被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>*.action</url-pattern> </filter-mapping>
-
配置struts2核心配置文件 struts.xml (这里有参考struts-2.3.24.1\apps\struts2-blank\struts2-blank\WEB-INF\src\java) 放在src目录下。也可以放在其他位置需要指向一下。(如果这里有警告,就是dtd问题)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> </package> <!-- <include file="example.xml"/> --> </struts>
- struts-2.3.24.1\apps\struts2-blank\struts2-blank\WEB-INF\lib\struts2-core-2.3.24.1.jar\ 这里有dtd,文件。找到对应版本的dtd.这里用到的是struts-2.3.dtd
在进行关联。关联方法和hibernate框架关联dtd文件一样,在window的首先项中xml catalog中。
- struts-2.3.24.1\apps\struts2-blank\struts2-blank\WEB-INF\lib\struts2-core-2.3.24.1.jar\ 这里有dtd,文件。找到对应版本的dtd.这里用到的是struts-2.3.dtd
开发Struts2项目
-
编写Action(假设我们现在有一个bean类为user。此时我们可以编写一个UserAction)。并且写需要的相应方法需要一个返回值。如(注册):
public String toRegister() { System.out.println("跳转到注册页面"); return "register"; }
配置struts.xml
在package标签中,我们在配置一个action。其中有如下属性。这里我们给出代码例子:
<package name="default" namespace="/" extends="struts-default">
<action name="/user_*" class="com.zts.week3.web.action.UserAction"
method="{1}">
<result name="register">/WEB-INF/jsp/register.jsp</result>
</action>
</package>
假设我们现在访问http://localhost:8888/week3/user_toRegister.action。首先它是*.action结尾所以会被struts2监听。namespace这个是命名空间这里指目录。根目录下面user_toRegister(.action过滤了)和action标签的name属性/user_匹配成功。找见class这个类。调用toLogin方法。返回一个register。跳转到/WEB-INF/jsp/register.jsp
执行流程:
http://localhost:8888/week3/user_toRegister.action
request
url:/user_toRegister.action
.action
|
struts2
请求: /user_toRegister
匹配:struts.xml
<package name="" namespace="/">
<action name="user_*" class=""
method="{1}">
<result name="register">/register.jsp</result>
</action>
</package>
class.forName("class")
.newInstance()
.toRegister();
return "register"