美文网首页
spring-mvc的request和response

spring-mvc的request和response

作者: rockops | 来源:发表于2017-01-19 20:54 被阅读435次

记录自己的java菜鸟历程。

1, 如何接收请求参数?

标注@Controller,注册成为一个Controller bean
在具体方法上标注@RequestMapping,指定具体的url地址和请求类型get/post
如果需要传参数的话,spring可以根据具体的名字直接做映射
如果传入的的参数都完全符合一个java对象的话,那可以在方法的参数列表中直接写这个SpecialClass object
还可以通过HttpServletRequest,然后通过request.getParameter("parameter")来获取传入的参数。

在这个过程中,可能会遇到一个问题,就是乱码,解决方案是在web.xml中增加对编码的支持。

<filter>
         <filter-name>characterEncodingFilter</filter-name>
         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
         <init-param>
             <param-name>encoding</param-name>
             <param-value>UTF-8</param-value>
         </init-param>
         <init-param>
             <param-name>forceEncoding</param-name>
             <param-value>true</param-value>
         </init-param>
</filter>
<filter-mapping>
         <filter-name>characterEncodingFilter</filter-name>
         <url-pattern>/*</url-pattern>
</filter-mapping>

如果ResponseBody的返回中文乱码,最简单的方法是在@RequestMapping参数后增加produces="application/json;charset=utf-8")
详情可见: http://josh-persistence.iteye.com/blog/2085015

2, 如何返回请求结果?

2.1 返回json对象

spring支持直接返回对象,然后被序列化为json格式,直接在方法上标注@ResponseBody ,return object。
需要在spring-mvc.xml中加入

<context:component-scan base-package="cn.my.project.controller"/>
<context:annotation-config />
<mvc:annotation-driven/>

然后在pom.xml中增加依赖包

<dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-webmvc</artifactId>  
        <version>3.1.2.RELEASE</version>  
        <type>jar</type>  
        <scope>compile</scope>  
    </dependency>  
    <dependency>  
        <groupId>org.codehaus.jackson</groupId>  
        <artifactId>jackson-mapper-asl</artifactId>  
        <version>1.9.8</version>  
        <type>jar</type>  
        <scope>compile</scope>  
    </dependency> 

参考:

像以上的这种,直接会在页面上看到json对象,但如果想有更好的表现形式,比如想要有一个页面去包装下返回的内容,其中的一个做法是用jsp。

2.2 返回结果 使用jsp解析

这里就不能使用@ResponseBody了,需要return一个view的名字,比如return "query"
在spring-mvc.xml中定义对view的"转换和包装"

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

经过了这个定义之后,请求会默认访问/WEB-IN/views/query.jsp的内容。在query.jsp中可以获取返回的对象,之后把它用html的形式显示出来。
Controller中还需要修改下,需要在@RequestMapping下面的方法参数中,增加一个参数ModelMap map,之后把结果put进去

users = userService.getUserInfoByHotelName(hotelName);
modelMap.put("userList", users);

之后这个userList对象,会被query.jsp获取到,通过${}的方式获取其中内容

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach items="${userList}" var="item">
    <table>
        <tr>
            <td>店名</td>
            <td><c:out value="${item.hotelName}"/></td>
        </tr>
    </table>
</c:forEach>

对于jsp的第一行,taglib,需要在pom.xml中增加依赖包

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jstl-impl</artifactId>
    <version>1.2</version>
</dependency>```

相关文章

网友评论

      本文标题:spring-mvc的request和response

      本文链接:https://www.haomeiwen.com/subject/xjaibttx.html