在本教程中,我们将向您展示如何在Google App Engine (GAE)环境中开发Struts 2 Web应用程序。
使用的工具和技术:
- JDK 1.6
- Eclipse 3.7 + Eclipse的Google插件
- Google App Engine Java SDK 1.6.3.1
- 支撑杆2.3.1.2
注意
在继续本教程之前,请确保您已阅读本文档-GAE + Java示例和Struts 2 hello world示例 。
1.新的Web应用程序项目
在Eclipse中,创建一个名为“ Struts2GoogleAppEngine”的新Web应用程序项目。
适用于Eclipse的Google插件将生成GAE项目结构的示例。 稍后,我们将向您展示如何将Struts2与此生成的GAE项目集成。
2.集成Struts 2库
获得以下Struts 2依赖库,请在此处下载Struts2 。
- asm-3.3.jar
- asm-commons-3.3.jar
- asm-tree-3.3.jar
- commons-fileupload-1.2.2.jar
- commons-io-2.0.1.jar
- commons-lang-2.5.jar
- freemarker-2.3.18.jar
- javassist-3.11.0.GA.jar
- ognl-3.0.4.jar
- struts2-core-2.3.1.2.jar
- xwork-core-2.3.1.2.jar
将所有文件放在“ war / WEB-INF / lib ”文件夹中。
右键单击项目文件夹,选择“ Properties ”->“ Java Build Path ”->“ Libraries ”选项卡,单击“ Add Jars ”按钮,然后从“ war / WEB-INF / lib ”文件夹中选择以上11个jars到构建中路径。
3.集成Struts 2代码
3.1删除生成的Struts2GoogleAppEngineServlet.java
,您不需要这样做。
3.2创建一个新的Struts 2 Action类。
文件:src / com / mkyong / user / action / WelcomeUserAction.java
package com.mkyong.user.action;
public class WelcomeUserAction {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String execute() {
return "SUCCESS";
}
}
3.3创建一个侦听器类,并将ognl security设置为null。
注意
Struts 2需要此侦听器在GAE环境中运行。 阅读本文– 在GAE上部署Struts 2时出现的问题和错误:未找到结果'null'
文件:src / com / mkyong / listener / Struts2ListenerOnGAE.java
package com.mkyong.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import ognl.OgnlRuntime;
public class Struts2ListenerOnGAE implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener {
public void contextInitialized(ServletContextEvent sce) {
OgnlRuntime.setSecurityManager(null);
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
}
3.4要在本地GAE环境中运行Struts2项目,您必须创建一个TextBlock
类并重载原始TextBlok
类,否则将出现“ javax.swing.tree.TreeNode is a restricted class
”错误消息。 希望Struts2团队可以在将来发布时解决此问题。
TextBlock源代码
转到此URL可下载TextBlock源代码 。
3.5检查项目目录结构。
4.集成Struts 2页
4.1创建一个login.jsp
页面,以接受用户输入。
文件:war / User / pages / login.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>GAE + Struts 2 Example</h1>
<s:form action="Welcome">
<s:textfield name="username" label="Username"/>
<s:password name="password" label="Password"/>
<s:submit/>
</s:form>
</body>
</html>
4.2创建一个welcome_user.jsp
页面。
文件:war / User / pages / welcome_user.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>GAE + Struts 2 Example</h1>
<h2>Hello <s:property value="username"/></h2>
</body>
</html>
4.3再次查看项目目录结构。
5. Struts XML配置
创建一个struts.xml
文件,并放入“ src / struts.xml ”。
档案:struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="user" namespace="/User" extends="struts-default">
<action name="Login">
<result>pages/login.jsp</result>
</action>
<action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction">
<result name="SUCCESS">pages/welcome_user.jsp</result>
</action>
</package>
</struts>
6. web.xml
更新web.xml
,集成Struts2并配置ognl安全监听器。
档案:web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<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>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
com.mkyong.listener.Struts2ListenerOnGAE
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
7.目录结构
查看最终目录结构。
8.在本地运行
完成,该执行测试了。 右键单击该项目,以“ Web应用程序 ”运行。
网址:http:// localhost:8888 / User / Login.action
9.在GAE上部署
更新appengine-web.xml
,放入您的App Engine应用程序ID。
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>mkyong-struts2gae</application>
<version>1</version>
<!-- Configure java.util.logging -->
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>
选择项目,然后单击Google图标“ Deploy to App Engine ”。 适用于Eclipse的Google插件会自动将所有必要文件部署到GAE生产环境中。
在部署期间,以下类似消息将显示在Eclipse控制台视图中。
------------ Deploying frontend ------------
Preparing to deploy:
Created staging directory at: 'C:\Users\mkyong\AppData\Local\Temp\appcfg7432687551.tmp'
Scanning for jsp files.
Compiling jsp files.
Scanning files on local disk.
Initiating update.
Cloning 2 static files.
Cloning 46 application files.
Deploying:
Uploading 12 files.
Uploaded 3 files.
Uploaded 6 files.
Uploaded 9 files.
Uploaded 12 files.
Initializing precompilation...
Sending batch containing 11 file(s) totaling 44KB.
Sending batch containing 1 blob(s) totaling 1KB.
Deploying new version.
Verifying availability:
Will check again in 1 seconds.
Will check again in 2 seconds.
Will check again in 4 seconds.
Closing update: new version is ready to start serving.
Updating datastore:
Uploading index definitions.
Deployment completed successfully
网址: http : //mkyong-struts2gae.appspot.com/User/Login.action
注意
最后,完成了这篇长文章。 整体集成不是很困难,只需要修复Struts2 ognl安全性和TextBlock问题,希望Struts2的团队将来可以解决此问题。
下载源代码
由于文件大,所有的Struts2 jar都不包括在内,您需要手动下载。
下载– Struts2GoogleAppEngine.zip (23 KB)
参考文献
翻译自: https://mkyong.com/google-app-engine/google-app-engine-struts-2-example/