记录自己的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>```