IntelliJ IDEA 2016.1建立Strut2工程的步骤如下:
1.从菜单中选择新建工程:

2.在弹出的窗口中,左侧的列表中,选择"Java",在右侧的"Project SDK"中指明需要的Java SDK的版本,目前要求是1.8版本的,在下面的"Additional Libraries and Frameworks"中找到"Struts 2",并选中,同时选中"Web Application"。

3.点击下面的"Next"按钮。

4.等待IntelliJ IDEA下载完成必须的插件。点击左侧的"Project"边栏,之后可以到如下界面.

点击右侧的"Project Stucture"按钮,如下图:

修复存在的问题:

点击后出现的界面如下:

在弹出的菜单中,选择"Put into /Web-INF/lib"。

配置完成后的界面如下:

点击"OK",关闭窗口。
5.编辑配置信息"Edit Configurations"

6.在弹出的界面中点开右侧的"+"符号,也可以点击左侧顶部的"+"号。

7.在弹出的界面中,一直下拉,找到"Tomcat Server",点击展开,选择"Local"


8.下载并安装Tomcat 9
Windows下面,建议安装 "32-bit/64-bit Windows Service Installer"

9.安装最新的 Java SE Development Kit
目前最新的版本是8u73。保证电脑上面是最新的,如果使用JDK 7的话,会由于Tomcat的版本号太高导致在调试的时候报告如下错误:
|
1 2 |
Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:9099 |
这个错误的原因是由于JDK 1.7是默认没有包含JMS服务的,导致Idea通过JMS跟Tomcat通信的时候失败。
10.设置Tomcat Server



配置完成后的界面显示如下:

此时底部提示"Warning No artificts configured",点击底部的"Fix"按钮。

出现的窗口中自动帮我们加入了"Tools:war exploded"项目,点击下面的"Apply"按钮后,点击"OK"关闭设置页面。

11.调试,点击主界面上面的调试图标,即可进入调试,此时会在默认的浏览器上打开网页。

最后,浏览器上出现如下画面,说明设置成功。

12.创建一个简单的Stucts2的MVC例子----TimeConvert
(1)先创建一个Model类来存放数据
首先,在src目录上鼠标右击,选择"New"-> "Java Class"并在对话框中输入名字"Tools.Model.TimeConvertStore",点击"OK"。


里面的代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package Tools.Model; public class TimeConvertStore { public String getConvertTime() { return convertTime; } public void setConvertTime(String time) { this.convertTime = time; } private String convertTime; } |
这个Model类的public set和get方法允许访问private convertTime字符串属性,Struts 2框架需要将这个对象按照JavaBean方式暴露给View(TimeConvert.jsp)。
(2)创建View页面来显示Model类里存储的convertTime .
在web目录上鼠标右击,选择"New"-> "File"并在对话框中输入名字"TimeConvert.jsp",点击"OK"新建一个TimeConvert.jsp的jsp页面.


代码如下:
|
1 2 3 4 5 6 7 8 9 10 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Title</title> </head> <body> <h2><s:property value="timeConvertStore.convertTime" /></h2> </body> </html> |
页面中的taglib告诉Servlet容器这个页面将使用Struts 2的tags并且将它们用s来表示。
s:property的tag标签返回调用TimeConvertAction controller class的getTimeConvertStore方法后的值。这个方法返回一个TimeConvertStore对象。在TimeConvertStore加上了.convertTime后,就可以告诉Struts 2框架将调用TimeConvertStore的getConvertTime方法。TimeConvertStore的getConvertTime方法返回一个字符串,然后这个字符串将被s:property标签显示。
(3)创建一个Action类TimeConvertAction.java作为Controller.
在src目录上鼠标右击,选择"New"->"Java Class"并在对话框中输入名字"Tools.Controller.TimeConvertAction",点击"OK".


代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package Tools.Controller; import Tools.Model.TimeConvertStore; import com.opensymphony.xwork2.ActionSupport; import java.text.SimpleDateFormat; import java.util.Date; public class TimeConvertAction extends ActionSupport { public String execute() throws Exception { timeConvertStore = new TimeConvertStore(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 timeConvertStore.setConvertTime(df.format(new Date())); return SUCCESS; } public TimeConvertStore getTimeConvertStore() { return timeConvertStore; } public void setTimeConvertStore(TimeConvertStore timeConvertStore) { this.timeConvertStore = timeConvertStore; } private TimeConvertStore timeConvertStore; private static final long serialVersionUID = 1L; } |
(4)增加struts配置到struts.xml文件中
建立映射关系,将TimeConvertAction类(Controller)和TimeConvert.jsp(View)映射在一起。映射后,Struts 2框架就能够知道哪个类将响应用户的action(the URL),这个类的哪个方法将被调用,哪个View能够得到这个方法的返回String结果。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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> <package name="Tools" extends="struts-default"> <action name="TimeConvert" class="Tools.Controller.TimeConvertAction" method="execute"> <result name="success">/TimeConvert.jsp</result> </action> </package> </struts> |
(5)在index.jsp中增加链接
首先在jsp页面顶部增加taglib说明
|
1 |
<%@ taglib prefix="s" uri="/struts-tags" %> |
然后在body标签后增加p标签
|
1 |
<p><a href="<s:url action='TimeConvert'/>">TimeConvert</a></p> |
修改后的代码如下:
|
1 2 3 4 5 6 7 8 9 10 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>$Title$</title> </head> <body> <p><a href="<s:url action='TimeConvert'/>">TimeConvert</a></p> </body> </html> |
点击调试后,运行效果如下图:

点击超链接后显示如下:

13.增加多语言支持i18n
需要注意的是,对于index.jsp中读取全局配置文件,需要先增加Spring框架,否则是无法通过在struts.xml中增加
|
1 |
<constant name="struts.custom.i18n.resources" value="global" /> |
来实现的。如下图所示:

在跟"TimeConvertAction.java"相同的目录下面建立英文语言文件TimeConvertAction_en.properties,中文语言文件TimeConvertAction_zh.properties,注意,中文只能是Unicode编码的格式,否则会出现乱码。格式类似\u65f6\u95f4\u8f6c\u6362这样的格式。

其中TimeConvertAction_en.properties中的内容如下:
|
1 |
Title=TimeConvert |
TimeConvertAction_cn.properties中的内容如下:
|
1 |
Title=\u65f6\u95f4\u8f6c\u6362 |
然后修改TimeConvert.jsp,在Title中引用我们定义的语言。修改
|
1 |
<title>Title</title> |
为:
|
1 |
<title><s:text name="Title"/></title> |
修改后的TimeConvert.jsp文件如下:
|
1 2 3 4 5 6 7 8 9 10 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title><s:text name="Title"/></title> </head> <body> <h2><s:property value="TimeConvertStore.convertTime" /></h2> </body> </html> |
点击调试后,打开的页面中,会看到网页的Title变成了中文的"时间转换"。
14.Strut2增加对Json的支持
默认情况下Struts2不支持直接返回JSON,比较方便的方式是使用struts2-json-plugin来支持。
(1)增加spring框架,由于struts2-json-plugin需要调用spring框架,因此需要增加spring框架。右击工程,选择"Add Framework Support..."。

在弹出的窗口中,选择"Spring","Spring MVC"两项,同时在点击"Spring"的时候,勾选"Create emtpy spring-config.xml"。

然后点击"OK",等待需要的Jar包下载完成。成功下载完成后,可以在lib目录下看到非常多的Jar文件被添加进来了。在web目录下的WEB-INF目录下多出来了applicationContext.xml,dispatcher-servlet.xml这两个文件。

完成后点击界面上侧的"Project Structure"图标,解决提示的Jar包导出问题。


都选择第一项"Add 'xxxxxxxxxxx' to the artifact".

(2)确认项目使用的Struts2的版本。点击界面上侧的"Project Structure"图标


从上图可以看到我们的Struts2的版本是2.3.20.1
(3)手工去下载struts2-json-plugin插件,选择与我们的Struts2的版本相同的版本的插件。之所以需要手工下载而不是要求IntelliJ IDEA 在Maven中自动下载原因在于,由于我们建立项目的时候没有使用Maven,因此我们项目Lib目录下的Struts2的Jar包是没有带版本号的。而如果要求Maven自动下载的话,会由于找不到带版本号的Struts2的Jar包,而自动引入一堆的带版本号的Struts2的Jar包。导致Struts2的Jar包出现两份,一份是有版本号的,一份是我们现在的样子。导致无法编译通过,因此还是手工引入即可。
由于我们的Struts2的版本是2.3.20.1,因此,我们下载2.3.20.1版本的struts2-json-plugin.
下载完成后放到项目的lib目录下,然后右击struts2-json-plugin-2.3.20.1.jar,选择"Add As Library".


点击OK后关闭。
继续点击界面右上侧的"Project Structure"图标


修改src目录下的struts.xml。调整部分如下图所示。

action的返回类型为json时的可配置参数详解:
|
1 2 3 4 5 6 7 8 9 10 11 |
<result type="json"> <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 --> <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性 --> <param name="root">dataMap</param> <!-- 指定是否序列化空的属性 --> <param name="excludeNullProperties">true</param> <!-- 这里指定将序列化dataMap中的那些属性 --> <param name="includeProperties">userList.*</param> <!-- 这里指定将要从dataMap中排除那些属性,这些排除的属性将不被序列化,一般不与上边的参数配置同时出现 --> <param name="excludeProperties">SUCCESS</param> </result> |
15.参考链接