技术标签: Struts 2 WEB PHP Struts MVC 框架
ThinkPHP是PHP的一个MVC开源框架,Struts 2是Java的MVC开源框架。虽然编程语言不同,但是他们都是解决同样的问题。
用过ThinkPHP的同学应该都知道,ThinkPHP是一个非常简单的框架,使用起来很舒服。相对来说Struts 2则没有这么简单。
本文介绍如何配置Struts 2,让它使用起来像ThinkPHP一样简单。
在介绍Struts 2之前,首先了解一下ThinkPHP的开发方式。
和Struts 2一样,ThinkPHP也需要用Action来充当控制器(controller),需要页面来充当视图(view)。
下面是一个简单的ThinkPHP工程的目录结构:
其中Action目录下就是控制器,其功能和Struts 2的Action类似。Tpl目录下是html页面,也就是视图,类似于jsp页面的功能。
再看其中一个Action的代码:
<?php
class FirstAction extends Action {
public function show() {
/**
* 逻辑代码...
*/
$this->display ();
}
public function add() {
/**
* 逻辑代码...
*/
$this->display ();
}
public function delete() {
/**
* 逻辑代码...
*/
$this->display ();
}
public function update() {
/**
* 逻辑代码...
*/
$this->display ();
}
}
?>
此时在浏览器输入http://localhost/First/update,就可以调用FirstAction的update方法处理请求,再调用Tpl/First/update.html显示。
也就是说,如果需要加一个功能模块Abc,只需要添加一个AbcAction.class.php,其中加入操作函数def,再在Tpl/Abc文件夹下创建一个文件名和函数名称一致的def.html文件,下面就可以开发逻辑和页面了,而且直接就可以用http://localhost/Abc/def访问,非常方便。整个项目很清晰,想找的某个http地址对应的Action的函数以及html文件也非常容易。
而Struts 2由于有struts.xml配置文件,如果加入一个功能模块,除了需要加入Action类和jsp页面,还需要在struts.xml中配置这个Action对应的http地址、对应的Action中的方法、以及对应的jsp文件。而如果想通过http地址找到对应的Action中的方法和jsp文件,也需要查看struts.xml中的配置。
在Struts 2的使用中,约定大于配置是个很重要的原则。ThinkPHP的开发方式就是一个比较好的约定。下面就介绍如何用Struts 2实现类似ThinkPHP的开发方式。
首先是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>
<constant name="struts.enable.SlashesInActionNames" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="/*/*" class="com.xxg.action.{1}Action" method="{2}">
<result name="success">/Tpl/{1}/{2}.jsp</result>
</action>
</package>
</struts>
实现类似ThinkPHP的开发方式,需要在struts.xml中用到Wildcards,也就是通配符。其中name="/*/*"匹配http地址。第一个*是Action的类名:class="com.xxg.action.{1}Action";第二个*是Action中方法的名称:method="{2}",另外还是jsp的文件名:<result name="success">/Tpl/{1}/{2}.jsp</result>。
这里设置了:
<constant name="struts.enable.SlashesInActionNames" value="true" />
表示action的name中允许出现斜杠"/"。
下面是这个项目的目录结构:
其中一个Action的代码:
package com.xxg.action;
import com.opensymphony.xwork2.ActionSupport;
public class FirstAction extends ActionSupport {
public String show() {
/**
* 逻辑代码...
*/
return SUCCESS;
}
public String add() {
/**
* 逻辑代码...
*/
return SUCCESS;
}
public String delete() {
/**
* 逻辑代码...
*/
return SUCCESS;
}
public String update() {
/**
* 逻辑代码...
*/
return SUCCESS;
}
}
如此一来,在开发的过程中,所要做的就和ThinkPHP类似,加入Action,加入对应的方法,再添加一个和方法名同名的jsp文件,直接访问地址:http://localhost/Action名称/方法名称就可以直接访问,不再需要向struts.xml文件中添加action。另外,通过http地址也很容易找到对应的Action其中的方法以及对应的jsp文件,也不再需要查询struts.xml。
作者:叉叉哥 转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/21073605
文章浏览阅读3.9w次,点赞2次,收藏9次。 在使用电脑办公过程中,安装应用程序时难免遇到无法安装或者无法正常启动的问题,这对我们使用电脑带来了诸多不便。那遇到应用程序无法正常启动的问题要如何解决呢?相信大家肯定都是十分疑问的,每次都是只能忍痛重新安装软件。今天,小编就和大家探讨下应用程序无法正常启动的解决方法,帮助大家排忧解难。0xc000007b电脑图解1 第一种方案:SFC检查系统完整性来尝试修复丢失文件 1、打开电脑搜索输入cmd.exe,选择以管理员身份运行,跳出提示框时选择继续。0xc000007b电脑图解2_photoshop应用程序无法正常启动0xc000007b。请单击“确认”关闭应用程序。
文章浏览阅读396次。1、概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制。实际上REDO LOG的存在是为两种场景准备的:实例恢复(INSTANCE RECOVERY);介质恢复(MEDIA RECOVERY)。 实例恢复的目的是在数据库发生故障时,确保BUFFER CACHE中的数据不会丢失,不会造成数据库的..._oracle 实例恢复和介质恢复
文章浏览阅读7k次。HashMap map1=new HashMap(); HashMap map2 = new HashMap();map2.putAll(map1)上面的代码的意思是将map1中所有的<key,value>插入到map2中去。具体参考: HashMap map1=new HashMap(); map1.put("..._java map putall
文章浏览阅读1w次,点赞8次,收藏60次。网上购物商城系统以弥补传统购物方式的弊端。在目前的商城里,如果采用网上商城方式,用户购物时就不需要到店里面排队,这样不仅能实时地了解商品的特色,而且方便了顾客,同时也减轻了商城的服务压力。随着WLAN技术的普及,一些规模较大的商城开始考虑利用这种最为先进、最具时尚潮流的网络技术来建设一套灵活、快捷的信息管理系统,以优化管理流程,使网上的服务和管理得到实质性的提升,提高品牌形象和行业核心竞争力。 本课题是实现了网上购物系统的功能,如:商品分类、订单管理等功能。本设计采用安装 JAVA JDK 、安装 IDEA_基于java web的网店管理系统的设计与实现
文章浏览阅读10w+次,点赞9k次,收藏2.4w次。关于Python爬虫的超详细讲解,用例子来给大家一步步分析爬虫的代码原理,由浅入深,老年人来了,我也给你整明白。_python爬取数据
文章浏览阅读250次。发送邮件工具类package com.wfsc.utils;import com.wfsc.entity.User;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.io_发送邮件 filestoragetype
文章浏览阅读7.9k次,点赞17次,收藏110次。C++读取XML文件_c++ xml解析
文章浏览阅读235次。R语言使用caret包的train函数构建多元自适应回归样条(MARS)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标、tuneLength参数和tuneGrid参数超参数调优_多元自适应回归样条 r
文章浏览阅读5.8k次。Android中ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅。程序效果是实现一个显示联系人的简单信息。使用ListView控件,数据有姓名,和照片,并加入点击事件响应。布局文件:
文章浏览阅读535次。《2016最新二级C语言考试题库及答案(程序改错专项练习 精华版)》由会员分享,可在线阅读,更多相关《2016最新二级C语言考试题库及答案(程序改错专项练习 精华版)(4页珍藏版)》请在人人文库网上搜索。1、程序改错题(共15题)1、在考生文件夹下,给定程序MODI.C的功能是:求一维数组a中所有元素的平均值,结果保留两位小数。例如,当一维数组a中的元素为:10,4,2,7,3,12,5,34,5..._安徽二级python考试有程序改错题吗?
文章浏览阅读2.2k次。 UMLChina第十三期专家交流实录返回首页 返回目录北京时间2002年1月10日(星期四)晚上21:30-23:30 嘉宾:Roser S.Pressman博士是软件工程领域国际知名的咨询专家和作者,R.S. Pressman & Associates, Inc的创始人,已有超过30年的产业经验,主要从事工程产品软件和系统软件的开发技术工
文章浏览阅读2.4k次。${parameter:-word}如果parameter的变量值为空或者未赋值,则会返回word字符串代替变量值${parameter:=word}如果parameter的变量值为空或者未赋值,则设置这个变量值为word,返回值也是word${parameter:?word} 如果parameter的变量值为空或者未赋值,那么word字符串会被当做标准错误输出,否则输出变量的值${parameter:+word} 如果parameter的变量值为空或者未赋值,则输出空值,否则wo_linux脚本格式