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"
Windows下面,建议安装 "32-bit/64-bit Windows Service Installer"
9.安装最新的 Java SE Development Kit
目前最新的版本是8u73。保证电脑上面是最新的,如果使用JDK 7的话,会由于Tomcat的版本号太高导致在调试的时候报告如下错误:
Shell
Application Server was not connected before run configuration stop, reason:
Unable to ping server at localhost:9099
1
2
ApplicationServerwasnotconnectedbeforerunconfigurationstop,reason:
Unabletopingserveratlocalhost: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"。
里面的代码如下:
Java
package Tools.Model;
public class TimeConvertStore {
public String getConvertTime() {
return convertTime;
}
public void setConvertTime(String time) {
this.convertTime = time;
}
private String convertTime;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
packageTools.Model;
publicclassTimeConvertStore{
publicStringgetConvertTime(){
returnconvertTime;
}
publicvoidsetConvertTime(Stringtime){
this.convertTime=time;
}
privateStringconvertTime;
}
这个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页面.
代码如下:
JavaScript
Title1
2
3
4
5
6
7
8
9
10
Title页面中的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".
代码如下:
Java
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;
}
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
packageTools.Controller;
importTools.Model.TimeConvertStore;
importcom.opensymphony.xwork2.ActionSupport;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassTimeConvertActionextendsActionSupport{
publicStringexecute()throwsException{
timeConvertStore=newTimeConvertStore();
SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
timeConvertStore.setConvertTime(df.format(newDate()));
returnSUCCESS;
}
publicTimeConvertStoregetTimeConvertStore(){
returntimeConvertStore;
}
publicvoidsetTimeConvertStore(TimeConvertStoretimeConvertStore){
this.timeConvertStore=timeConvertStore;
}
privateTimeConvertStoretimeConvertStore;
privatestaticfinallongserialVersionUID=1L;
}
(4)增加struts配置到struts.xml文件中
建立映射关系,将TimeConvertAction类(Controller)和TimeConvert.jsp(View)映射在一起。映射后,Struts 2框架就能够知道哪个类将响应用户的action(the URL),这个类的哪个方法将被调用,哪个View能够得到这个方法的返回String结果。
XHTML
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
/TimeConvert.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
/TimeConvert.jsp
(5)在index.jsp中增加链接
首先在jsp页面顶部增加taglib说明
JavaScript
1
然后在body标签后增加p标签
JavaScript
1
">TimeConvert
修改后的代码如下:
JavaScript
$Title$1
2
3
4
5
6
7
8
9
10
$Title$">TimeConvert
点击调试后,运行效果如下图:
点击超链接后显示如下:
13.增加多语言支持i18n
需要注意的是,对于index.jsp中读取全局配置文件,需要先增加Spring框架,否则是无法通过在struts.xml中增加
XHTML
1
来实现的。如下图所示:
在跟"TimeConvertAction.java"相同的目录下面建立英文语言文件TimeConvertAction_en.properties,中文语言文件TimeConvertAction_zh.properties,注意,中文只能是Unicode编码的格式,否则会出现乱码。格式类似\u65f6\u95f4\u8f6c\u6362这样的格式。
其中TimeConvertAction_en.properties中的内容如下:
Vim
Title=TimeConvert
1
Title=TimeConvert
TimeConvertAction_cn.properties中的内容如下:
Vim
Title=\u65f6\u95f4\u8f6c\u6362
1
Title=\u65f6\u95f4\u8f6c\u6362
然后修改TimeConvert.jsp,在Title中引用我们定义的语言。修改
XHTML
Title1
Title为:
XHTML
1
修改后的TimeConvert.jsp文件如下:
XHTML
1
2
3
4
5
6
7
8
9
10
点击调试后,打开的页面中,会看到网页的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时的可配置参数详解:
XHTML
dataMap
true
userList.*
SUCCESS
1
2
3
4
5
6
7
8
9
10
11
dataMap
true
userList.*
SUCCESS
15.参考链接