`

玩转play framework ( by quqi99 )

 
阅读更多

玩转play framework ( by quqi99 )

作者:张华 发表于:2011-04-06
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

p { margin-bottom: 0.21cm; }h1 { margin-bottom: 0.21cm; }h1.western { font-family: "Arial",sans-serif; font-size: 16pt; }h1.cjk { font-family: "宋体"; font-size: 16pt; font-style: normal; font-weight: bold; }h1.ctl { font-family: "Tahoma"; font-size: 16pt; font-weight: bold; }h2 { margin-bottom: 0.21cm; }h2.western { font-family: "Arial",sans-serif; font-size: 14pt; font-style: italic; }h2.cjk { font-family: "宋体"; font-size: 14pt; font-style: italic; }h2.ctl { font-family: "Tahoma"; font-size: 14pt; font-style: italic; }pre { font-family: "Courier New",monospace; }h3 { margin-bottom: 0.21cm; }h3.western { font-family: "Arial",sans-serif; }h3.cjk { font-family: "宋体"; font-style: normal; }h3.ctl { font-family: "Tahoma"; }a:link { color: rgb(0, 0, 255); }



内容目录

1 开发环境构建 1

1.1 下载二进制发布包 1

1.2 创建应用 1

1.3 集成eclipse 2

2 Hello World 2

3 Play 程序开发 3

3.1 视图层 3

3.1.1 模板元素 3

3.1.2 模板继承 3

3.2 控制层 3

3.3 模型层 4

3.4 无状态的体系结构 4

3.5 任务调度 5

3.6 支持non-web 应用 5

3.7 支持CRUD 应用 8

3.8 支持安全 9


1 开发环境构建

1.1 下载二进制发布包

http://download.playframework.org/releases/play-1.2.1.zip

下载完后解压,例如我解压的目录是: /home/workspace/play-1.2.1

1.2 创建应用

zhanghua:play-1.2.1 root# ./play new QATool

~ _ _

~ _ __ | | __ _ _ _| |

~ | '_ /| |/ _' | || |_|

~ | __/|_|/____|/__ (_)

~ |_| |__/

~

~ play! 1.2.1, http://www.playframework.org

~

~ The new application will be created in /home/workspace/play-1.2.1/QATool

~ What is the application name? [QATool]

~

~ OK, the application is created.

~ Start it with : play run QATool

~ Have fun!

~

zhanghua:play-1.2.1 root# ./play run QATool

~ _ _

~ _ __ | | __ _ _ _| |

~ | '_ /| |/ _' | || |_|

~ | __/|_|/____|/__ (_)

~ |_| |__/

~

~ play! 1.2.1, http://www.playframework.org

~

~ Ctrl+C to stop

~

Listening for transport dt_socket at address: 8000

10:44:48,951 INFO ~ Starting /home/workspace/play-1.2.1/QATool

10:44:49,774 WARN ~ You're running Play! in DEV mode

10:44:49,876 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...

这时,你能在浏览器上访问 http://localhost:9000 验证

1.3 集成 eclipse

zhanghua:play-1.2.1 root# ./play eclipsify QATool

然后,能过 File/Import/General/Existing project… QATool 应用导入到 eclipse 中。

其次,要安装 Eclipse 插件,在 support/eclipse/ 目录下,要安装它,只需将你在该目录下找到的 JAR 文件,简单地复制到 Eclipse 安装目录的 dropins 文件夹下。

说明一下, eclipsify 命令生成若干个应用程序的启动器( launcher ),主启动器( main launcher )只能通过 Eclipse Run As 命令使用。可以随时通过 Debug As 启动一个调试会话,然后使用 Connect JPDA launcher ,停止调试会话并不会导致服务器终止。如果你对应用程序做了任何重要的修改,如改变 classpath ,则需要使用 eclipsify 重新生成 Eclipse 配置文件。

在调试时,首先用 ./play run QATool 命令启动应用 ; 然后连接 JPDA 调试器即可。

在启动应用时,也可以先将所有 conf 目录、应用本身的 JAR 包、及 play 本身的 JAR 包加到环境变量后再执行下列命令即可 ( 通过 run as 启动,而不是 debug as)

java -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

-Dapplication.path="${project_loc:QATool}"

-javaagent:"/home/workspace/play-1.2.1/framework/play-1.2.1.jar"

play.server.Server

2 Hello World

  1. vim app/views/Application/index.html

#{extends 'main.html' /}

#{set title:'Home' /}

#{if flash.error}

< p style =" color : #c00 " >

${flash.error}

</ p >

#{/if}

< form action = "@{Application.sayHello()}" method = "GET" >

< input type = "text" name = "myName" />

< input type = "submit" value = "Say hello!" />

</ form >

2 vim app/controllers/Application.java 添加一方法:

public static void sayHello( @Required String myName) {

if ( validation . hasErrors ()) {

flash .error( "Oops, please enter your name!" );

index ();

}

render (myName);

}

3 vim app/views/Application/sayHello.html

#{extends 'main.html' /}

       #{set title:'Home' /}


 

       <h1>Hello ${myName ?: 'guest'}!</h1>


 

       <a href="@{Application.index()}">Back to form</a>

3 Play 程序开发

3.1 视图层

3.1.1 模板元素

Play 框架的模板技术使用的是 Groovy 语言。在模板中可以使用的动态元素如下说明:

${...} 用来对一个表达式求值,如 ${note.title} 是指取 note 对象的 title 属性。

@{...} @@{...} 是指 JAVA 端控制器动作方法的相对 URL 及绝对 URL

&{...} 用来显示经国际化之后的消息内容。

*{...}* 注释

%{...}% 用来添加复杂的 Groovy 脚本,可以声明变量和添加语句。

#{...} 用来调用 Play 框架或自定义的标签。


举个例子,如对 topics 变量进行循环迭代,则用 Groovy 模板,如下:

%{ for(topic in topics){ }%

<td> ${topic.id} </td>

%{ } }%

3.1.2 模板继承

Play 框架中可以使用 #{extends} #{doLayout} 来实现模板之间的继承。

在父模板中可以包含任意的内容。在需要由子模板填充的位置,使用 #{doLayout /} 进行声明即可。在子模板中通过 #{extends} 来声明所继承的模板。如 #{extends 'main.html'} 就声明继承自模板 main.html 。当子模板被生成之后,将包含父模板中的内容。而子模板中只需要定义扩展的内容即可。

3.2 控制层

在控制层的动作方法完成了与业务逻辑相关的处理之后,需要把响应返回给客户端。响应的结果可能是正确完成,也可能是出现错误。 Play 框架提供了方便的实现用来返回不同类型的响应。使用 play.mvc.Controller 类提供的不同方法就可以生成这些响应内容。

  • 请求正确完成, HTTP 状态代码为 200 。使用 ok() 方法生成不带内容的响应。使用 render() 方法来生成使用模板的响应。使用 renderText() 方法生成 text/plain 类型的纯文本响应。使用 renderXml() 方法生成 text/xml 类型的 XML 格式的响应。使用 renderJSON() 方法生成 application/json 类型的 JSON 格式的响应。使用 renderBinary() 方法生成二进制内容的响应。

  • 跳转到新的页面, HTTP 状态代码为 3XX 。使用 redirect() 方法来跳转到新的 URL 。使用 notModified() 方法来返回状态代码 304

  • HTTP 状态代码 4XX 。使用 unauthorized() 方法返回状态代码 401 。使用 forbidden() 方法返回状态代码 403 。使用 notFound() 方法返回状态代码 404

  • 服务器内部错误, HTTP 状态代码 5XX 。使用 error() 方法返回状态代码 500


3.3 模型层

领域对象的实例一般需要持久化下来。最常见的持久化方式就是使用关系数据库。 Play 框架使用 JPA 规范来进行领域对象的持久化。具体的后台实现使用的是 Hibernate 。开发人员只需要使用 JPA 规范定义的标注,就可以声明领域的持久化行为。比较好的做法是将领域对象类继承自 Play 框架提供的 play.db.jpa.Model 类。 play.db.jpa.Model 类提供了一个域 id 作为对象的标识符,也是对应的数据库表中的主键。 play.db.jpa.JPASupport 类是 play.db.jpa.Model 的父类,提供了一些实用方法用来完成从领域对象到数据库之间的映射。

举些例子:

1 )分页查询:

List<Content> list = Content. find ( " status=? order by id asc" , status).from(startPos).fetch(pageSize);

2 )查询数目

Content. count ( "status = ?" , status);

3 )保存 user.save();

4 )更新

User user = Dao. findByUsername ( "quqi99" );

user.setPassword( "111111" );

user.save();

可参考:
Play!
连接
MySQL
配置



 
http://c4fun.iteye.com/blog/506959



 

http://www.playframework.org/documentation/1.1.1/jpa



 

3.4 无状态的体系结构

HTTP 协议本身就被设计成无状态的,采用请求 / 响应的模式。不同的请求之间并不存在相互关系。但是这种架构模式在开发某些 Web 应用的时候不是很方便。有些应用要求用户进行认证登录之后才能进行某些操作。同样的 URL ,认证和未认证用户看到的内容是不同的。而且用户认证成功之后,他应该在一段时间内保持这种认证状态。否则的话,用户每次都需要输入用户名和密码才 能访问受限的内容。对于这种情况,很多 Web 开发框架提供了会话的支持,允许应用保存一些与会话相关的数据。 Java Servlet 规范中的 javax.servlet.http. HttpSession 就是一种会话的接口。应用的服务器会负责维护每个会话相关的数据。这些数据可以通过一个会话 ID 来进行标识。这个标识会利用浏览器的 cookie 机制保存在浏览器端,也可以作为请求 URL 的参数来传递。服务器端通过此标识来识别每个会话。在处理相应的请求的时候,就可以根据会话 ID 来获取保存在服务器端上的会话数据。会话机制的问题是会影响应用的可伸缩性。如果一个应用使用多台服务器的话,就需要额外的机制来保证同一用户在不同机器 上面的会话是同步的。而无状态的实现 则不存在这个问题,对于某一个请求,由不同机器来处理的结果都是相同的。

Play 框架的设计架构就是无状态的。它没有提供服务器端的机制用来维护跨多个请求的数据。如果确实需要保存这样的数据的话,可以考虑下面几种方案:

  • 保存在 Session Flash 作用域中。 Play 框架中仍然有会话的机制,但是并没有提供在服务器端保存会话数据的能力。会话数据是保存在浏览器的 cookie 中的,由浏览器在每次请求的时候自动发送。通过这种方式来达到维护会话数据的目的。 由于会话数据是保存在 cookie 中,其大小是有限制的,一般不能超过 4K 字节,而且只能保存字符串类型的数据。 Flash 作用域和会话一样,也是通过 cookie 来保存的。所不同的是, Flash 作用域中的数据只在下次请求中是有效的。

  • 保存在持久化的数据存储中,如数据库中。如果需要在多个请求中使用同一个领域对象的话,可以把这个对象的 ID 保存在 Session Flash 作用域中,而在控制器动作方法中使用此 ID 来从数据库中查询相应的对象。

  • 保存在暂时性数据存储中,如缓存中。 Play 框架内置了缓存的支持,通过调用类 play.cache.Cache 就可以对缓存进行操作。与使用持久化存储类似,缓存中的键的值可以保存在 Session Flash 作用域中。

对于熟悉了 Java Servlet 规范的开发人员来说,需要一些时间来适应 Play 框架的这种无状态的体系结构。不过这种结构对于应用的可伸缩性来说,确实是非常有好处的。

3.5 任务调度

Web 应用开发中,有时候会需要定期执行一些调度任务,比如数据库备份和数据同步等。这些任务不是通过 HTTP 请求来触发的,而是定时执行的。 Play 框架提供了内置的任务调度支持的能力。创建新任务的时候,只需要继承自 play.jobs.Job 类,并覆写 doJob() 方法即可。如果要创建的任务有返回结果的话,覆写 doJobWithResult() 方法即可。任务创建完成之后,可以选择不同的调度方式。一种方式是在应用启动的时候执行一次。只需要在任务的 Java 类上添加标注 @OnApplicationStart 即可。对于定期执行的任务, Play 框架提供了两个标注:一个是 @Every ,用来按照固定的时间间隔调度任务,如 @Every("1h") 声明任务每个小时执行一次;另外一个是 @On ,用来声明描述调度策略的 CRON 表达式。

3.6 支持 non-web 应用

对于 non-web 应用,如果想要重要模型层的话,可用如下代码:

package nonwebapp;

import java.io.File;

import java.lang.reflect.Method;

import java.util.List;

import models.Content;

import play.Play;

import play.db.DBPlugin;

import play.db.jpa.JPAPlugin;

import play.test.Fixtures;

/**

*

* author: huazhang since : 2011 - 6 - 21

*/

public abstract class PlayLoaderMain

{

public static void main(String[] args) throws Exception

{

try

{

String appPath = "/home/workspace/play-1.2.1/QATool" ;

File root = new File(appPath);

Play. init (root, System. getProperty ( "play.id" , "" ));

Thread. currentThread ().setContextClassLoader(Play. classloader );

Class<?> c = Play. classloader .loadClass( "nonwebapp.BuildAccounts" );

Method m = c.getMethod( "run" );

m.invoke(c.newInstance());

} catch (Exception e)

{

e.printStackTrace();

}

}

public void run() throws Exception

{

new DBPlugin().onApplicationStart();

new JPAPlugin().onApplicationStart();

JPAPlugin. startTx ( true );

exec();

JPAPlugin. closeTx ( false );

}

public abstract void exec() throws Exception;

}



package nonwebapp;

import java.util.List;

import models.Content;

/**

*

* author: huazhang since : 2011 - 6 - 22

*/

public class BuildAccounts extends PlayLoaderMain

{

@Override

public void exec() throws Exception

{

List<Content> list = Content. findAll ();

System. out .println( "" );

}

}

再写个脚本调用它,脚本中加环境变量

#!/bin/bash

# huazhang

# 2011-06-28

#

# resolve links - $0 may be a softlink

THIS="$0"

while [ -h "$THIS" ]; do

ls =` ls - ld "$THIS"`

link=` expr "$ ls " : '.*-> /(.*/)$'`

if expr "$link" : '.*/.*' > / dev /null; then

THIS="$link"

else

THIS=` dirname "$THIS"`/"$link"

fi

done

# some directories

THIS_DIR=` dirname "$THIS"`

QATOOL_HOME=` cd "$THIS_DIR" ; pwd `

PLAY_HOME=` cd "$QATOOL_HOME/.." ; pwd `

if [ $# - lt 1 ] ; then

echo "USAGE: $0 class"

echo " e.g.: $0 nonwebapp.ImportData"

exit 1;

fi

if [ "$JAVA_HOME" = "" ]; then

echo "Error: JAVA_HOME is not set."

exit 1

fi

JAVA=$JAVA_HOME/bin/java

JAVA_HEAP_MAX=-Xmx1000m

for f in ${PLAY_HOME}/framework/*.jar; do

CLASSPATH=${CLASSPATH}:$f;

done

for f in ${PLAY_HOME}/framework/ lib /*.jar; do

CLASSPATH=${CLASSPATH}:$f;

done

if [ -d "${QATOOL_HOME}/ conf " ]; then

CLASSPATH=${CLASSPATH}:${QATOOL_HOME}/ conf

fi

for f in $QATOOL_HOME/ lib /*.jar; do

CLASSPATH=${CLASSPATH}:$f;

done

if [ -d "${QATOOL_HOME}/ tmp /classes" ]; then

CLASSPATH=${CLASSPATH}:${QATOOL_HOME}/ tmp /classes

fi

# default log directory & file

if [ "$QATOOL_LOGFILE" = "" ]; then

QATOOL_LOGFILE="$QATOOL_HOME/logs/QATool.log"

fi

if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then

QATOOL_OPTS="$QATOOL_OPTS -Djava.library.path=$JAVA_LIBRARY_PATH"

fi

# run it

JAVA_OPTS="-server -Xms1600m -Xmx1600m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true"

exec "$JAVA" $QATOOL_OPTS - classpath "$CLASSPATH" "$@"

3.7 支持 CRUD 应用

1) vim application.conf

# Import the crud module

module.crud =${play.path}/modules/crud

2) vim routes

# Import CRUD routes

* /admin module:crud

3) 改动了配置,要重新运行下列命令:

zhanghua:play-1.2.1 root# ./play eclipsify QATool

4) 新建 Control

package controllers;

/**

*

* author: huazhang

* since : 2011 - 6 - 27

*/

public class Users extends CRUD

{

}

5) 新建 Model

/**

*

* author: huazhang

* since : 2011 - 6 - 27

*/

@Entity

public class User extends Model

{

@Email

@Required

@MaxSize (256)

public String username ;

@Required

public String password ;

@Required

public String role ;

  1. 启动后访问 http://localhost:9000/admin 即可

7) 客户化字符串 , vim conf/messages, 添加:

username= 用户名

password= 密码

role= 角色

8) 客户化表现层,执行下列命令创建 /app/views/Users/list.html

zhanghua:play-1.2.1 root# ./play crud:ov --template Users/list

3.8 支持安全

http://www.playframework.org/documentation/1.0/secure

1) vim application.conf

# Import the secure module

module.secure=${play.path}/modules/secure

2) vim routes

# Import Secure routes

     *      /                module:secure

3) 改动了配置,要重新运行下列命令:

zhanghua:play-1.2.1 root# ./play eclipsify QATool

4) 修改 Controller, 添加 With Check 两个标签:

@With (Secure. class )

public class Application extends Controller {

@Check (Constant. ROLE_ADMIN )

public static void index() {

String user = Security. connected ();

System. out .println( "" );

render ();

}

5) 新建一个自定义 Security 类,如下:

/**

*

* author: huazhang

* since : 2011 - 6 - 28

*/

public class Security extends Secure.Security

{

static boolean authentify(String username, String password)

{

User user = Dao. findByUsername (username);

return user != null && user. password .equals(password);

}

static boolean check(String role) {

String loginUser = connected ();

User user = Dao. findByUsername (loginUser);

return user== null ? false : role.equalsIgnoreCase(user.getRole());

}

}

分享到:
评论

相关推荐

    quqi.rar_mtk_mtk software_mtk平台

    MTK平台的多功能下載軟件,適用所有MTK手機....

    视频播放源代码directshow开发

    用directshwo开发的视屏播放器,比较简单,有时候会出错

    dm8_setup_win64_ent_8.1.1.45_20191121.iso

    国内最好的数据库达梦DM8,曲奇网盘下载链接:https://quqi.com/s/1243222/wcOZdaWgUlHrwhOk

    大学生创新创业训练计划经验分享.zip

    大学生创新创业训练计划(以下简称为“大创计划”)是一项旨在提升大学生创新能力和创业精神的实践活动。通过这项计划,学生可以在导师的指导下,自主开展研究性学习和创业实践。下面我将分享一些关于大创计划的经验和建议。

    node-v12.22.3-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    毕业设计-The coding solutions of Leetcode and 剑指Offer using .zip

    这里为你收集整理了关于毕业设计、课程设计可参考借鉴的资料一份,质量非常高,如果你投入时间去研究几天相信肯定对你有很大的帮助。到时候你会回来感谢我的。 本资源是经过本地编译测试、可打开、可运行的项目、文件或源码,可以用于毕业设计、课程设计的应用、参考和学习需求,请放心下载。 祝愿你在这个毕业设计项目中取得巨大进步,顺利毕业! 但还需强调一下,这些项目源码仅供学习和研究之用。在使用这些资源时,请务必遵守学术诚信原则和相关法律法规,不得将其用于任何商业目的或侵犯他人权益的行为。对于任何因使用本资源而导致的问题,包括但不限于数据丢失、系统崩溃或安全漏洞,风险自担哦!

    【微信小程序毕业设计】宠物店商城系统开发项目(源码+演示视频+说明).rar

    【微信小程序毕业设计】宠物店商城系统开发项目(源码+演示视频+说明).rar 【项目技术】 微信小程序开发工具+java后端+mysql 【演示视频-编号:282】 https://pan.quark.cn/s/cb634e7c02b5 【实现功能】 本系统实现的是和宠物相关的信息管理和发布,加入了商品销售的功能。操作角色为管理员和用户、商家,管理员的功能为用户管理、商家管理、宠物分类管理、宠物信息管理、商品分类管理、宠物用品管理、项目类型管理、服务项目管理、宠物日志管理、订单管理等;用户的功能为购买宠物、商品、预约服务发表日志管理订单等。商家功能为提供宠物、宠物用品、宠物服务,管理订单和服务预约等。

    雷迪森的工具包(95分以上课程大作业).zip

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、高效的企业级应用。 1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程

    node-v9.10.1.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于B2C的网上拍卖系统_秒杀与竞价.zip

    基于B2C的网上拍卖系统主要用于帮助人们应用互联网方便快捷买到自己所中意的商品,并参与到秒杀与竞拍当中。 主要功能包括: 1.前台模块 (1)普通用户登录/注册。 (2)分类查看商品(普通商品与促销商品) (3)查看商品详细信息 (4)查看秒杀商品 (5)查看竞拍商品 (6)将商品加入购物车 (7)购买,结算功能 (8)留言 2.后台模块 (1)修改密码 (2)商品管理: -- 编辑/删除 -- 设置/取消促销 (3)秒杀商品:设置/取消秒杀 (4)竞拍商品:设置/取消竞拍 (5)订单管理:查看订单 (5)留言管理:查看/删除留言 项目访问路径: 前台:http://localhost:8080/sale 后台:http://localhost:8080/sale/user/adminlogin

    【前端素材】大数据-政务大数据共享交换平台.zip

    大数据技术指的是用于处理和分析大规模数据集的技术和工具。以下是一些常见的大数据技术和工具: Hadoop:Apache Hadoop是一个用于分布式存储和处理大规模数据的开源框架。它包括Hadoop Distributed File System(HDFS)用于数据存储和MapReduce用于数据处理。 Spark:Apache Spark是一个快速、通用的集群计算系统,提供了比MapReduce更快的数据处理能力。它支持内存计算和更多复杂的数据处理流程。 NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:数据湖是一个存储结构化和非结构化数据的存储池,用于支持数据分析和机器学习应用。 机器学习:大数据技术也广泛应用于机器学习领域,支持大规模数据的模型训练和预测分析。 流式处理:针对实时数据处理需求,流式处理技术(如Apache Kafka、Apache Flink)可以实时。

    【前端素材】大数据-气象预报大数据平台.zip

    大数据技术指的是用于处理和分析大规模数据集的技术和工具。以下是一些常见的大数据技术和工具: Hadoop:Apache Hadoop是一个用于分布式存储和处理大规模数据的开源框架。它包括Hadoop Distributed File System(HDFS)用于数据存储和MapReduce用于数据处理。 Spark:Apache Spark是一个快速、通用的集群计算系统,提供了比MapReduce更快的数据处理能力。它支持内存计算和更多复杂的数据处理流程。 NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:数据湖是一个存储结构化和非结构化数据的存储池,用于支持数据分析和机器学习应用。 机器学习:大数据技术也广泛应用于机器学习领域,支持大规模数据的模型训练和预测分析。 流式处理:针对实时数据处理需求,流式处理技术(如Apache Kafka、Apache Flink)可以实时。

    数学模型算法多目标决策分析方法.pptx

    数学模型算法

    ############ 光电传感器的描述

    光电传感器

    node-v12.17.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Web开发工具和方法课程的学术项目Java、Spring、Hibernate、Angular

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、高效的企业级应用。 1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程

    云计算基础课件—云安全dr.pptx

    云计算基础课件—云安全dr.pptx

    jizu3.cod

    jizu3.cod

    线性规划模型及应用中的整数规划讲义.pptx

    数学模型算法

Global site tag (gtag.js) - Google Analytics