NutzCN Logo
问答 MVC url映射两个问题
发布于 2852天前 作者 邓华锋 1681 次浏览 复制 上一个帖子 下一个帖子
标签:
这两个问题的示例代码:
```Java
@At("/get/?/?/?")
@Ok("json")
public void get(String host,String startTime,String endTime) {

}

``` 

访问:http://localhost:8080/nutztest/get/www.denghuafeng.com/2016-07-04/2016-07-05  这种链接,会报404,没法访问到以上方法。

```Java
@At("/url")
@Ok("json")
public void url(String url) {
    System.out.println(url);
}
``` 

访问:http://localhost:8080/nutztest/url?url=http://www.denghuafeng.com?id=123&name=dhf
输出结果是:http://www.denghuafeng.com?id=123
即从http://www.denghuafeng.com?id=123开始“&”以后的参数都获取不到,以上是name=dhf获取不到。
预期效果是:http://www.denghuafeng.com?id=123&name=dhf
2 回复

第一种,我测试了一下, 没有木有问题

12:05:36.822 DEBUG (UrlMappingImpl.java:92) get - Found mapping for [GET] path=/demo/get/www.abc.com/abc/abz : DemoModule.get(DemoModule.java:71)
12:05:36.823 DEBUG (LogTimeProcessor.java:24) process - [GET ]URI=/nutzbook/demo/get/www.abc.com/abc/abz 200 1ms

至于第二种,那是因为URL的传参是需要urlencode一下的。截断是容器的缘故,Http标准的缘故.

http://$uri?参数1=abc&参数2=def
// http://localhost:8080/nutztest/url?url=http://www.denghuafeng.com?id=123&name=dhf
按Http协议解析,结果就是

URI = /nutztest/url
参数url=http://www.denghuafeng.com?id=123
参数name=dhf

@wendal
第一种,问题找着了,是因为web.xml配置了

	<filter>
		<filter-name>nutztest</filter-name>
		<filter-class>org.nutz.mvc.NutFilter</filter-class>
		<init-param>
			<param-name>modules</param-name>
			<param-value>com.denghuafeng.MainModule</param-value>
		</init-param>
		<init-param>
			<param-name>exclusions</param-name>
			<param-value>*[.].*</param-value>
		</init-param>
	</filter>

本意是想限制后缀访问,不想任何带后缀的链接都能访问后台,看来好好想想这个排除的正则表达式,去除exclusions的设置就好了。

第二种 只能通过Ur后面传的参数换成其他的字符,在后台再还原成“&”来解决了。
比如:http://localhost:8080/nutztest/url?url=http://www.denghuafeng.com?id=123@name=dhf
后台就能接到:http://www.denghuafeng.com?id=123@name=dhf
再还原成&,达到预期效果:http://www.denghuafeng.com?id=123&name=dhf

添加回复
请先登陆
回到顶部