Google App Engine + Struts 2示例

在本教程中,我们将向您展示如何在Google App Engine (GAE)环境中开发Struts 2 Web应用程序。

使用的工具和技术:

  1. JDK 1.6
  2. Eclipse 3.7 + Eclipse的Google插件
  3. Google App Engine Java SDK 1.6.3.1
  4. 支撑杆2.3.1.2

注意
在继续本教程之前,请确保您已阅读本文档-GAE + Java示例Struts 2 hello world示例

1.新的Web应用程序项目

在Eclipse中,创建一个名为“ Struts2GoogleAppEngine”的新Web应用程序项目。

gae struts2 example new project

适用于Eclipse的Google插件将生成GAE项目结构的示例。 稍后,我们将向您展示如何将Struts2与此生成的GAE项目集成。

gae struts2 example sample project

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 ”文件夹中。

gae struts2 example libraries

右键单击项目文件夹,选择“ Properties ”->“ Java Build Path ”->“ Libraries ”选项卡,单击“ Add Jars ”按钮,然后从“ war / WEB-INF / lib ”文件夹中选择以上11个jars到构建中路径。

gae struts2 example java build path

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检查项目目录结构。

gae struts2 example directory

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再次查看项目目录结构。

gae struts2 example directory

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.目录结构

查看最终目录结构。

gae struts2 example final directory

8.在本地运行

完成,该执行测试了。 右键单击该项目,以“ Web应用程序 ”运行。

网址:http:// localhost:8888 / User / Login.action

gae struts2 example run on local
gae struts2 example run on local

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生产环境中。

gae struts2 example deploy to 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

gae struts2 example run on GAE

注意
最后,完成了这篇长文章。 整体集成不是很困难,只需要修复Struts2 ognl安全性和TextBlock问题,希望Struts2的团队将来可以解决此问题。

下载源代码

由于文件大,所有的Struts2 jar都不包括在内,您需要手动下载。

下载– Struts2GoogleAppEngine.zip (23 KB)

参考文献

  1. Struts2你好世界示例
  2. 使用Eclipse的Google App Engine + Java hello世界示例
  3. Apache Struts
  4. GAE上的Struts 2

翻译自: https://mkyong.com/google-app-engine/google-app-engine-struts-2-example/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值