我想,當用戶點擊以下網址:我可以在java中有自定義的servlet URL嗎?
http://host:8080/AppName/ServletName/Param1/Param2
它應該去一個名爲ServletName
和Param1
和Param2
成爲請求參數的servlet。我在紅寶石項目中看到過這種類型的網址。在Java中可能嗎?
我想,當用戶點擊以下網址:我可以在java中有自定義的servlet URL嗎?
http://host:8080/AppName/ServletName/Param1/Param2
它應該去一個名爲ServletName
和Param1
和Param2
成爲請求參數的servlet。我在紅寶石項目中看到過這種類型的網址。在Java中可能嗎?
是的,你可以用servlet做類似的事情。您需要設置servlet映射在web.xml中是這樣的:
<servlet-mapping>
<servlet-name>ServletName</servlet-name>
<url-pattern>/ServletName/*</url-pattern>
</servlet-mapping>
讓所有請求,並在servlet需要解析的HttpServletRequest.getPathInfo()
結果。
當然可以,這就是所謂的REST,你可以在這裏的介紹:http://download.oracle.com/javaee/6/tutorial/doc/giepu.html
您也可以映射servlet來通配符的路徑,所以你可能只是你的servlet映射到/ServletName/*
和request.getPathInfo()
得到/Param1/Param2
部分。
HttpServletRequest.getContextpath()看起來很有趣,儘管我自己從來沒有用過它。
你也可以用URL rewriting來實現。還有一個與ServletFilter一起使用的等效可用的servlet容器,名爲UrlRewriteFilter。
我個人使用Tapestry5,它本身就是用這種方式編碼參數。
我沒有這樣做,甚至還沒有看到,但嘗試這個
首先在web.xml網址映射這樣
<servlet>
<servlet-name>ServletName</servlet-name>
<servlet-class>ServletName</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletName</servlet-name>
<url-pattern>/ServletName/Param1/Param2</url-pattern>
</servlet-mapping>
,然後用得到的URL字符串 String url=request.getRequestURI()
;
然後你可以拆分並得到param1和param2。
如果您使用的是Spring MVC,則可以映射@Controller
並在@RequestMapping
中訪問參數@PathVariable
。
@Controller
public class MyController {
@RequestMapping("/{param1}/{param2})
public Response get(@PathVariable("param1") String param1, @PathVariable("param2") String param2) {
//method body
}
}
BalusC發佈了一個awnser到這個地方,讓我看看。 – Jacob
這是[答案](http://stackoverflow.com/questions/6678029/dynamic-urls-in-java-web-application-like-in-rails/6678490#6678490) – Jacob
@cularis:是的。 +1。 –