在我使用Spring MVC和JSON的项目中,我将web.xml文件配置为:
Web.xml中
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我的控制器:
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "home";
}
@RequestMapping(value = "/json", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody List<Person> personsReturn(@RequestParam("name") String name, @RequestParam("age") int age) {
Person p1 = new Person("dat1", 11);
Person p2 = new Person("dat2", 22);
Person p3 = new Person("dat3", 33);
Person p4 = new Person("dat4", 44);
List<Person> lists = new ArrayList<Person>();
if (name.equals("dat")) {
lists.add(p1);
lists.add(p2);
} else {
lists.add(p3);
lists.add(p4);
}
return lists;
}
}
我的Servlet-Context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.luongkhanh.restfulspringmvc" />
</beans:beans>
我可以通过URL从JSON获取数据:
http://localhost:9999/restfulspringmvc/json?name=dat1&age=11
结果JSON:
[{"name":"dat3","age":33},{"name":"dat4","age":44}]
但是如果我想通过URL在位置获取图像,则不成功:
http://localhost:9999/restfulspringmvc/images/avatar.jpg
记录日食警报异常:
ARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/restfulspringmvc/images/avatar.jpg] in DispatcherServlet with name 'appServlet'
如何配置以通过浏览器从URL获取图像?非常感谢你!!
答案 0 :(得分:1)
您已将DispatcherServlet配置为使用url-pattern /这将覆盖容器的默认servlet映射。
默认的servlet映射用于加载任何资源或请求,而无需在web.xml中进行显式映射。通常使用此加载静态资源。如果通过在web.xml中将其指定为servlet的模式来覆盖它,则必须自己负责加载资源
Spring MVC通过提供资源处理来提供帮助 您必须指定与静态资源URL模式匹配的映射以及资源实际驻留的位置
您确实指定了
<resources mapping="/resources/**" location="/resources/" />
但您的图片不在webapp Maven文件夹下的资源文件夹中。而是在图像文件夹中。因此,您必须添加另一个资源标签,如
<resources mapping="/images/**" location="/images/" />
NB映射属性和位置属性不必对应。例如,你可以有一个像
这样的网址http://localhost:9999/restfulspringmvc/images/avatar.jpg
并且您的图片位于webapp下的/ static-resources / images中,您的映射将是
<resources mapping="/images/**" location="/static-resources/images/" />
您还可以在同一个应用程序上下文中使用多个资源规范