在web.xml

时间:2016-10-20 09:47:40

标签: java json spring spring-mvc model-view-controller

在我使用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获取图像?非常感谢你!!

1 个答案:

答案 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/" />

您还可以在同一个应用程序上下文中使用多个资源规范