我是Scala的Lift框架的新手。出于某种原因,index.html驻留在web-app目录中,当我启动jetty时,http://localhost:8080/将指向index.html文件就好了。但是,如果我将login.html文件放在与index.html相同的文件夹中,然后转到http://localhost:8080/login,则Lift不会为该文件提供服务。
我需要在哪里放置文件才能注册?我有点迷失,因为这种行为似乎只适用于index.html而且没有别的。
当我在Chrome中查看来源时会发生这种情况:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html> <body>The Requested URL /login was not found on this server</body> </html>
答案 0 :(得分:5)
请参阅SiteMap维基页面:http://liftweb.assembla.com/wiki/show/liftweb/SiteMap
SiteMap的原因是菜单生成和访问控制的统一。您可以按名称引用页面,如果使用SiteMap在目录层次结构中移动它们,则链接将始终有效。 SiteMap提供了一种类型安全机制,用于提取查询参数和路径信息,以便您当前页面可以拥有关联的对象,并且可以通过将对象传递给Loc来计算页面的URL。
SiteMap可能看起来有点重,但如果您打算为不同的页面构建一个具有不同访问控制规则的站点,SiteMap为您提供了一个很好的,统一的表示和安全机制。
如果您不想使用SiteMap,只需从Boot.scala中删除LiftRules.setSiteMap()行,Lift将为任何页面提供服务。
答案 1 :(得分:1)
要回答您的上一条评论:如果您使用默认的Lift原型尝试提升:这将使用为您的网站提供菜单的SiteMap。这是在bootstrap.liftweb.Boot.scala
类中定义的。默认情况下,使用带有菜单的站点地图可以控制您可以在应用程序中访问的页面。我不确定是否有一种简单的方法可以禁用该功能,所以如果有人知道,请发表评论。
如果您根本不想要这个,可以通过删除Boot类中的val entries = Menu(Loc("Home", List("index"), "Home")) :: Nil
和LiftRules.setSiteMap(SiteMap(entries:_*))
来禁用它。这样,您可以通过转到URL直接访问任何您想要的页面。