在工作中,我的任务是将一堆HTML文件转换成一个简单的JSP项目.它实际上是静态的,无需编程的服务器端逻辑.我应该提到我对Java完全不熟悉.JSP文件似乎可以很容易地使用常见的包含和变量,就像PHP,但我想知道一种简单的方法来获得类似模板继承(Django样式)或至少能够有一个base.jsp文件包含页眉和页脚,所以我可以稍后插入内容.
Ben Lings似乎在这里给出了一些希望: JSP模板继承 有人可以解释如何实现这个目标吗?
鉴于我没有太多时间,我认为动态路由有点多,所以我很高兴只是让URL直接映射到.jsp文件,但我愿意接受建议.
谢谢.
编辑:我不想使用任何外部库,因为它会增加我自己和其他从事项目工作的人的学习曲线,而我所工作的公司也签约了这样做.
另一个编辑:我不确定是否JSP tags有用,因为我的内容实际上没有任何模板变量.我需要的是一种能够做到这一点的方法:
base.html:
<html><body>
{ content.body }
</body></html>
Run Code Online (Sandbox Code Playgroud)
somepage.html
<wrapper:base.html>
<h1>Welcome</h1>
</wrapper>
Run Code Online (Sandbox Code Playgroud)
输出为:
<html><body>
<h1>Welcome</h1>
</body></html>
Run Code Online (Sandbox Code Playgroud)
我认为这会给我足够的多功能性来做我需要的一切.它可以实现,includes但我需要一个顶部和一个底部包括每个包装,这是一种凌乱.
我是Haskell的新手,到目前为止很享受它.令我印象深刻的是,它似乎非常庞大,有许多语法结构和库可以为几乎所有东西定义函数.例如,Data.Map定义了近100个函数.Data.Set还定义了许多函数,Data.List也是如此,它还提供了许多与Data.Set相同的功能.
我有初学者的意见,为什么会这样(提供所有常见模式的功能,减少噪音),但我很想听听一些关于这个主题的资深意见.
在Haskell中,我可以轻松定义一个递归函数,它接受一个值并返回一个字符串:
Prelude> let countdown i = if (i > 0) then (show i) ++ countdown (i-1) else ""
Prelude> countdown 5
"54321"
Run Code Online (Sandbox Code Playgroud)
我想使用相同类型的设计从文件句柄中读取可用数据.在这种特殊情况下,我需要以与hGetContents相同的方式读取数据,但不要将句柄保留在"半封闭"状态,以便我可以循环与使用createProcess打开的进程的stdin/stdout句柄的交互:
main = do
-- do work to get hin / hout handles for subprocess input / output
hPutStrLn hin "whats up?"
-- works
-- putStrLn =<< hGetContents hout
putStrLn =<< hGetLines hout
where
hGetLines h = do
readable <- hIsReadable h
if readable
then hGetLine h ++ hGetLines h
else []
Run Code Online (Sandbox Code Playgroud)
给出错误:
Couldn't match expected type `IO …Run Code Online (Sandbox Code Playgroud) 在原子内部使用 unsafePerformIO 也是危险的,但原因不同。有关更多信息,请参阅 unsafeIOToSTM。
在使用线程和异步异常时,有一些函数可以屏蔽异步异常,以便可以安全地分配和释放资源。
但是有很多unsafePerformIO在幕后使用的函数,例如包中的allocAndFreezememory,并且在 STM 事务中强制包含此类表达式的 thunk 并不难。在 STM 事务中使用这些函数是否真的安全?是否存在可能导致内存泄漏或数据损坏的情况?mask在这种情况下是否有等价物?
谢谢
想知道如何最好地将Control.Lens包与IORefs 结合起来.具体来说,我希望能够使用atomicModifyIORef镜头,以便我可以提供类型的功能,a -> (a, b)并从操作返回一个值.代码段:
let inc x = (x+1, x)
ior <- newIORef ((1, 1) :: (Int, Int))
thisShouldBe1 <- ior & atomicModifyIORef ?? _1 inc -- this is the bit I'm stuck on
Run Code Online (Sandbox Code Playgroud) 来自Data.Binary:
instance (Binary e) => Binary (IntMap.IntMap e) where
put = put . IntMap.toAscList
get = liftM IntMap.fromDistinctAscList get
Run Code Online (Sandbox Code Playgroud)
我认为这意味着任何IntMap (Binary e)类型都是可序列化的,但它不会:
Data.Binary Data.IntMap> encode $ ((fromList [])::IntMap Int)
<interactive>:12:1:
No instance for (Binary (IntMap Int))
arising from a use of `encode'
Run Code Online (Sandbox Code Playgroud)
我如何使用提供的实例?