您的位置:首页 > 编程语言 > Java开发

Studs MVC Framework-----PHP的Struts1.X实现

2008-02-02 13:04 344 查看
Jakarta Struts结构移植过来的PHP开发框架,使用面向对象的开发结构和API,模拟了一个HTTP Servlet容器和使用了PHP服务页面引擎技术。

下载地址:http://mojavelinux.com/projects/studs/

文件结构如下:


如上图,WEB-INF中的文件都是Studs框架的核心文件(尤其是lib和tld下的文件),其中:

1.messages.properties文件:


welcome.title=Studs :: Welcome


welcome.heading=Welcome to Studs!


welcome.message=The application has been successfully installed!




pageviews.message=This page has been viewed <strong>{0}</strong> times.

2.struts-config.xml文件:


<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"


"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">


<!--


This is a basic Studs/Struts configuration file with an example


welcome action/page and other commented sample elements.


-->


<struts-config>




<!-- example configuration of a database connection


<data-sources>


<data-source type="horizon.sql.BasicDataSource">


<set-property


property="description"


value="Primary data source for localhost database"/>


<set-property


property="driverClassName"


value="horizon.sql.drivers.MySQLDriver"/>


<set-property


property="username"


value="user"/>


<set-property


property="password"


value="secret"/>


<set-property


property="url"


value="mysql://localhost/dbname"/>


</data-source>


</data-sources>


-->




<form-beans>


<!-- sample form bean descriptor for an ActionForm


<form-bean


name="inputForm"


type="app.InputForm"/>


-->


</form-beans>




<global-exceptions>


<!-- sample exception handler


<exception


key="expired.password"


type="app.ExpiredPasswordException"


path="/changePassword.jsp"/>


-->


</global-exceptions>




<global-forwards>


<!-- Default forward to "welcome" action -->


<forward name="welcome" path="/welcome.do"/>


</global-forwards>




<action-mappings>


<!-- Default "welcome" action -->


<action path="/welcome" forward="/pages/welcome.psp"/>


<action path="/example" forward="/pages/example.psp"/>




<!-- sample input and input submit actions




<action


path="/Input"


type="org.apache.struts.actions.ForwardAction"


parameter="/pages/Input.jsp"/>




<action


path="/InputSubmit"


type="app.InputAction"


name="inputForm"


scope="request"


validate="true"


input="/pages/Input.jsp"/>




<action


path="/edit*"


type="app.Edit{1}Action"


name="inputForm"


scope="request"


validate="true"


input="/pages/Edit{1}.jsp"/>




-->


</action-mappings>




<controller locale="false" inputForward="true"/>




<message-resources parameter="/WEB-INF/messages.properties"/>




</struts-config>

3.web.xml文件:


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">


<web-app>




<display-name>Studs Basic Application</display-name>


<description>A bare-bones foundation for creating a web application based on the Studs MVC Framework+</description>


<context-param>


<!-- if controlAllResources is set, all files should be handled by the stratus


container, including all non-php/html files -->


<param-name>controlAllResources</param-name>


<param-value>false</param-value>


</context-param>




<!-- Servlet Definitions -->


<servlet>


<servlet-name>default</servlet-name>


<servlet-class>stratus.servlets.DefaultServlet</servlet-class>


<init-param>


<param-name>listings</param-name>


<param-value>true</param-value>


</init-param>


<load-on-startup>1</load-on-startup>


</servlet>


<servlet>


<servlet-name>phase</servlet-name>


<servlet-class>phase.servlet.PhaseServlet</servlet-class>


<init-param>


<param-name>scratchdir</param-name>


<param-value>/WEB-INF/work</param-value>


</init-param>


<init-param>


<param-name>tldresourcedir</param-name>


<param-value>/WEB-INF/tld</param-value>


</init-param>


<init-param>


<param-name>ignoreEL</param-name>


<param-value>false</param-value>


</init-param>


<load-on-startup>2</load-on-startup>


</servlet>


<servlet>


<servlet-name>action</servlet-name>


<servlet-class>studs.action.ActionServlet</servlet-class>


<init-param>


<param-name>config</param-name>


<param-value>/WEB-INF/struts-config.xml</param-value>


</init-param>


<init-param>


<param-name>validating</param-name>


<param-value>true</param-value>


</init-param>


<load-on-startup>3</load-on-startup>


</servlet>




<!-- Servlet Mappings -->


<servlet-mapping>


<servlet-name>default</servlet-name>


<url-pattern>/</url-pattern>


</servlet-mapping>


<servlet-mapping>


<servlet-name>phase</servlet-name>


<url-pattern>*.psp</url-pattern>


</servlet-mapping>


<servlet-mapping>


<servlet-name>action</servlet-name>


<url-pattern>*.do</url-pattern>


</servlet-mapping>




<!-- Mime Type Mappings -->


<mime-mapping>


<extension>html</extension>


<mime-type>text/html</mime-type>


</mime-mapping>


<mime-mapping>


<extension>css</extension>


<mime-type>text/css</mime-type>


</mime-mapping>


<mime-mapping>


<extension>js</extension>


<mime-type>text/javascript</mime-type>


</mime-mapping>


<mime-mapping>


<extension>png</extension>


<mime-type>image/png</mime-type>


</mime-mapping>


<mime-mapping>


<extension>jpg</extension>


<mime-type>image/jpeg</mime-type>


</mime-mapping>


<mime-mapping>


<extension>jpeg</extension>


<mime-type>image/jpeg</mime-type>


</mime-mapping>


<mime-mapping>


<extension>gif</extension>


<mime-type>image/gif</mime-type>


</mime-mapping>




<!-- Default Welcome File List -->


<welcome-file-list>


<welcome-file>index.psp</welcome-file>


</welcome-file-list>




</web-app>

4.文件build.xml:


<?xml version="1.0"?>


<project name="Studs Basic" basedir="../.." default="package">


<property file="../../build.properties" />




<target name="package" depends="prepare">


<mkdir dir="../../${release.dir}/${project.release.version}"/>


<tar destfile="../../${release.dir}/${project.release.version}/studs-basic-${project.release.version}.tar.gz" compression="gzip">


<tarfileset dir="." prefix="studs-basic" defaultexcludes="yes">


<exclude name="classes/build.xml"/>


<exclude name="**/TODO"/>


<exclude name="**/NOTES"/>


</tarfileset>


</tar>


</target>




<target name="clean">


<!-- make sure to break symlinks -->


<symlink action="delete" link="${basedir}/WEB-INF/lib" failonerror="no"/>


<symlink action="delete" link="${basedir}/WEB-INF/tld" failonerror="no"/>




<delete includeemptydirs="yes" failonerror="no">


<fileset dir="WEB-INF/work">


<include name="**"/>


</fileset>


<fileset dir="WEB-INF/lib">


<include name="**"/>


</fileset>


<fileset dir="WEB-INF/tld">


<include name="**"/>


</fileset>


</delete>


</target>




<target name="prepare" depends="clean">


<!-- create work directory -->


<mkdir dir="WEB-INF/work"/>


<chmod dir="WEB-INF/work" perm="0777" type="dir"/>


<!-- create lib directory and copy framework libraries -->


<mkdir dir="WEB-INF/lib"/>


<copy todir="WEB-INF/lib">


<fileset dir="../../src">


<include name="**"/>


</fileset>


</copy>


<!-- create tld directory and copy known tlds -->


<mkdir dir="WEB-INF/tld"/>


<copy todir="WEB-INF/tld">


<fileset dir="../../conf/tld">


<include name="*.tld"/>


</fileset>


</copy>


<!-- copy over the controller and server conf file -->


<copy todir=".">


<fileset dir="../../conf">


<include name="index.php"/>


<include name=".htaccess"/>


</fileset>


</copy>


</target>


</project>

5.logging.properties文件:


# == Setup log appenders ==


#logging.rootLogger=DEBUG, file


#logging.appender.file=horizon.util.logging.FileLogAppender


#logging.appender.file.file=/tmp/studs-basic.log


# == Specific logging per category ==


#logging.logger.[partial package or classname]=DEBUG

其他文件基本上都可以在框架源代码中找到。

页面文件如下:

1.index.php:


<?php


error_reporting(E_ALL);


ini_set('include_path', 'WEB-INF/lib' . (DIRECTORY_SEPARATOR == '/' ? ':' : ';') . 'WEB-INF/classes');


umask(0002);




require_once 'horizon/init.php';




import('stratus.connector.HttpProcessor');


import('stratus.config.ContextConfig');




$config = & new ContextConfig(dirname(__FILE__));


$processor = & new HttpProcessor($config->getContext());


$processor->run();


?>

2.index.psp:




<%...@ page language="php" %>




<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>




<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>


<c:redirect context="/"><html:rewrite forward="welcome"/></c:redirect>

3.welcome.psp:




<%...@ page language="php" %>




<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>




<%...@ taglib uri="/WEB-INF/tld/phase-fmt.tld" prefix="fmt" %>




<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


<title><fmt:message key="welcome.title" /></title>


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


</head>


<body>


<h3><fmt:message key="welcome.heading" /></h3>


<p><fmt:message key="welcome.message" /></p>


<p><html:link action="/example">Click here</html:link> for an example of the template tag library.</p>


<c:set var="welcomePageViewCount" value="${applicationScope.welcomePageViewCount + 1}" scope="application"/>


<p style="font-size: small;"><fmt:message key="pageviews.message" arg0="${applicationScope.welcomePageViewCount}"/></p>


</body>


</html>

4.example.psp:




<%...@ taglib uri="/WEB-INF/tld/studs-template.tld" prefix="template" %>




<%...@ taglib uri="/WEB-INF/tld/phase-string.tld" prefix="str" %>




<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>


<template:insert template="/pages/tmpl/template.psp">


<template:put name="title" content="Studs :: Template Taglib Example" direct="true"/>


<template:put name="heading" direct="true">Template Taglib Example</template:put>


<template:put name="intro" direct="true">


This page demonstrates the use of the studs template taglib. Content is inserted by the parent page either directly or via an include file. Below are two examples of content insertion.


</template:put>


<template:put name="content" direct="true">


<str:replace replace="LF" with="<br />">This text was specified inline using the template:put tag.




It also uses the str:replace taglib to convert endlines to BR tags.




I am also testing the conditional EL syntax. <strong>${2 % 2 ? 'odd' : 'even'}</strong></str:replace>


</template:put>


<template:put name="content2" content="/pages/tmpl/content.psp" />


</template:insert>

5.template.psp:




<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>




<%...@ taglib uri="/WEB-INF/tld/studs-template.tld" prefix="template" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">


<head>


<title><template:get name="title" /></title>


</head>


<body>


<h3><template:get name="heading" /></h3>


<p><template:get name="intro" /></p>


<p style="border: 1px dashed #999999; background-color: #F0F0F0;">


<template:get name="content" />


</p>


<p style="border: 1px dashed #999999; background-color: #F0F0F0;">


<template:get name="content2" />


</p>


<p>« <html:link forward="welcome">Back</html:link></p>


</body>


</html>

6.content.psp:


This text comes from an include file using the template:put tag.

这样,一个基于PHP Studs框架的示例程序就完成了。(注:上诉代码取自studs自带的例子)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: