我在网上看了一些例子教程, 一般是这样的:
在web.xml里配置分发器隐射*.do的请求, 然后表单可以提交到这样的地址去处理请求了, 完了之后再转发到视图。
问题是除了*.do以外的请求呢?
比如说/index.jsp 或者 /user/main.jsp 这样的url, 如何处理呢? 这样好像没有经过Controler直接就访问view了, 那这里面需要的数据谁来提供呢?
能否 或者说 是否应该让控制器拦截所有的请求, 需要处理的先处理再转发视图, 不需要其他处理的, 直接转发到jsp
初学java不要笑啊.
web.xml中可以配自己的404 500的返回页面,当有页面找不到的时候可以自己指定页面。
struts2中可以配置异常处理[code="java"]
/commons/error.jsp
[/code]你只需要在action的方法中将异常抛出即可
你可以配一个servlet(struts)的拦截*.do处理action请求
可以再配一个Filter或servlet拦截*.jsp,再Fliter里面处理哪些jsp客户端可以直接请求哪些不能.
CSS、JS、图片就不用拦了直接让它请求就可以了
[quote]
能否 或者说 是否应该让控制器拦截所有的请求, 需要处理的先处理再转发视图, 不需要其他处理的, 直接转发到jsp
[/quote]
理论上是这样,MVC嘛,就是说由C负责把V要的M设置进去。如果你的JSP页面有需要对数据的展示,就采用这种方式,当然,即使没有也可以这样展示,这样的话Controller里的方法就是个空,只有一个返回到页面的语句。所以,对于只是文字页面的JSP,为简单化也可以直接访问JSP。
[i]问题是除了*.do以外的请求呢? [/i]
.do,.screen,.XXX,你在中配置就可以了,都可以支持
[quote]
首先首页的情况, 一般都是xxx.com就完了, 没有机会给index.jsp提供数据啊。
[/quote]
这样请求,并不一定就是请求“index.jsp”,你可以在web.xml里面的welcome-page-list中设置的。即使访问的是这个页面,也没什么不可以,这个说的“提供数据”并不是说一定要从客户端传过来,我直接从后台读取数据到JSP可以呀。
[quote]
其次每个都写一个空的控制器, 这样也不好吧? 一般是如何做的?
[/quote]
我上一个回复说了,空的确实不好,为了简单起见,对于纯粹文本性的JSP,是可以让它直接被访问的。不过,现在多数出于安全考虑,把JSP文件放到了WEB-INF下面,这个目录客户端是无法访问到的,所以,大家就加了个空的Controller来访问单纯的JSP.
[quote]
要是整个拦截/*的话, 后面怎么做比较好? 还有/下面还会有images这样的东西。
[/quote]
一般不会这么设置,像你提到的对于图片的请求如果也拦截的话就没必要了,浪费服务器资源。多数都是指定一个特定的后缀。
[quote]要是整个拦截/*的话, 后面怎么做比较好? 还有/下面还会有images这样的东西。
[/quote]
直接放在WebRoot目录下的文件时可以直接请求的(非WEB-INF,此目录需经过servlet获得)。
在拦截器或servlet里面根据url来处理那些需要数据处理的请求,而那些没有不需要数据处理的请求如图片、css、js等就可以不管