Studs MVC Framework-----PHP的Struts1.X实现
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();
?>
本文地址:http://www.phprm.com/code/a3f8984a355f65c2a7db995c38d1f245.html
转载随意,但请附上文章地址:-)