使用IntelliJ IDEA 生成Struts2框架应用实例Hello World
当在Struts2的web应用程序中点击一个超链接或提交一个HTML表单时,会由控制器收集输入并发送一个叫Actions的Java类。
Action被执行后,Result会选择一个资源给出响应。
对于每个Struts2项目来的构建来说要有以下四个组件:
- Action 操作
创建一个动作类,包含完整的业务逻辑并控制用户、模型及视图间的交互。
- Interceptors 拦截器
这是控制器的一部分,可以根据需求创建拦截器,或者使用现有的拦截器
- View 视图
创建一个JSP与用户进行交互,获取输入并呈现最终信息
- Configuration Files 配置文件
创建配置文件来连接动作、视图以及控制器,这些文件分别是struts.xml,web.xml及Struts.properties
使用IntelliJ IDEA 生成Struts2框架的J2EE应用程序步骤如下:
第一步:
File->new->Project...
在弹出的对话框中选择Java Enterprise
第二步:
对生成的应用程序加入Struts2框架集成
Additional Libraries and Frameworks中选择Struts2,选择“Next”
第三步:
在完成第二步后在新的窗口中输入Project name
创建Action类
Action类它是Struts2应用程序的关键,通过它实现大部分业务逻辑。
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
@Override
public String execute() throws Exception {
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Struts2框架会创建一个HelloWorldAction类对象,并调用execute方法来响应用户的动作。
创建视图
创建一个JSP来展现最终信息,当一个预先定义动作发生时空上页面将被Struts2框架调用,并且这个映像会定义到struts.xml文件里。
<
</html>
%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World,<s:property value="name"/>
</body>
taglib指令告知Servlet容器这个页面会使用Struts2标签,并且这些标签会被s放在前面,s:property标签显示Action类“name”属性的值,这个值是通过HelloWorldAction类的getName()方法返回的。
对index.jsp页面改造
<
有一个form表单,其中action定义为hello,action会通过struts.xml文件映射到HelloWorldAction类及其execute方法。
%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World From Sturuts2</title>
</head>
<body>
<form action="hello">
<%--@declare id="name"--%>
<label for="name">请输入你的名字</label>
<input type="text" name="name"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
配置文件
需要一个映像把URL,HelloWorldAction类(模型)以及HelloWorld.jsp(视图)联系在一起。映像告知Struts2哪个类将响应用户的动作(URL),类的哪个方法会执行,以及基于方法所返回的字符串结果,会呈现怎么样的视图。
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="helloworld" extends="struts-default">
<action name="hello" class="com.xiaoxie.struts2.HelloWorldAction" method="execute">
<result name="success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
helloworld数据包(package),在这个数据包中把Actions集合在一起。其中命名动作action名称为hello,并指定对应的Action处理类同时指定其执行方法名称为execute。在action中指定返回结果为success时会进入哪个页面进行显示结果。
web.xml文件,这个文件是Struts2任何请求的接入点。在web.xml中Struts2应用程序的接入口会定义为一个过滤器。
<
?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
在上面配置了所有的URL(/*)都会走到Struts2过滤器
注意:生成的<filter-class>中的类如果找不到一定要根据当前的Structs包中的类来对应加入,工具默认生成的可能不正确(有版本问题)
在WEB-INF下新增lib目录,并把struts2相关的jar包复制进去,复制进后一定要对选中的类右键选择Add Library