几年来我一直在使用以下Web开发堆栈:
的java /弹簧/休眠/ MySQL的/码头/检票/ jquery的
对于某些要求,我正在考虑使用AJAX前端切换到NoSQL数据存储区.我可能会使用jQuery构建前端,并使用JSON与Web应用程序中间件进行通信.我倾向于使用MongoDB,因为它具有更强大的动态查询功能,但仍在考虑使用CouchDB.
我不确定在中间使用什么.可能是RESTful的东西?我倾向于坚持使用Java(或者Scala或Groovy),因为我使用Drools这样的工具来处理规则而使用Shiro来保护安全.但话说回来,我想选择一些易于使用的东西,所以我对其他解决方案持开放态度.
如果您正在构建ajax/json/nosql解决方案,我想了解您正在使用哪些工具以及您发现使用它们的任何优缺点的详细信息.
我对docker感兴趣了一段时间,但还没有跳进去.我需要设置一个邮件服务器,所以我想也许可以用它作为了解更多有关docker的理由.但是,我不清楚如何最好地去做.
我之前在VPS上安装了一个邮件服务器,但没有安装到多个容器中.我想安装Postfix,Dovecot,MySQL或Postgresql,以及SpamAssassin,类似于这里描述的内容:
但是,将它停泊的好方法是什么?我会简单地将所有东西放入一个容器中吗?或者将MySQL放在一个容器中,将Postfix放在另一个容器中,以及为Dovecot和SpamAssassin添加其他容器会更好吗?或者应该共享一些容器?
使用docker安装邮件服务器有什么HOWTO?如果有,我还没有找到它.
我在HTML页面中有这个代码:
alert(JSON.stringify(new Date()));
Run Code Online (Sandbox Code Playgroud)
我在我的页面中包含了最新的json2.js(2009-09-29版本),以支持没有JSON.stringify()的旧浏览器.我还包括jquery-1.3.2.js.我相信具有原生JSON支持的新浏览器,它只是传递给本机JSON功能.
这是我在不同浏览器中得到的结果:
IE 8 on Windows XP: "2010-02-07T21:39:32Z"
Chrome 4.0 on Windows XP: "2010-02-07T21:39:59Z"
Firefox 3.0 of Windows XP: "2010-02-07T21:40:41Z"
Chrome 4.0 on Ubuntu linux: "2010-02-07T21:41:49Z"
Firefox 3.0 on Ubuntu linux: "2010-02-07T21:42:44Z"
Chrome 4.0 on Mac OSX: "2010-02-07T21:43:56Z"
Safari on Mac OSX: "2010-02-07T21:45:21Z"
Firefox 3.5 on Mac OSX: "2010-02-07T21:44:10.101Z"
Run Code Online (Sandbox Code Playgroud)
注意最后一个?它包含毫秒,而其他任何一个都没有.我没有在任何其他系统上安装FF3.5,但我假设它们会有相同的结果.
我可以做些什么来使所有平台上的所有日期字符串相同吗?我的后端REST服务可以配置一个格式字符串来反序列化JSON日期,但它不能支持多种格式,只有一种.
我正在使用node-http-proxy,想要查看特定的响应头并在必要时重写它.这里的任何人都有建议吗?
我的代理服务器位于几个不同的节点服务器和java webapp之前.java应用程序正在设置cookie,但cookie有一个相对于webapp上下文的路径.我需要cookie是安全的,并且在不修改Java应用程序的情况下拥有root的路径.
换句话说,返回以下标头:
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/app; HttpOnly
Run Code Online (Sandbox Code Playgroud)
我想将Path值重写为:
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/; HttpOnly; Secure
Run Code Online (Sandbox Code Playgroud)
我不清楚如何使用node-http-proxy执行此操作.建议?有中间件来帮助解决这个问题吗?
我有一个Jetty服务器在/app上下文中运行Spring应用程序.该应用程序使用会话,因此它设置会话cookie,响应如下:
set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/app; HttpOnly
Run Code Online (Sandbox Code Playgroud)
我需要cookie来获取路径/而不是webapp的上下文.另外,我想使用安全的cookie.我想要这个回复:
set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/; HttpOnly; Secure
Run Code Online (Sandbox Code Playgroud)
在哪里配置会话cookie的适当位置?春天有助于此吗?它应该在web.xml吗?或者我是否需要以容器特定的方式配置它,例如jetty-web.xml?
我尝试了很多东西,但到目前为止还没有任何工作.以下是我尝试过的一些事情.
创建WEB-INF/jetty-web.xml如下:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Get name="sessionHandler">
<Get name="sessionManager">
<Set name="sessionCookie">MYJETTYSESSION</Set>
<Set name="sessionPath">/</Set>
<Set name="secureCookies" type="boolean">true</Set>
<Set name="httpOnly" type="boolean">true</Set>
</Get>
</Get>
</Configure>
Run Code Online (Sandbox Code Playgroud)
这会导致抛出异常:
2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Set name="sessionPath">/</Set> java.lang.NoSuchMethodException: class org.eclipse.jetty.server.session.HashSessionManager.setSessionPath(class java.lang.String)
2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Get name="sessionManager"><Set name="sessionCookie">MYJETTYSESSION</Set><Set name="sessionPath">/</Set><Set name="secureCookies">true</Set><Set name="httpOnly">true</Set></Get> java.lang.NoSuchMethodException: class org.eclipse.jetty.server.session.HashSessionManager.setSessionPath(class java.lang.String)
2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Get name="sessionHandler"><Get name="sessionManager"><Set name="sessionCookie">MYJETTYSESSION</Set><Set name="sessionPath">/</Set><Set name="secureCookies">true</Set><Set name="httpOnly">true</Set></Get></Get> java.lang.NoSuchMethodException: class …Run Code Online (Sandbox Code Playgroud) 我的实体目前包含java Date属性.我开始经常使用Joda Time进行日期操作和计算.这意味着我不断地将我的日期转换为Joda DateTime对象并再次返回.
所以我想知道,有什么理由我不应该只更改我的实体来存储Joda DateTime对象而不是Java Date对象?
请注意,这些实体是通过Hibernate持久化的.我找到了jodatime-hibernate项目,但我也在Joda邮件列表上读到它与较新版本的hibernate不兼容.它似乎维护得不是很好.
所以我想知道是否最好继续在Date和DateTime之间进行转换,或者是否明智地开始持久化DateTime对象.我担心的是依赖于维护不善的图书馆.
编辑:请注意,我的目标之一是更好地存储时区信息.仅存储日期似乎将日期保存在本地时区.由于我的应用程序可以在全球范围内使用,我也需要知道时区.Joda Time Hibernate似乎也在用户指南中解决了这个问题.
我试图弄清楚Jetty启动时会造成1分钟延迟的原因.是配置问题,我的应用程序还是其他什么?
我在服务器上安装了Jetty 7(jetty-7.0.1.v20091125,2009年11月25日),并将一个45MB的ROOT.war文件部署到webapps目录中.这是Jetty中配置的唯一webapp.然后我用命令启动Jetty:
java -DSTOP.PORT=8079 -DSTOP.KEY=mystopkey -Denv=stage -jar start.jar etc/jetty-logging.xml etc/jetty.xml &
Run Code Online (Sandbox Code Playgroud)
这样做后我得到两行输出:
2010-03-07 14:20:06.642:INFO::Logging to StdErrLog::DEBUG=false via org.eclipse.jetty.util.log.StdErrLog
2010-03-07 14:20:06.710:INFO::Redirecting stderr/stdout to /home/zing/jetty-distribution-7.0.1.v20091125/logs/2010_03_07.stderrout.log
Run Code Online (Sandbox Code Playgroud)
当我按下回车键时,我得到了我的命令提示符.查看日志文件(logs/2010_03_07.stderrout.log),我在开头看到以下内容:
2010-03-07 14:08:50.396:INFO::jetty-7.0.1.v20091125
2010-03-07 14:08:50.495:INFO::Extract jar:file:/home/zing/jetty-distribution-7.0.1.v20091125/webapps/ROOT.war!/ to /tmp/Jetty_0_0_0_0_8080_ROOT.war___.8te0nm/webapp
2010-03-07 14:08:52.599:INFO::NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet
2010-03-07 14:09:51.379:INFO::Set web app root system property: 'webapp.root' = [/tmp/Jetty_0_0_0_0_8080_ROOT.war___.8te0nm/webapp]
2010-03-07 14:09:51.585:INFO::Initializing Spring root WebApplicationContext
INFO - ContextLoader - Root WebApplicationContext: initialization started
INFO - XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Sun Mar 07 14:09:51 …Run Code Online (Sandbox Code Playgroud) 我正在使用PropertyPlaceholderConfigurer从属性文件加载应用程序设置,例如JDBC连接信息.我还想将其他设置(如默认语言环境和时区)作为属性.
但我不确定最好的执行方法Locale.setDefault()和TimeZone.setDefault().我希望他们在启动时早点运行一次.在其他代码执行之前,Spring是否有正确的方法执行某些代码?有什么建议?
我知道我可以在命令行上指定默认值,但是这个应用程序将安装在很多地方,我想避免因忘记指定-Duser.timezone = UTC或其他原因而引起的问题.
我希望表中某列中的文本不会换行,而是要截断,以使其适合表格单元格的当前大小.我不希望表格单元格改变大小,因为我需要表格正好100%是容器的宽度.
这是因为带有100%宽度的表位于一个div溢出的位置:auto(它实际上位于jQuery UI.Layout面板中).
我试过了两个overflow: hidden,文字仍然包裹着.我试过了white-space: nowrap,但它拉伸了桌子,100%并添加了一个水平滚动条.
div.container {
position: absolute;
overflow: auto;
/* user can slide resize bars to change the width & height */
width: 600px;
height: 300px;
}
table { width: 100% }
td.nowrap {
overflow: hidden;
white-space: nowrap;
}
<div class="container">
<table>
<tr>
<td>From</td>
<td>Subject</td>
<td>Date</td>
</tr>
<tr>
<td>Bob Smith</td>
<td class="nowrap">
<strong>Message subject</strong>
<span>This is a preview of the message body …Run Code Online (Sandbox Code Playgroud) 在使用Hibernate等ORM工具时,我发现将所有业务逻辑从业务对象中排除,而不是将其保存在服务层中是有利的.服务层创建业务对象POJO,操作它们,并使用DAO来保存它们.但是,这不是从Java的面向对象性质向后退一步吗?
我的堆栈包括用于DI,事务和持久性的Spring with Hibernate.我的DAO被注入我的服务层,而不是注入任何POJO.
最近我读了Martin Fowler 关于建立灵活会计系统的会计模式文档.我相信它是在Spring/Hibernate/DI/ORM热潮之前编写的.它描述了包含业务逻辑的对象.这些对象以优雅的方式使用继承和组合.
通过将逻辑放入类中,可以将其划分为仅与一个特定场景相关的整齐单元.在我的服务层中,我最终拥有许多不同的方法,每种方法都处理不同的场景.但它远非面向对象.
在Martin Fowler的会计模式文档中,他描述了一个基类AccountingEvent.这个类可能有子类,如UsageEvent和InstallationEvent.
UsageEvent:
UsageEvent 当仪表读卡器记录您的用电量时发生 ServiceAgreement被抬起头来PostingRule对于此类事件以及此特定时间段,在服务协议中找到适当的s.规则和费率可以随时间变化,因此PostingRule对于任何给定类型的事件都存在多个s.UsageEvent与PostingRule■确定哪些行动需要采取的地方,比如创建一个或多个AccountingEntry对象.AccountingEntry创建一个用于计算包含在中的逻辑的用法PostingRule.这可能很简单rate * usage,但可能会更复杂,基于一天中的时间,承诺水平(大企业可能获得折扣),低收入家庭等.AccountingEntry创建额外的s来计税,提供信用等.InstallationEvent:
InstallationEvent 当技术人员激活建筑物的电源时发生.PostingRules的发现AccountingEntry创建适当的sUsageEvent关键在于有许多不同类型的AccountingEvents和PostingRules,每种类型都知道如何针对特定情况做什么.这些对象可以使用接口轻松互换.我只需发出命令即可完成所有操作someAccountingEvent.process().
当我必须在服务层中创建和保存实体时,我不清楚如何获得一些优雅的最佳方法.我不想将我的DAO注入到我的POJO中,这会为它们添加额外的依赖关系,并可能使它们成为更重的重量对象.但是,如何在我可以注入DAO的服务层中最好地建模这样的东西?