Play Framework 框架 验证
- 格式:docx
- 大小:18.77 KB
- 文档页数:15
Java Web开发除了Spring框架外,还有许多其他常用的框架。
以下是一些在Java Web开发中常用的框架:1.Struts2:Struts2是Apache Struts的下一代产品,它是一个流行的JavaWeb应用框架,基于MVC设计模式。
Struts2提供了丰富的标签库和拦截器机制,简化了Web应用的开发过程。
2.JSF(JavaServer Faces):JSF是一个用于构建Web应用程序的Java标准框架,也是基于MVC设计模式的。
它提供了一个组件模型,用于构建用户界面,并支持事件驱动的编程模型。
3.Vaadin:Vaadin是一个用于构建Web应用程序的Java框架,它使用了一种不同的方法,即使用Java编写整个前端。
Vaadin提供了丰富的UI组件和布局管理器,使得开发者可以使用Java代码来创建具有丰富交互性的Web应用程序。
4.Play Framework:Play Framework是一个用于构建高性能Web应用程序的Java和Scala框架。
它提供了异步编程支持、模板引擎、ORM等功能,使得开发者能够快速地构建可扩展和响应迅速的Web应用。
5.Spark Java:Spark Java是一个轻量级的Java Web框架,它基于SparkEngine,提供了简单易用的API来构建Web应用程序。
Spark Java注重性能和简洁性,适合小型到中型项目的快速开发。
6.Grails:Grails是一个基于Java的Web应用程序框架,它使用Groovy编程语言。
Grails提供了快速开发和约定优于配置的开发方式,内置了许多常用功能和插件,使得开发者能够高效地构建Web应用。
这些框架各自具有不同的特点和优势,开发者可以根据项目的需求和团队的技能选择适合的框架进行开发。
hmi框架规则风格理念1. HMI框架是为了提供一种结构化的方法来设计和实现人机界面。
The HMI framework is designed to provide a structured approach to designing and implementing human-machine interfaces.2.在HMI框架中,规则起着至关重要的作用,它们确保了界面的一致性和可靠性。
Rules play a crucial role in the HMI framework, ensuring consistency and reliability of the interface.3.风格是HMI框架的一个核心组成部分,它定义了界面的外观和行为。
Style is a core component of the HMI framework, defining the appearance and behavior of the interface.4. HMI框架的理念是通过简化和标准化界面设计,提高用户体验和工作效率。
The philosophy of the HMI framework is to improve user experience and work efficiency through simplifying and standardizing interface design.5.在HMI框架中,规则的制定是基于用户需求和行业标准的。
In the HMI framework, the rules are developed based on user needs and industry standards.6.风格的选择应当根据应用背景和用户群体来进行调整。
The selection of style should be adjusted according to the application context and user group in the HMI framework.7. HMI框架的理念是让用户能够快速上手,并且在系统操作中少犯错误。
Play Framework Web开发教程(1):概述及环境安装Play Framework 基于Akka(并行应用开发包,这个开发包的一个显著特定是基于Actor模型,并行运算是这个某些的基本特点,可以避免由于一般多线程开发不正确使用同步或互锁造成的程序死锁等问题)。
采用MVC模型(非常类似于 MVC4),缺省支持REST和JSON,支持编译CoffeeScript和LESS代码。
支持数据库编程,并且可以和Slick(类似于LINQ的数据库接口)。
开发可以使用Eclipse ,Intellij IDEA或是Sbt(Typesafe 自带的编译工具)。
本教程采用Eclipse 开发环境配合sbt 工具开发。
下面简单介绍一下Play Framework开发环境的搭建,(Windows开发环境)。
1首先需要安装Java SDK,建议安装最新版Java SDK ,64位系统安装64位Java SDK。
2安装Scala编译工具sbt .3安装Scala开发环境4安装Scala IDE for Eclipse5下载解压Play Framework,目前版本为2.1.3安装好之后,注意把这些命令行所在的目录添加的系统环境变量PATH中,然后到到命令行中执行play new myFirstPlayApp在提示选择语言(Java或Scala)选择Scala然后进入新创建myFirstPlayApp ,运行play run ,如果编译成功,将显示下面类似的消息,表示新创建的Web应用运行在端口9000打开浏览器输入地址http://localhost:9000,如果显示如下页面,将表示开发环境已经就绪,后面文章将介绍这个例子。
相信Scala 语言会逐渐普及开来,Play Framework 也会得到广泛的应用,目前使用Play Framework的一些著名网站有Linked In 等Play Framework Web开发教程(2): Play 应用目录解析Play Framework Web开发教程(1):概述及环境安装创建了一个新的应用,它的目录结构如下:Play应用标准的目录结构app → 应用的源码└ assets → 可以编译的Asset源码└ stylesheets → 通常为Less代码└ javascripts → 通常为CoffeeScipts代码└ controllers → 应用的controllers类定义└ models → 应用的Model类定义└ views→ UI模板conf → 配置文件└ application.conf → 主应用配置文件└ routes → 路由定义public → 公开的Asset定义└ stylesheets → CSS文件└ javascripts → Javascript文件└ images → Image文件project → sbt配置文件(用来编译项目)└ build.properties → sbt 项目属性定义└ Build.scala → 应用编译脚本定义└ plugins.sbt → sbt插件定义lib → 应用使用的库文件(不由sbt管理的其它库)logs → 日志目录└ application.log → 缺省的应用日志文件target → 编译生成的文件目录└ scala-2.10.0└ cache└ classes → 编译过的class文件└ classes_managed → Managed class 文件 (模板等, ...)└ resource_managed → Managed 资源(less, ...)└ src_managed → 生成的源码(模板, ...)test → 单元测试或功能测试代码目录app目录app目录包含了所有可运行代码或资源:Scala代码,UI模板和Less代码,CoffeeScript代码, app通常包含下面三个子目录:对于与MVC的三个部分:•app/controllers•app/models•app/views当然你可以添加你自己的目录,比如app/utils。
CURD:管理员的生成器CRUD: Administration generatorCURD(增加,读取,更新,删除)模块生成一个完全可用的web接口为你的JPA 模型对象。
The CRUD (Create, Read, Update, Delete) module generates a fully usable web interface for your JPA Model objects.让我们看一个简单的例子。
Let's see a simple example.为应用激活CURD模块Enable the CRUD module for the application在/conf/application.conf,文件中,使用下面一行配置激活CURD模块In the **/conf/application.conf** file, enable the CRUD module by adding this line:# The crud modulemodule.crud=${play.path}/modules/crud引入默认的CURD路由Import default CRUD routes在conf/routes文件中,增加下面一行导入默认的模块路由In the **conf/routes** file, import the default module routes by adding this line:# Import CRUD routes* /admin module:crud不推荐直接使用默认的路由,你可以定义你自己的路由,或者混合使用两者p(note). **Note** that using the default routes file is not required. You can also define your own routes, or mix the two.增加一个User类Create a User class我们从创建一个User类开始We will start by creating a User class:package models;import play.*;import play.db.jpa.*;import javax.persistence.*;import java.util.*;@Entitypublic class User extends Model {public String name;public String email;public String address;}增加一个Users控制器Create the Users controller然后我们创建一个简单的控制器,只是继承与CURD控制器Then, we create a simple controller that just inherits the CRUD controller.package controllers;public class Users extends CRUD {}现在打开http://localhost:9000/admin然后你可以看到管理员的界面Now open"http://localhost:9000/admin":http://localhost:9000/admin and you should see the User admin area.!images/crud1!控制器的类名必须是一个模型类名+'s',如果你想使用其他的名字,只需要使用一个注解The controller's class name has to be the model class name with a final 's'. If you want to name it differently, you can do it using an annotation.package controllers;@CRUD.For(User.class)public class AdminUsers extends CRUD {}User 表单The User form点击增加按钮,你应该看到一个User表单Click the **Add** button, and you should see the User form. !images/crud2!现在我们给User类增加一些验证规则Now we can add some validation rules to the User class: package models;import play.*;import play.db.jpa.*;import javax.persistence.*;import java.util.*;import play.data.validation.*;@Entitypublic class User extends Model {@Required@MinSize(8)public String name;@Required@Emailpublic String email;@Required@MaxSize(1000)public String address;public String toString() {return email;}}刷新User表单,你可以看到验证已经自动起作用了。
代码自动生成框架
代码自动生成框架是一种工具,它可以根据已有的设计或规范,自动生成源代码或其它类型的代码。
这种框架通常用于减少手动编写重复性代码的工作量,提高开发效率。
以下是一些常见的代码自动生成框架:
1. Django-CMS: 这是一个内容管理系统,可以自动生成基于CMS 的网站。
2. JHipster: 这是一个用于生成Spring Boot + Angular/React/Vue 应用的框架。
3. Yeoman: 这是一个通用的代码生成器,可以生成各种类型的前端项目。
4. Spring Roo: 这是一个快速应用开发工具,可以快速生成Spring 应用。
5. CakePHP: CakePHP 是一个快速、简单和可靠的PHP框架,它有一个代码生成器,可以快速生成CRUD应用。
6. Play Framework: Play Framework 是一个全栈的、反应式的、无状态的Java和Scala框架,它有一个代码生成器,可以快速生成应用。
7. CodeSmith Generator: 这是一个商业的代码生成器,支持多种语言和数据库。
8. RoboMongo: 这是一个用于MongoDB的shell,支持代码生成。
9. Hibernate Tools: 这是一个用于Hibernate的代码生成器,可以
生成实体类和映射文件。
10. Entity Framework Power Tools: 这是一个用于Entity Framework的代码生成器,可以生成实体类和数据库迁移文件。
一、安装1.先下载playFramework1.3.4版本2.解压playFramework1.3.43.配置playFramework1.3.4的环境。
在windows的高级系统设置--高级--环境变量把解压的路径复制到PATH环境变量里4.安装jdk1.6以及以上的版本,配置环境:JAVA_HOME=C:\Program Files\Java\jdk1.7.0_805.PATH=;%MAVEN_HOME%\bin6.Cmd命令运行play help 看看play是否安装成功。
输入Javac 看看是否按照成功,如果按照成功。
二、建立项目1.成功之后使用(play new 项目名称)命令创建一个项目2然后使用play run运行项目。
你可以用浏览器访问http://localhost:9000 并看到应用的默认页面3.如果你要生成eclipse项目你需要运行命令:play eclipsify 项目名称4.执行上面命令之后,你就可以导入项目到eclipse工作台中。
5.Play 目录结构:App/ 包含应用程序的核心、模型、控制器、视图结构Conf/ 只有包含应用的配置文件,主要的是application.conf、routes两个文件Lib/ 资源库Public/公共资源,包含css/javascript/img等资源Test/ 测试三、添加CRUD1.在conf/application.conf 文件中添加module.crud=${play.path}/modules/crud2.然后在conf/route文件中添加* / module:secure3.在conf/dependencies.yml文件中添加require:- play- play -> crud4.运行play dependencies 命令5.运行play eclipsify命令(ps:因为我使用的是eclipse平台所以运行此命令编译,如果是启用的的平台请使用相对应的编译命令)6.在eclipse平台刷新项目7.其他的导入也和导入CRUD操作一样四、MAVEN的使用1.下载好maven包,进行解压2.配置maven 环境变量MAVEN_HOME=D:\apps\mavenPATH=;%MAVEN_HOME\bin%3.检测maven是否生效,然后运行play install maven命令4.执行完后,修改conf/dependencies.yml,在里面添加-play -> maven head5.然后运行play dependencies命令6.重新运行play eclipsify命令7.使用Play mvn:init创建pom.xml文件五、模块化============================禁用忽略包的方式有三种===========================================1. You can disable transitive dependencies for a particular dependency:# Application dependenciesrequire:- play 1.2- com.google.guava -> guava r07:transitive: false2. You can disable transitive dependencies for the whole project:# Application dependenciestransitiveDependencies: falserequire:- play 1.2- com.google.guava -> guava r073. You can exclude any specific dependency explicitely:# Application dependenciesrequire:- play 1.2- com.google.guava -> guava r07:exclude:- com.google.code.findbugs -> *=========================外包应用的三种模式================================1.第一种# Application dependenciesrequire:- play 1.2- com.google.guava -> guava r07:transitive: false- commons-lang 3.0:force: true- com.zenexity -> sso 1.0# My custom repositoriesrepositories:- zenexity:type: httpartifact: "http://llocalhost:端口号/repo/[module]-[revision].[ext]"contains:- com.zenexity -> *第二种You can also add maven2-compatible repositories using the iBiblio type, like this: # Application dependenciesrequire:- play- play -> scala 0.8- org.jbpm -> jbpm-persistence-jpa 5.0.0:exclude:- javassist -> javassist *- org.hibernate -> hibernate-annotations *- javax.persistence -> persistence-api *repositories:- jboss:type: iBiblioroot: "http://llocalhost:端口号/nexus/content/groups/public-jboss/"contains:- org.jbpm -> *- org.drools -> *第三种:require:- play- customModules -> 模块名称和版本号(ps:firstmodule 0.1模块是firstmodule 然后版本号是0.1。
Java Web框架的选择与应用实战随着互联网技术的飞速发展,Web应用成为了当今互联网世界中的重要组成部分。
而在Web开发中,框架的作用越来越被人们所重视。
Java作为一门广泛应用于Web开发领域的编程语言,也涌现出了一批优秀的Web框架,如Spring MVC、Struts2等。
本文将就Java Web框架的选择与应用实战进行探讨。
一、Web框架的选择在选择Java Web框架时,除了要考虑自身的开发能力、需求以及项目特点外,还需要考虑框架的性能、安全性、稳定性等方面。
下面对几种常见的Java Web框架进行简单的介绍和评价,以供参考。
1. Spring MVCSpring MVC是一个模块化的Web应用框架,是基于Spring Framework的一个子框架,它支持多种视图技术,可用于开发RESTful Web应用和基于服务的Web应用。
该框架易于使用、扩展性强、提供了很好的测试支持,但也存在着过于复杂、学习曲线较陡峭等缺点。
2. Struts2Struts2是一个基于MVC模式的Web应用框架,它是Struts框架的后续版本。
该框架提供了大量的标签库支持,可以方便地实现各种表单操作。
它易于使用、对XML文件配置的支持逐渐减少,但也存在着减速代码的臃肿、性能不如其他框架等缺点。
3. Play FrameworkPlay Framework是一个开源的高度可扩展的Web应用框架,它采用了异步编程的方式,支持Java和Scala两种编程语言。
Play Framework使用了一种独特的路由机制,可以极其方便地实现URL路由。
它快速上手,性能优异,但也存在着不太适合大型项目、文档不太全面的缺点。
二、应用实战在选择了适合自己的Java Web框架后,我们需要在具体项目中进行实际应用。
下面以Spring MVC框架为例,介绍其在开发一个Web应用中的具体应用实战。
1. 搭建Maven工程Maven是一个强大的项目管理工具,我们可以使用它来构建一个Spring MVC的工程。
使用Play验证HTTP数据Validating HTTP data with Play验证确保数据有确定的值,或者符合某种特殊的需求,你可以在模型被保存进数据库之前使用验证去核实你的模型,或者直接在HTTP参数中使用它们去验证一个简单的form表单。
Validations ensure that the data has certain values or meets specific requirements. You can use validation to verify that your models are correct before saving them to the database, or use them directly on HTTP parameters to validate a simple form.它们怎样工作?How does it work?每一次的请求使用它自己的验证去收集错误。
在控制器里,你可以直接使用Validation变量,你也可以直接访问play.data.validation.Validation类下的API中的静态方法。
Each request has it own **Validation** object which collects errors. From a controller, you access it directly using the **validation** variable. You can still access a subset of the AP I using the **play.data.validation.Validation** class’ static methods.验证对象包含一个集合play.data.validation.Error对象,每一个错误有2个属性。
The validation object maintains a collection of**play.data.validation.Error** objects. Each error has two properties:key,它帮助你决定哪一个数据项引发的错误,key的值可以被定义但是当Play 产生错误时,它使用默认的约定,遵循Java变量的名称。
框架保护动作原理框架保护动作是指在软件体系结构中,为了确保系统的安全性和可靠性,采取的一系列措施来保护框架免受潜在的威胁和攻击。
下面我将介绍框架保护动作的原理。
1.认证与授权:框架通过认证和授权机制来确保只有经过身份验证的用户才能访问和执行相关操作。
认证过程验证用户的身份信息,以确保其合法性;授权机制则控制用户在系统中的权限和可操作范围,防止未授权的访问和操作。
2.输入校验与过滤:框架对用户输入的数据进行校验和过滤,防止恶意的输入攻击,例如注入攻击、跨站脚本攻击等。
输入校验与过滤能够防止恶意用户利用输入数据篡改系统状态或获取敏感信息。
3.会话管理:框架通过会话管理机制来跟踪和管理用户的会话状态。
这包括用户登录、登出、会话过期等操作。
通过合理设置会话过期时间、使用安全的会话标识符和对会话数据的加密存储,可以有效防止会话劫持和会话固定攻击。
4.异常处理与日志记录:框架通过合理的异常处理机制来捕获和处理程序中的异常,避免意外错误的发生并减少对系统的影响。
同时,框架还对异常进行详细的日志记录,以便追踪和排查问题,并提供对系统运行情况的监控和分析。
5.加密与解密:框架使用加密算法对敏感信息进行加密存储和传输,以保证信息的机密性和完整性。
同时,也能够通过相应的解密算法对加密数据进行解密,以便进行合法的处理和使用。
6.安全配置:框架提供了一系列安全配置选项,通过合理配置可以提供更高的安全性。
例如禁用或限制访问敏感目录、文件和资源、使用合适的安全协议和算法、配置有效的防火墙和入侵检测系统等。
7.安全审计和监控:框架支持对系统进行安全审计和监控,包括记录用户操作日志、监控系统运行状态和性能等。
通过安全审计和监控可以及时发现并应对潜在的安全威胁和漏洞,提高系统的安全性和可靠性。
总结起来,框架保护动作的原理在于通过一系列的技术和机制,包括认证与授权、输入校验与过滤、会话管理、异常处理与日志记录、加密与解密、安全配置以及安全审计和监控等,来保护框架免受潜在的安全威胁和攻击。
使用Play验证HTTP数据Validating HTTP data with Play验证确保数据有确定的值,或者符合某种特殊的需求,你可以在模型被保存进数据库之前使用验证去核实你的模型,或者直接在HTTP参数中使用它们去验证一个简单的form表单。
Validations ensure that the data has certain values or meets specific requirements. You can use validation to verify that your models are correct before saving them to the database, or use them directly on HTTP parameters to validate a simple form.它们怎样工作?How does it work?每一次的请求使用它自己的验证去收集错误。
在控制器里,你可以直接使用Validation变量,你也可以直接访问play.data.validation.Validation类下的API中的静态方法。
Each request has it own **Validation** object which collects errors. From a controller, you access it directly using the **validation** variable. You can still access a subset of the API u sing the **play.data.validation.Validation** class’ static methods.验证对象包含一个集合play.data.validation.Error对象,每一个错误有2个属性。
The validation object maintains a collection of**play.data.validation.Error** objects. Each error has two properties:key,它帮助你决定哪一个数据项引发的错误,key的值可以被定义但是当Play 产生错误时,它使用默认的约定,遵循Java变量的名称。
* The **key**. This helps you to determine which data element caused the error. The key value can be set arbitrarily but when Play generates errors, it uses default conventions that follow the Java varia bles’ names.message,它包含了错误的文字描述,message可以是文本信息,或者从错误集合里(典型的是为了国际化支持)参考一个key。
* The **message**. This contains the error’s textual description. The message can be a plain message or refer to a key from a message bundle (typically for internationalization support).下面我们看一下怎样去验证一个简单的HTTP参数。
Let’s see how to validate a simple HTTP parameter:public static void hello(String name) {validation.required(name);...}这段代码检查name变量被正确的设置了,如果不是的话,相应的信息会被增加到当前的错误集合中去。
This code checks that the name variable is correctly set. If not, the corresponding error is added to the current errors collection.你可以重复这个操作去验证每一个你需要的变量。
You can repeat this operation for each validation you need:public static void hello(String name, Integer age) {validation.required(name);validation.required(age);validation.min(age, 0);...}重新得到错误信息Retrieving error messages在每一个验证结束,你可以检查是否错误都被创建并显示出来了。
At the end of the validation you can check if any errors have been created and display them:public static void hello(String name, Integer age) {validation.required(name);validation.required(age);validation.min(age, 0);if(validation.hasErrors()) {for(Error error : validation.errors()) {System.out.println(error.message());}}}假设name和age是null,那么将会显示出:Assuming that name and age are null, this would display:name is requiredage is required默认的消息是key和message集合中key一致的,所以在conf/messages 文件中你可以看到:Default messages are keys that refer to the message bundle. So in the **conf/messages** file you will have:validation.required=%s is required你可以改变这些默认的消息,然后再每一个项目中覆盖它,%s占位符会被错误的key所替代,你可以使用error.message(String field)方法覆盖它。
You can change this default message and override it for each application language. The **%s** placeholder will be replaced by the error key. You can override using the**error.message(String field)** method.例如:For example:Error error = validation.required(name).error;if(error != null) {System.out.println(error.message("The name"));}你还可以为每一次检查明确指定不同的信息。
You can also specify a different message for each check:Error error = validation.required(name).message("Fill the name!").error;if(error != null) {System.out.println(error.message());}再模板中显示错误信息Displaying errors in the template再大多数情况下,你想让错误消息显示在视图模板中,你可以在模板中使用errors对象使用它们,一些tag帮助你显示这些错误。
In most cases you want to display the error messages in the view template. You can access them in the template using the **errors** object. Some tags help you to display the errors:让我们看个例子。
Let’s see a sample:public static void hello(String name, Integer age) {validation.required(name);validation.required(age);validation.min(age, 0);render(name, age);}现在是模板。
and now the template:#{ifErrors}<h1>Oops...</h1>#{errors}<li>${error}</li>#{/errors}#{/ifErrors}#{else}Hello ${name}, you are ${age}.#{/else}但是在实际的应用中,你想显示原先的form表单。
所以你将有2个action,显示form表单,还要处理POST。
But in a real application you want to redisplay the original form. So you will have two actions: one to display the form and another one to handle the POST.当然如果有错误发生的话你需要重新跳转到第一个action,但是验证会发生在第二个action中,这样你需要一些小技巧在跳转之前保持错误信息。
使用validate.keey()方法,它可以为下个action保存错误集合。
Of course the validation will occur in the second action and if some error occurs you will have to redirect to the first action. In this case you need a special trick to keep your errors during the redirect. Use the **validation.keep()**method. This will save the errors collection for the next action.让我们看一个真实的例子。