当前位置:文档之家› grails 布局

grails 布局

grails 布局
grails 布局

本章的目标是为Collab-Todo应用程序创建好的外观布局。图5-1所示的框架希望能给你一个如何去布局应用程序的提示。

< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />

图5-1 Collab-Todo程序布局

上面的布局是一个通用的模式:页面中间是两列,两边空白是边框槽(gutter),再加上一个头部和尾部。表5-1描述了该框架的每个组成部分。

表5-1 框架组成部分

部件描述

边框槽(gutter)提供浏览器的页边空白,以便主要内容显示在浏览器的中间区域

顶栏(topbar)供登陆与退出,如果用户已登陆则显示用户名。

头部(Header)显示应用程序标题,本例中为:“Collab-Todo.”

内容(content)程序主要内容显示区域,程序的大部分内容都在这里显示。

右边栏(righ sidetbar)第8章将利用右边栏显示友元列表。

底部(footer)显示版权信息

像大部分模型-视图技术,Grails使用了一种版面布局(layout)和基于模板(template-based)技术去组装视图或者说UI。一个模板就是一个视图的部分,位于grails-app/views目录下面,以下划线开头命名的。下划线开头在Grails规约中表示是一个模板。最好的练习是将模板与指定的域类关联起来,像User域类,它是位于域类视图目录,就像grails-app/views/user/_someTemplate.gsp。你应该使模板更通用或把模板放到一个通用的地方让view共享,比如

grails-app/views/common目录。

版面布局将模板组装起来并在页面上排版,你将用main.gsp

(grails-app/views/layouts/main.gsp)和CSS(web-app/css/main.css)创建版面布局,并且创建两个模板((_topbar.gsp 和_footer.gsp)被所有的视图所共用,在main.gsp 中应用某个CSS式样并改变这个式样。

让我们从最简单的footer开始学习本章。

创建Footer

本小节的目标是创建一个简单的版权信息在站点所有页面下方显示。正如你所想的,你要在grails-app/views/common目录中创建一个名为_footer.gsp的GSP 文件(GSP fragment)。之后再通过 标签将_footer.gsp模板添加到版面布局中。这时需要增加一个

段到主版面布局的式样类来设计这个footer的式样,这个式样类是在main.css中定义的(You then need to style the footer by adding a
section to the main layout using a style class that you define in the main.css.)。列表5-1显示的是你所需要做的。

列表5-1. Footer模板(_footer.gsp)

© 2008 Beginning Groovy and Grails: From Novice

to Professional

Christopher Judd, Joseph Faisal Nusairat, and James Shingler

你需要将这版权信息添加到主版面布局(main layout)main.gsp中才会在所有页面中显示出来。这里也是你所要添加标签的地方(This is where the tag1 comes to your aid),你使用带模板信息的标签把模板插入到GSP中。你所做的工作是在main.gsp的最后增加

template="/common/footer" />这一行。列表5-2所示的是main.gsp中的内容。

注意:根据规约规定,在标签中的模板属性字符串,模板名的下划线和.gsp是省略的。

Listing 5-2. 主版面布局(main.gsp)

<g:layoutTitle default="Grails" />

href="${createLinkTo(dir:'css',file:'main.css')}" />

图5-2 显示的是重新载入后的主页面。

图5-2 增加版权提示

底部的版权信息是有了,但与你想要的效果还是有一定差距。如果字符显示在中间位置,并且有分隔线就比较完美了。你可以直接在footer模板中加上式样信息,不过有个更好的解决方法,就是使用CSS。你只需在主版面布局增加一个带上“footer”属性ID的

标签,以及在main.css中定义一个“footer”式样。列表5-3所示的是你要在main.gsp中所做的改变。

列表5-3. 改变后的主版面布局文件(main.gsp)

<g:layoutTitle default="Grails" />

href="${createLinkTo(dir:'css',file:'main.css')}" />

列表5-4 Footer 式样文件

#footer {

clear:both;

text-align: center;

padding: 3px;

border-top: 1px solid #333;

}

图5-3 显示改变后的效果。

图5-3 改变后的footer式样

让我们重新回顾一下如何增加footer:

首先,创建了一个_footer.gsp模板文件并把它放在grails-app/views/common 目录下。

第二,通过标签把_footer.gsp模板放到版面布局中。

第三,在主版面布局文件中增加一个

标签,并在
标签中使用了在main.css定义的一个式样类,从而改变了footer式样。

现在,你可以随心所欲的创建你想要的footer了,让我们再开始学习构建login/logout功能。

创建Topbar

通过在主版面布局增加topbar(_topbar.gsp)模板来增加一个topbar。topbar 模板是放在grails-app/view/common目录中供所有视图共用的。列表5-5显示的是topbar模板内容。

Listing 5-5. The Topbar Template (_topbar.gsp)

01

列表5-5使用了三个你尚未见过的标签:、和两个标签共同完成“if-then-else”逻辑。是创建一个超链接(如:http://localhost:8080/collab-todo/user/logout)。在3-6行检查一个会话(session)是否是user对象。如果是user对象,则在用户名后面跟一个“|”和Lonout链接。7-9行显示的是if语句中的else条件,它是显示一个logon链接。列表5-6显示如何在主版面布局中增加topbar。

Listing 5-6. 增加topbar后的主版面布局(main.gsp)

. . .

. . .

列表5-7是在main.css中增加的CSS段落。

列表5-7. Topbar 式样

#topbar {

text-align:left;

width: 778px;

margin: 0px auto;

padding: 5px 0;

}

#topbar #menu {

float: right;

width: 240px;

text-align: right;

font-size: 10px;

}

图5-4显示了改变后的结果

图5-4 增加了topbar注意Login/Logout链接在浏览器的右上角。

添加更多的外观< xmlnamespace prefix ="o" ns

="urn:schemas-microsoft-com:office:office" />

现在你要完成改变以便使Collab-Todo具有自己独有的外观。还要改变右边栏、替换Grails头部、和默认的标题。前面提到,在第8章将利用右边栏来显示用户好友。我们以CSS式样开始,添加列表5-8的CSS式样片断到主式样表(the main style sheet)。

列表5-8. CSS 式样

#header {

width: 778px;

background: #FFFFFF url(../images/header_background.gif) repeat-x; height: 70px;

margin: 0px auto;

}

#header h1 {

font-family:Arial,sans-serif;

color: white;

padding: 20px 0 0 6px;

font-size:1.6em;

}

body {

margin: 0px;

padding: 0px;

text-align:center;

font-family: "Trebuchet MS",Arial,Helvetica,sans-serif;

font-style: normal;

font-variant: normal;

font-weight: normal;

font-size: 13px;

line-height: normal;

font-size-adjust: none;

font-stretch: normal;

color: #333333;

}

#page {

width: 778px;

margin: 0px auto;

padding: 4px 0;

text-align:left;

}

#content {

float: left;

width: 560px;

color: #000;

}

#sidebar {

float: right;

width: 200px;

color: #000;

padding: 3px;

}

提示:你能在工程源文件中找到header_background.gif文件

现在需要在主版面布局中添加更多的CSS式样,如列表5-9。列表5-9 完成版面布局(main.gsp)

01

02

03 <g:layoutTitle default="Collab Todo" /></p><p>04

05

06 href="${createLinkTo(dir:'css',file:'main.css')}" />

07

08 href="${createLinkTo(dir:'images',file:'favicon.ico')}"

09 type="image/x-icon" />

10

11

12

13

14

15

19

20

21

22

25

26

27

28

29

30

33

34

37

38

39

好友模板

在第八章研究好友模板(_buddies.gsp)的细节,现在只是在

/common/_buddies.gsp模板文件中加上如下片断:

Buddies

让我们聊聊现在版面布局所做的改变。第3行使用标签,如果视图没有标题,则默认显示“Collab Todo”成页面上。14行增加一个

使用页面式样(page style),和主体式样(body style)一起,页面式样创建了一个778像素宽的容器在页面中心。22-24行使用Collab-Todo 头部(Header)替换了Grails 头部(Header),如果仔细看CSS头部式样,你会发现定义了一个头部图片((header_background.gif)。26-28行用content式样包含视图主体(view’s body),这意味着这个页面被插入到这里的main.gsp装饰(This means that pages decorated by main.gsp are inserted here),content式样创建了一个560像素宽的左对齐的页面容器。30-32行创建了包含好友模板的边框栏(sideBar)式样,这个容器是200像素宽右对齐。

你可以看到你的工作成果如图5-5.

< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />

图5-5 完成后的页面布局

现在外面逐渐美观起来,你还需要做的是,通过改变“Welcome to Grails”和主体,去掉你不再需要索引页面(index page)。你能找到这个HTML页面在web-app/index.gsp中。将index.gsp内容改为列表5-10所示内容。

列表5-10 新的index页面(index.gsp)

01

02

03 Welcome to Collab-Todo

04

05

06

07

Welcome to Collab-Todo

08

09 Welcome to the Collab-Todo application. This application was built

10 as part of the Apress Book, "Beginning Groovy and Grails."

11 Functionally, the application is a collaborative "To-Do"

12 list that allows users and their buddies to jointly

13 manage "To-Do" tasks.


14

Building the Collab-Todo

15 application is used to walk the user through using Grails 1.0 to

16 build an application. Below is a list of controllers that are

17 currently deployed in this application. Click on each to execute

18 its default action:

19

20

21

27

28

29

这个文件中有两个地方需要讲解。22-25行说明了迭代器的使用方法,它遍历控制器类的集合,并在一个列表中显示控制器类的名称,这是这个应用程序的一部分。

第4行是一个通过规约使用版面布局的例子,版面布局元标签(layout metatag)引起“main”版面布局(main.gsp)被用于页面。所有的版面布局都位于grails-app/views/layouts中,可以被重调用。

图5-6显示了你的工作成果。

5-6 最终的页面

在改变外观格局的同时,学习了版本布局、模板、CSS和一些Grails标签。Grails与其它流行的Web 框架一样,支持标签库(tag libraries),Grails标签库类似JSP标准标签库(JSTL)(JavaServer Pages Standard Tag Library)和Struts tags,标签库包含了所有的条件逻辑、传递和版面布局,接下来的一节提供了Grails的速览。

实现topbar的功能

你已拥有一个完整的版面布局了,现在是实现topbar功能的时候了。topbar 的功能是实现用户登陆。当用户选择登陆链接时,出现登陆框。当用户登陆后,topbar显示的是用户名称和退出按钮。

注意:现在实现的登陆功能只是一个初级的简单识别用户,并不是提供了一个功能全面,安全稳健的系统。因为现在的登陆只是个临时提供一个为所有控制器活动的验证逻辑。在第七章介绍一个功能全面的登陆系统

登陆界面

创建登陆界面要在合适的目录中创建一个登陆gsp文件。Gsp文件中包含一个选择用户名的单选下拉框和一个提交按钮。当提交用户选择,框架就调用UserController.的handleLogin活动进行登陆。图5-7是登陆页面。

图5-7 登陆页面

让我们一起看下登陆链接:

action="login">Login。当使用者点击登陆链接时,UserController的登陆活动(login action)被调用。我们在下一小节解释登陆活动。

基于以上规约,login.gsp文件应该位于grails-app/views/user目录。列表5-11显示了login.gsp文件内容:

列表5-11 登陆页面(login.gsp)

01

02

03 Login Page

04

05

06

07

08

09

10 ${flash.message}

11

12

13

14 Welcome to Your ToDo List. Login below

15

16

17

18

19 Sign In:

20

21

22

23 optionKey="userName" optionValue="userName">

24

25

26

27

28

29

30

31

32

1-5行定义了页面标题以及页面是被main版面布局载入的(the page is decorated by the main layout),这意味着main.gsp是login.gsp的容器。让我们看看列表5-9的26行(表5-9 main.gsp的26行

),在这里,login.gsp 主体是通过插入的。还记得主版面布局中有个默认的标题吧:

。当login.gsp文件被主版本布局载入(decorated)时,login.gsp标题将替代这个默认标题。

6-31行定义了页面的主体。9-12行显示一个闪过的信息(flash message),关于这点在“Flash and Flash Messages”这节介绍。16-29行创建了一个选择域结构。16行指出当选择域被提交时,UserController的handleLogin将被调用。在22-23行,Grails的select标签创建HTML选择元素。userName域类的name属性被当做选择域的名称(后又被传递给登陆动作)。当赋值时,form属性的值放在一个Crails使用创造选择的集合(When evaluated, the form attribute results in a collection that Grails uses to create the options)。optionKey和optionKey两个特殊的属性用来创建HTML

现在运行程序来看这个页面,你会得到404错误。这是因为UserController 登陆动作没有创建,而topbar要通过登陆协作连接到登陆页面的。

登陆动作(action)

UserController被动态脚手架安装了。现在要继续使用动态脚手架为UserController增加登陆动作。列表5-12列出的是更新后的UserController版本。

Listing 5-12. The login Action

class UserController {

def scaffold = User

def login = {}

}

在网络中通常是使用该action为重定向机制。根据规约,Grails使用action 名字去查找同名的GSP文件。

现在点击登陆链接,将进入登陆页面,但用户名选择域是空的。回忆一下列5-11,调用User.list()获得用户集来填充选择域。到目前你还添加任何用户,所以这里为空。现在让我们创建两个用户来测试该框架功能。在主页中,选择UserController ?New User。之后,再选择用户登陆,用户名将出现在右上角,如图5-8。

图5-8 一个登陆的用户

接下来,通过UserController handleLogin行为实现登陆逻辑。

处理登陆和退出行为

你调用handleLogin action来登陆用户。当你调用这个action时,Login 框架传递给登陆用户的username类,用户对象与username会话相关联,这样完成了登陆。如果用户没有找到,将会产生一个错误消息,并将重定向到登陆界面。在现在这个特殊例子里面,登陆都会成功,但这仍是个好的练习。Logout action从会话中移除用户,因此用户退出登陆。列表5-13显示的是改进后的usercontroller。

列表5-13改进后的usercontroller

class UserController {

def scaffold = User

def login = {}

def handleLogin = {

def user = User.findByUserName(https://www.doczj.com/doc/789322380.html,erName)

if (!user) {

flash.message = "User not found for userName: ${https://www.doczj.com/doc/789322380.html,erName}"

redirect(action:'login')

}

https://www.doczj.com/doc/789322380.html,er = user

redirect(controller:'todo')

}

def logout = {

if(https://www.doczj.com/doc/789322380.html,er) {

https://www.doczj.com/doc/789322380.html,er = null

redirect(action:'login')

}

}

}

当用户登陆后,将被带到Todo List页面,并且在topbar上显示用户名和退出链接。列表5-5中的第8行显示了退出链接与UserController logout action的关联。

现在你已开始改进代码了,但你必须像做其它方面的改进一样,确保不要破坏这个框架。这几乎是不可能,但接下来的一些好事情是从Six Sigma(译注:六西格玛,是一项以数据为基础,追求几乎完美的质量管理方法)、Poka Yoke偷主意(马化腾说:模仿是最稳妥的创新)。Poka Yoke是日本单词,意思是“错误检验”。这偷来的主意就是让错误显现出来,以便预防错误。你将通过创建测试来完成这些工作。下一小节帮助你编写测试来检验你刚才写的代码。

最新shiro-安全框架

s h i r o-安全框架

Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。本文就带领读者一睹 Shiro 的风采。 可能大家早先会见过 J-security,这个是 Shiro 的前身。在 2009 年 3 月初之前,这个安全框架叫做 J-security,由于某些原因,更名为 Shiro(或者Ki,意为 Fortress),是 Apache 的孵化项目,鉴于本文编写时 Shiro 的还没有正式发布的版本,本文使用的是 Jsecurity 的稳定版本 0.9,本文中Shiro 等同于 Jsecurity。 本文将涉及 Shiro 的整体框架、安全模型、关键概念类,同时给出了 Shiro 以及 Grails Shiro Plugin 的使用示例,可以下载文中使用的源代码。 本文代码的开发环境: ?Jsecurity 0.9 ?Grails 1.2.0 ?Grails Shiro Plugin 1.0.1 ?SpringSource Tool Suite 2.3 Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点: 1.易于理解的 Java Security API; 2.简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos, ActiveDirectory 等); 3.对角色的简单的签权(访问控制),支持细粒度的签权;

4.支持一级缓存,以提升应用程序的性能; 5.内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境; 6.异构客户端会话访问; 7.非常简单的加密 API; 8.不跟任何的框架或者容器捆绑,可以独立运行。 目前还有其他出现较早的安全框架,比如 JAAS,Spring Security。 JAAS —面世的时间最早,但是鉴于其在使用上有很大的限制,很少有人真正的使用它。可以说它不是一个好的应用程序级别的安全框架; Spring Security —目前是 Java 安全框架领域当之无愧的老大,已经非常成熟了;如果使用 Spring 框架,可以首选 Spring Security,但是对于单应用来说,Shiro 更显简单方便。 下面就开始我们的 Shiro 之旅吧! 首先,我们来看看的 Shiro 的整体架构,见下图: 图 1. 整体架构

国企内部廉洁管理与监督系统

国企内部廉洁管理与监督系统 落实““三重一大”工作”、廉洁经营、激发企业活力与创造力 ●三重一大电子监察 ●党廉工作管理 ●企业决策事项督办 ●廉洁风险防控信息管理、党廉案例宣传教育 ●基层党风廉洁建设 ●决策监督、工作执行监督 解决问题 建立国企内部廉洁管理与监督系统,实现有效监督,达到内控业务活动合法、有序、协调和高效的目的。开展廉洁监督,既是国企发展的客观选择,也是纪检监察工作的内涵不断深化的必然结果,同时又是纪检监察工作制度创新的重要体现,标志着国企监察工作的成熟和完善。中科旗信充分认识廉洁监督的重要地位,贯彻落实十八大“两个责任”和国企深化改革要求,在党廉建设工作和内部监督机制手段上进行改革创新,全面构建电子监察制度体系,直接关系到国企管理能力的提升和从源头上治理腐败目标的实现,是建立健全教育、制度与监督三者并重的惩治与预防腐败体系的基础性工作。 产品功能 中科旗信“国企内部廉洁管理与监督系统”由两个重点,四大组件部分构成。两个重点包括帮助党委厘清责任,明确分工,按时,按周期,按计划开展“三重一大”的落实工作;分解和传递主体责任,并监督各级党委履行好责任,完成任务。四大组件,也是相当于4个核心子系统,分别是“三重一大”工作电子监察、工作督查督办、廉洁风险防控信息管理(库)、效能考核子系统。同时平台还提供了大量辅助功能,如分工管理、计划分解管理、进度汇报、计划追踪、电子台账、各类报表、监督监察手段、提示提醒、在线交流;统计分析、图形化结

果展示;年度分类信息管理等等。以上子系统可按用户实际需求自选建设。 一、功能概述 ◆规范管理,防范风险 中科旗信根据“三重一大”管理的相关制度,将管理过程程序化,从提出、论证、预告、讨论、表决、纪要、执行到公开,让三重一大决策更科学、更民主。 ◆领导查询,掌控直观 领导登录系统后可以看到“三重一大”事项的分布情况、决策情况、完成情况、监督情况、效能考核情况等;平台提供图表功能及图片上传功能,便于领导直观掌控、全面把握大局,及时做出决策。 ◆电子监察,严肃有力 系统对“三重一大”事项的提出、调研论证、会前酝酿、上会讨论、表决、执行全过程实施电子监察;每一环节都在系统中留下电子记录,支持照片、扫描件等文件上传,让系统说话、纪检监督与公众监督并举,电子监察严肃有力。 ◆电子履职,记录清晰 责任部门通过系统上报“三重一大”事项的决策执行情况,领导在线接收会议预告信息、审核会议纪要及执行反馈报告,中科旗信系统自动记录每一次操作的时间、操作情况、保存工作任务实施的各个环节,确保工作流程有迹可寻、有据可查。 ◆打造起“人员网上管,绩效网上考”的现代公司管理新格局 系统构建了智能化管理系统,对公司各级管理全部依托网络平台进行,效能考核全部由系统自然生成,名次等级全部由系统自动通报公示。对全公司及各级年度目标实时进行分析研判,实现目标化、标准化和流程式管理,对全公司责任目标完成进度、完成质量,由过去的模糊式、随意性变成了具体化、数

最受欢迎的Java框架介绍

最受欢迎的Java框架介绍

17个最受欢迎的Java 框架:优点、缺点 Java 依旧是最受欢迎的编程语言。这里是如今被使用最多的Java 框架第一部分。 在2018年,Java 依旧是世界上最受欢迎的编程语言。它自带一个庞大的生态和全世界超过900万的Java 开发者。虽然Java 不是最简单的语言,但是你不必从零开始写Java 程序。这里有许多杰出的Java 框架可以编写运行在Java虚拟机上的web 和手机应用程序、微服务和REST API。 Java 框架允许你聚焦于你的app的业务逻辑,而不是编写如处理数据库连接或异常处理这样的基础功 能。此外,如果你有一些Java 的经验,你可以更快的开始。这些框架都使用相同的语法并且与相似的 条件、模型和概念工作。 我们前17 的Java 框架基于直到2018年的使用情况并按字母顺序排列展示的。这里是顶级Java 框架的第一部分。 Blade:极小占用的简单应用程序框架 Blade 是一个轻量级、高性能的Java 框架,它允许你用简单的方式快速构建web 应用程序。作者希望用户再一天内了解整个框架。因此,Blade 专注于简洁和优雅。 Blade 框架遵循MVC(模型-视图-控制器)软件设计模式。它有易于理解的设计,并且不依赖其他任何 第三方库或引入太多层。Blade 基于Java 8。Netty web服务器和模板引擎也内置于框架中。它占用极小,源代码总共小于500kb。

用Blade,你可以访问RESTful 风格的路有接口并可以将你的app 作为当作基础Maven 项目部署。Blade 也内置了安全功能。例如,它带有CSRF(跨站点请求伪造)和XSS(跨站点脚本)防御。它是 一个多功能框架,因为它自带插件扩展和webjar 资源的支持。其主站的文档是中文的。但是,它在 Github repo 也有英文文档。 Dropwizard:生产级RESTful Web 服务 Dropwizard 是一个高性能且简单的用于快速开发RESTful Web 服务的Java 框架。它特别适合创建 Java 微服务。 Dropwizard 框架汇集了一些成熟的Java 库,为你提供了快速且无干扰的开发平台。它自带了一个嵌入 式Jetty 服务器、Google Guava、LogBack、Hibernate Validator、Joda Time和许多其他流行的Java 库。此外,Dropwizard 还包含可用于构建RESTful Web 服务的Jersey 和用于处理JSON 的jackson。你可以将Dropwizard 想成一个独立的生态系统,包含了上述所有依赖捆绑为一个单独的包。 如果你选择Dropwizard,你将不必花费大量时间为如配置、监控、日志的辅助功能编写代码。相反, 你可以专注于你的app 的主要业务逻辑并达到最大生产率。这就是为什么Dropwizard 经常被称为操作 友好的Java 框架。如果你之前写过Java 那么入门不会很难;Dropwizard 的文档甚至有一个简单的 Hello World 示例,它可以帮助你完成第一步。 Grails:基于Groovy 的Web 应用程序框架

Etmvc入门学习详解

Etmvc学习文档 etmvc框架介绍 如今的Java Web开发对于需求来说已经变得过于复杂。当今众多Java领域的Web开发框架不仅使用复杂,而且并没有很好的遵循Don’t Repeat Yourself(DRY)原则。 之前看过struts, spring mvc, ror, grails等框架,其中最欣赏ror了,struts的灵活性对于多数中小型项目而言显得对于多余。特别是在AJAX如此盛行的今天,现有的框架对AJAX的支持显得不足。于是,萌生了开发一套简易框架的念头,再后来就有了现在的etmvc。 一、什么是etmvc? etmvc是一套轻量级简易高效的WEB开发框架,严格遵循MVC的思想。et一词源于1982年斯皮尔伯格执导的一部温馨科幻片《E.T.》(外星人),意思就是来自外星人的,不受束缚的MVC,开发者可以快乐地做WEB开发,而不受传统的烦杂折磨。 二、etmvc框架定位 我们给这个框架的定位如下: ?简易:代码要简单,开发要容易。约定优于配置,再也没有XML的配置之苦。 ?性能:在满足功能的前提下尽量地提高性能。 ?实用:没有太多花哨的东西,一切从实用的角度考虑。 三、授权协议 etmvc框架采用LGPL授权。 四、etmvc框架的组成 etmvc框架包括mvc和一个可选的orm实现,可选的orm实现是一个ActiveRecord框架,独立于mvc,可以在非WEB的应用程序中使用。 五、etmvc框架的安装 1获取最新的框架:从本站获取最新的etmvc框架。 2建立WEB项目,将下载的压缩文件解压至项目的/WEB-INF/lib目录中。 3配置数据库,在/WEB-INF/classes目录中建立数据库连接配置文件activerecord.properties,配置示例: 源码复制打印 3domain_base_class=com.et.ar.ActiveRecordBase

AntiSamy中文

AntiSamy 是什么? OWASP AntiSamy项目可以有好几种定义。从技术角度看,它是一个可确保用户输入的HTML/CSS符合应用规范的API。也可以这么说,它是个确保用户无法在HTML中提交恶意代码的API,而这些恶意代码通常被输入到个人资料、评论等会被服务端存储的数据中。在Web应用程序中,“恶意代码”通常是指Javascript。同时层叠样式表(CSS)在调用Javascript引擎的时候也会被认为是恶意代码。当然在很多情况下,一些“正常”的HTML 和CSS也会被用于恶意的目的,所以我们也会对此予以处理。 冷静地说,AntiSamy项目是违背现代安全机制的。因为出于安全考虑,安全机制和用户之间的沟通应该是单向的。而让潜在的攻击者知道验证的细节通常是不明智的,这样会让攻击者学习和探查到系统运行机制以找到薄弱环节。这种类型的信息泄露可能会造成意想不到的后果。如果一个登录系统,告诉访问者“用户名不存在”,这就泄露出一个事实:这个用户名在系统中确实不存在。攻击者可以使用一个字典,一个电话本,或者二者结合,在远程得到一个有效的用户列表。利用这些信息,攻击者可以使用暴力穷举破解进行攻击,或者引发大规模的账户锁定从而造成拒绝服务攻击。这是很常见的攻击形式。 但是,这种策略在当前的情况下并不实用。普通的互联网用户基本上都不怎么擅长写HTML和CSS,那么他们从哪儿获取自己需要的HTML代码呢?通常他们只是从其它Web 页面上复制一些内容。简单地拒绝输入,而不提供任何信息,这会让用户感到烦恼和沮丧。愤怒的用户会转去别的社交网站活动。 OWASP的授权许可政策(详见OWASP网站的会员FAQ页面)允许OWASP项目在任何被批准的开源协议下发布。基于此,AntiSamy项目遵照BSD开源协议进行发布。 作者是谁? AntiSamy项目最早由Arshan Dabirsiaghi (arshan.dabirsiaghi @ https://www.doczj.com/doc/789322380.html,)在Jason Li (li.jason.c @https://www.doczj.com/doc/789322380.html,)的帮助下创立,他们两位都是Aspect Security (https://www.doczj.com/doc/789322380.html,/)成员. AntiSamy Java, .Net 的和其它语言版本之间有什么区别? 这个页面(https://www.doczj.com/doc/789322380.html,/index.php/AntiSamy_Version_Differences)上你可以看到不同版本之间的大致区别。由于这是一个没有资金来源的开源项目,所以不能期待所有版本的实现与预期功能都完全一致。如果有某个版本有一些功能缺失,请告诉我们。我们会尽力满足,或者写一个补丁。 我该如何开始?

Swing应用程序框架(Swing Application Framework)API绪论(JSR

Swing应用程序框架(Swing Application Framework)API 绪论(JSR < > 猎头职位: 上海: Senior Software Engineer 相关文章: swing组件介绍(1) swing组件介绍(2) JPanel的调用问题!!推荐群组: Groovy on Grails 更多相关推荐 概述 本文档是原型Swing应用程序框架的简介,目标读者是那些愿意评论初始原型的的开发者。它既不是综合的教程,也不是开发者指南,它只是通过示例引入框架主要特性的概观。在检查规格说明(javadoc)和实现之前,阅读本材料是明智之举。

目标 本API的目标是由原始的Java规格请求(JSR)JSR-296所定义, 它在2006年5月批准。其整体目标是简化构建Swing应用程序,让桌面Java开发人员对此的工作也是直截了当的。通过提供一小组类,也叫“框架”来达到此目标。框架定义了对大多数桌面应用程序的共有的基础设施: 应用程序生命周期管理,特别是GUI的启动和关闭。 对资源管理和载入的支持,这些资源是字符串,格式化的消息,图像,颜色,字体以及桌面应用程序共有的其他类型的资源。 对动作定义,管理和绑定的支持,其中包含了异步运行的动作(在后台运行)。 持久化会话状态:支持自动地,有选择地保存应用程序一次运行到下次运行的GUI状态。比如顶层的窗口几何位置。 框架API概述 框架应用程序建立Application基类的子类,它定义了应用程序的生命周期,特别是应用程序的启动时所为,关闭时所为。当应用程序启动时,建立这个子类的单个实例。ApplicationContext 单体支持Application类的子类。它提供对动作,资源,任务,对话状态和存储和其它对象和服务的

视频会议系统bigbluebutton参阅文档

视频会议系统bigbluebutton参阅文档 一、BigBlueButton简介 BigBlueButton是一套开源的视频会议系统,特别适用于远程教育,为大学和学院提供高品质的远程学生的学习体验。也可以用于标准的会议。该系统可以让多个用户登录共享他们的摄像头并同时能够通过VOIP进行交流。可以在线演示PDF和Office文档,用户还可以将他们的桌面共享给其他用户。用户可以举手发言,支持群聊和私聊。 BigBlueButton 支持共享的幻灯片(PDF 格式和 PPT),视频,白板,聊天,语音(使用Asterisk 或 FreeSWITCH),和台式机。它是建立在十五个开源组件之上的系统,运行在Mac,Unix和PC电脑,并且具有社区支持、良好的设计和简化的用户体验。 官网:https://www.doczj.com/doc/789322380.html,/ 二、安装BigBlueButton (一)安装BigBlueButton服务器 1.安装BigBlueButton VM 为了开发者可以搭建一个开发环境来开发BigBlueButton,BigBlueButton提供一个基于Ubuntu的虚拟机,任何人都可以很容易的在这个虚拟机上运行BigBlueButton服务器。VM在VMWare Player下运行,VMWare Player可以在Unix,Windows或者Mac上安装。同时,为了VM能够作为一个完整的开发环境,BigBlueButton开发者预先设置了VM。 安装VM前需要准备一下两个条件: 1)VMWare Player(或者VMWare Workstation) 2)DHCP Server,为VM分配IP地址(因为需要联网更新相关的包,所以需 要一个IP地址,否则不能完成BigBlueButton的安装) 下载VM,然后解压。当前最新版本是bigbluebutton071a-vm.zip。打开文件夹有两个图标:

在 Web 项目中应用Shiro开源权限框架

在Web 项目中应用Apache Shiro 开源权限框架 Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。 认证和授权为权限控制的核心,简单来说,认证就是证明你是谁?Web 应用程序一般做法通过表单提交用户名... Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明你是谁?Web 应用程序一般做法通过表单提交用户名及密码达到认证目的。“授权”即是否允许已认证用户访问受保护资源。关于Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍Shiro 在Web Application 中如何实现验证码认证以及如何实现单点登录。 用户权限模型 在揭开Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资源?”。为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示。 1. 用户信息用LoginAccount 表示,最简单的用户信息可能只包含用户名loginName 及密码 password 两个属性。实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息。 2. 用户权限信息用Role 与Permission 表示,Role 与Permission 之间构成多对多关系。 Permission 可以理解为对一个资源的操作,Role 可以简单理解为Permission 的集合。 3. 用户信息与Role 之间构成多对多关系。表示同一个用户可以拥有多个Role,一个Role 可以被多个用户所拥有。 图1. 用户权限模型

bigbluebutton技术文档

Bigbluebutton主干概述: ?bigbluebutton-apps - The server side red5 web-apps of BigBlueButton ?bigbluebutton-client - The Flex/Flash client of BigBlueButton ?bigbluebutton-web - The Grails application for scheduling conferences and logging in/out ?deskshare-app - The Desktop Sharing server side red5 web-app ?deskshare-applet - The Applet program used to capture the screen on the client bigbluebutton源代码主要包括以下几个部分: 1.bigbluebutton-apps:red5服务端的web应用程序 2.bigbluebutton-client: 采用Flex/Flash技术的客户端 3.bigbluebutton-web: 负责会议调度和登录注销功能的应用程序 4.deskshare-app: red5桌面共享服务端web应用程序 5.deskshare-applet: 负责捕获客户端的屏幕 构架图: 下图展示bigbluebutton的主要构成部分

1.Nginx(“engine x”)proxies bbb-web and bbb-apps to support RTMPT(RTMP Tunneling). Servers out the bbb-client. ngnix(引擎x):是bbb-web和bbb-apps的代理服务器,支持RTMPT(路由 选择表维护链路)。Ngnix是bbb-client的服务端。 2.Grails application that handles creating conference and scheduling. Also, handles login and logout when joining the conference. Bbb-web:Grails 应用程序处理创建会议和会议调度的进程。同样,他也处 理会议的登录和注销操作。 3.Responsible for converting PDF presentation slides to Flash. Swftools:负责将PDF演示幻灯片转换成Flash。 4.Responsible for converting PDF presentation slides to Flash in case SWFTools is not able to convert. Also, generates the thumbnails. ImageMagick Ghostscript:当swftools无法进行转换时,它就会将pdf演示幻 灯片转换成Flash,并产生缩略图。 5.Responsible for converting .doc , .ppt & .xls files to PDF presentation slides OpenOffice:负责将.doc ,.ppt和.xls文件转换成PDF演示幻灯片。 6.The AGI(Asterisk Gateway Interface)queries the database to determine if the dialed in voice conference number is valid or not. Asteriskjava:AGI(星状网关接口)通过查询数据库,确定拨打的语音会议号 是否有效。 7.Message conduit between bbb-web and bbb-apps Activemq: bbb-web和bbb-apps之间的消息管道。 8.Red5 application responsible for synchronizing all the participants in the conference. Bbb-apps:Red5 应用程序负责的工作是:使会议的所有参与者同步。 9.The AMI(Asterisk Management Interface). Listen for user events (joined/left, mute/unmute, talk)and issues commands(mute/unmute, kick user)to Asterisk. Asteriskjava: AMI(星状管理接口)监听用户事件(加入、离开、静音、取消 静音、通话)和给asterisk发布指令(静音、取消静音、踢除用户)。 10.Voice conference server. Asterisk:语音会议服务器 11.A voice application that connects to asterisk. Sip:连接到asterisk的语音程序。 12.Application for desktop sharing Deskshare:桌面共享应用程序 13.Application for video conferencing Video:视频会议应用程序。 BigBlueButton Red5 Apps We think Red5 rocks, and we use it as the core server for handling all the real-time interaction with the client.

Eclipse 下Grails环境搭建步骤

Eclipse下的Grails开发环境搭建详解 听说Eclipse对Grails支持不是很好,相反,IntelliJ和NetBeans都比Eclipse要好。IntelliJ我是没用过,不好发表什么看法,不过经过这两天对Eclipse和NetBeans在开发Grails项目上的试用,发现确实NetBeans使用起来要方便一点。这是一句比较客观的话,因为本身我自己大部分时间还是一个Eclipse使用者。那么下面我们就进入正题: 1. Grails环境安装 不管用NetBeans还是Eclipse,都需要这一步,即首先将Grails下载下来,并安装好。 Grails官网是:https://www.doczj.com/doc/789322380.html,/ 下载链接:https://www.doczj.com/doc/789322380.html,/Download 这一步很简单,相信大家都不会有什么问题。只是有一个细节必须得提一下,那就是GRAILS_HOME环境变量的设置问题,它必须与你所设置的PATH变量(添加 了%GRAILS_HOME%\bin目录之后的那个PATH)在同一个级别上。要么都是用户级变量,要么都是系统级变量。我这里全部设置在用户级变量下,如图: 之后,运行cmd,输入grails命令,回车,如果能够显示一条帮助信息,那么表示这一步成功完成。(我这里使用的版本是Grails 1.0.3) 2. Eclipse安装 这里也只有一点需要说明:因为Grails开发是需要编辑gsp文件的,它实际上就是一个使用了一些特殊标签的jsp文件,而Classic版本的 Eclipse不带有jsp编辑器,所以建议下载JEE版本的Eclipse。当然,如果你觉得你对JSP语法太熟悉了,完全可以不用它的JSP 编辑器,而且你机器内存实在太小的话,可以考虑用Classic版本。

在Eclipse下构建Grails项目

1、下载安装JDK 1.5或者更高版本,下载安装Grails 2、创建.bat 文件,文件: set JA V A_HOME=C:\Java\jdk1.6.0_13 set GROOVY_HOME=E:\2G\groovy-1.6.3 set path=%JA V A_HOME%/bin;%GROOVY_HOME%/bin;%path% cmd 在控制台下输入grails help,如果能看到Grails 的命令列表,Grails 的安装配置就算成功了。 图3. 检验Grails 是否安装成功 3、创建一个Grails 应用程序 创建Grails 应用程序需要使用grails create-app 命令,在控制台输入:grails create-app Contact Grails 会为我们创建一个名叫“Contact”文件夹,并在其中生成一个应用程序框架,生成的应用 程序目录结构如下: 表 1. Contact 应用文件目录结构 Contact + grails-app + conf 存放配置信息,包含数据源、应用程序启动时自动执行的类 ApplicationBootStrap.groovy, Url 映射配置 + controller 存放控制器(“MVC”的“C”) + domain 存放域类(“MVC”的“M“)

+ i18n 存放国际化资源文件 + services 存放service 类 + taglib 存放标签库类 + views 存放视图模版(“MVC”的V,每个控制器对应一个文件夹并存放在 Views 中,每个文件夹中会有多个GSP 页面) + layouts 存放布局模板 + grails-tests 存放测试代码 + hibernate 存放可选的其它Hibernate 配置文件 + lib 存放其它Jar 包(如JDBC 驱动等) + spring 存放可选的Spring 配置文件 + src + java 存放Java 源程序 + groovy 存放Groovy 源程序 + web-app + css 存放CSS 样式表 + images 存放图片文件 + js 存放JavaScript 文件 + WEB-INF 存放部署相关的文件 + index.gsp 应用程序的首页 从上述目录结构可以看出Grails 的“约定优于配置”设计理念,它约定了不同层次代码存放的位置以及项目的组织方式,这既提供了一种最佳实践,同时也节省了开发人员配置项目的精力。 添加Domain Class 接下来,为刚创建好的项目添加一些功能。首先创建两个Domain Class。前面说过,Domain Class 实质上是数据库表映射的实体类。通过控制台,进入项目的根文件夹(注意:本文出现一切 的控制台输入,除create-app 外,都需要在项目文件夹中执行),输入 grails create-domain-class Team 图 4. 创建Domain Class

grails用户登录示例

1、现在我们需要为系统设计一个登录页面,使得访问任何需要登录的页面时都会呈现以下 页面: 只有当用户登录成功后,才会跳转到先前要访问的页面。 2、新建域类LoginUser: LoginUser用于保存登录用户的相关信息,比如帐号和密码。 class LoginUser {//域:登陆用户 static constraints = { userId(length:6..8,unique:true)//帐号6-8位 password(length:6..8)//密码6-8位 name(nullable:false)//姓名不可为空 level(range:1..10)//用户级别分10级,够了吧? } String userId//用户名 String password//密码 String name//用户姓名 int level//用户权限级别 } 3、为系统配置一个默认的系统管理员: 打开grails-app/conf/BootStrap.groovy,编辑init闭包(我们可以利用init闭包在系统一启动时做一些初始化的工作): def init = { servletContext -> final String BACK_ADMIN='admin' if(!LoginUser.findByUserId(BACK_ADMIN)){ new LoginUser(userId:BACK_ADMIN,password:'admin88',name:'\u7BA1\u7406\u54 58',level:10).save() } } 这样,只要系统一启动,就会自动添加admin用户,这样无论系统中有没有录入一个用户,我们都有一个admin的管理员帐号可用。 4、新建登陆页面: 编辑grails-app/views/loginUser/login.gsp:

GORM使用技巧

目录 GORM的使用技巧 (2) 项目构建—得到源代码 (2) 概要: (2) Git素材: (2) 基本查询: (3) 通过ID查找一个Artist (3) 通过名字查找一个Artist (3) 通过Style和Home查找Artist (5) 通过style查询Artist (5) 通过特定的style获取匹配数据的个数 (7) 高级查询: (8) 查询Artist全部的style(distinct) (8) 查询每个style有多少work(group by) (8) 查询Artist的所有Work (10) 查询有5个work以上的Artist (11) 查询最老的Artist (12) 查询特定style最值钱的Work (13) 查询特定style,Work的平均价格 (14) 查询title中带有“moon”的所有work(like) (14) 总结: (15)

GORM的使用技巧 项目构建—得到源代码 概要: 基于最近我最好的员工—Credera的项目工作,我花费了很多时间在更新我以前在GORM上学过的技巧。其中一个最大的变化就是最新的版本用了where简化查询。我在一些案例中放弃了HQL查询,因为用where查询更加讲得通。 GORM的一些技巧证明了如何在Grails 2.0应用中更有效率地运用GORM持久化服务。GORM让简单的查询操作变得异常的轻松,但对于一个新的用户来说,当你想用GORM做一些用SQL语句很容易实现的操作时,你可能会处处碰壁。下面这些技巧将帮助你克服它并激励你放下SQL语句来进行查询。 Grails 2.0文档是每个人深入学习Grails的起点。它比1.x分支提升太多了,而且如果你认真阅读它,它确实能帮你解决很多问题。不过,它也有缺点,当你寻找你想要的或者某个特殊的查询操作的例子会比较麻烦。这些技巧是GROM查询章节的扩展,它将尝试着帮助你更好地理解它。 Git素材: 下面使用一个从GitHub上下载的简单Grails应用来作为我们查询操作的对象。这个应用定义了两个对象类并填入了一些采样数据进行使用。两个类分别是Artist.groovy和Work.groovy。 这两个类有一对多的关系,即一个Artist可以有多个work。它们的字段也特别简单:String , Integer和Date。每个类也都定义了一个简单的toString()方法,该方法返回对象的id

简单学籍管理系统

河南理工大学计算机学院网络工程课Grails程设计报告 题目简单学籍管理系统 学号310709040229 班级网络工程07-2班 姓名 指导老师冯文峰

Grails课程设计报告 摘要: Grails构建在开源技术如Spring、Hibernate和SiteMesh之上,提供了一个类似于Rails的平台可以与Java平台无缝集成的。但Grails比Rails具有更强的可像Java那样成熟的虚拟机,并且能够能够给企业级的服务提供成熟的支持。Grails也是构建在Groovy之上的,而Groovy是一种“动态”或指令语言。动态语言一般用来加速和简化程序撰写。与Python或Ruby等其他指令语言不同的是,用Groovy撰写的程序,可与Java虚拟器结合。 因此可以这样说,Grails=Groovy+Spring+Hibernate。 Grails有两个原则: 一是CoC:约定大于配置(Convention over Configuration 二是DRY:不要重复你自己(Don’t Repeat Yourself) 在这我将用Grails制作一个简单的表格,主题是同学录。 关键词:Grails MySQL学籍管理 一、简单学籍管理系统简介 前言:随着中国教育的逐步发展,各个学校在校全日制人数不断增加,这就导致旧制的纸质学籍登记不能满足要求,而电子信息的到来为此提供了解决方案,基于此特制作一个简单的学籍管理系统。 需要实现的功能: (1)管理员登录后,可对学籍列表进行增加、删除、查询、修改。 (2)普通用户可以浏览学籍数据,并查询。 (3)普通学生也可注册、加入学籍数据库中。 (4)普通用户无权对学籍数据库进行任何的增加、删除、查询、修改。 二、软件的安装调试 (1)把grails文件夹放在C盘下。 (2)安装java的jdk,将它默认装在C盘下。 (3)解压缩grails-1.3.2.rar文件到当前目录下 (4)配置环境变量: 本学籍管理系统并非按照传统命令行下制作而成,而是利用面向对象集成开发环境:intellij idea9.0.2根据本软件可以免去环境配置变量,但是基于grails开发,环境变量的配置很重要,所以这里再进行一次配置! 右击我的电脑—属性—高级—环境变量,在系统变量中按如下生成3个变量:Grails_home C:\Grails-1.3.2\bin\