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.参考链接
写的太棒了,简单易懂,学习一下,请问可以转载吗
随意
谢谢
TimeConvert.action
死活不起作用,,,
已解决,struts2 url action 俩标签,区别如何?
action是需要执行的,url应该只是个链接吧
完全按照上面截图配置的structs2,但是在tomcat发布时无法弹出默认网页,发生以下错误,想请教下如何解决
[2018-04-18 01:16:55,340] Artifact homework:war exploded: Error during artifact deployment. See server log for details.
18-Apr-2018 13:16:55.316 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [struts2]
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1292)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1121)
缺少包啊 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 报告的非常明确