spring 处理json 参考:
Spring 3 MVC And JSON Example
注:
在方法或者返回值上面加上@ResponseBody,当spring发现下面的三个条件都满足之后,就会自动进行json数据转换(通过jackson):
1. classpath下有jackson依赖包
2. 配置文件中包含 <mvc:annotation-driven /> 配置
3. 方法或者方法返回值前有 @ResponseBody 注解
用maven下载依赖jar
maven依赖(目前最新稳定版本3.2.5)jackson用于处理json:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tch</groupId> <artifactId>springmvc</artifactId> <packaging>war</packaging> <version>1.0</version> <name>springmvc Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hiberante-version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-version}</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j-version}</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>${javassist-version}</version> </dependency> </dependencies> <properties> <junit-version>3.8.1</junit-version> <spring-version>3.2.6.RELEASE</spring-version> <hiberante-version>3.6.10.Final</hiberante-version> <javassist-version>3.12.0.GA</javassist-version> <mysql-version>5.1.28</mysql-version> <jackson-version>1.9.10</jackson-version> <log4j-version>1.2.17</log4j-version> <slf4j-version>1.7.5</slf4j-version> </properties> <build> <finalName>springmvc</finalName> </build> </project>
和struts2一样,首先需要在web.xml中配置核心控制器(Controller),只不过struts2是一个filter,spring mvc的控制器则是一个servlet: DispatcherServlet :
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 配置spring mvc的核心控制器DispatcherServlet --> <servlet> <servlet-name>spring_mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 默认情况下,spring mvc配置文件在/WEB-INF/下,servlet名字-servlet.xml(这里是spring_mvc-servlet.xml) --> <init-param> <!-- 指定spring mvc配置文件位置 --> <param-name>contextConfigLocation</param-name> <param-value>classpath*:dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring_mvc</servlet-name> <url-pattern>/mvc/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
然后就是spring mvc的配置文件,就是上面的:classpath下面的 dispatcher-servlet.xml :(包含了spring mvc 拦截器,以及spring的其它配置)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 启动扫描component功能 --> <context:component-scan base-package="com.tch.springmvc" /> <!-- viewResolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/" /> <property name="suffix" value=".jsp" /> </bean> <mvc:annotation-driven /> <!-- 拦截器 --> <mvc:interceptors> <!-- 这里配置的拦截器相当于全局拦截器,只要有响应的后端处理器,就会经过该拦截器 --> <bean class="com.tch.springmvc.interceptor.MyInteceptor" /> <mvc:interceptor> <!-- 只拦截匹配的路径 --> <mvc:mapping path="/namespace/*"/> <bean class="com.tch.springmvc.interceptor.MyInteceptor2" /> </mvc:interceptor> </mvc:interceptors> <!-- 启动注解实物配置功能 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/test"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!--读取数据库配置文件 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingLocations"> <list> <value>classpath*:com/tch/springmvc/entity/*.hbm.xml</value> </list> </property> <property name="packagesToScan"> <list> <!-- <value>com.tch.test.ssh.entity.annotation</value> --> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> </beans>
然后就是后端控制器了:
package com.tch.springmvc.web.controller; import java.util.ArrayList; import java.util.List; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.tch.springmvc.bean.Shop; @Scope("prototype") //这样可以让控制器是原型模式,而不是单例 @Controller("helloWorld") //表示这个类是后端控制器 @RequestMapping("/namespace") //在类上面加上@RequestMapping,则该类下面的方法的访问路径都需要加上该前缀,类似struts2的namespace public class HelloWorldController { public HelloWorldController() { System.err.println("create"); } /** * Created on: 2013-12-9 * <p>Discription: 最简单的方法,访问路径:http://localhost:8080/xxx/mvc/namespace/helloWorld</p> * @return String */ @RequestMapping("/helloWorld") public String helloWorld(Model model) { model.addAttribute("message", "Hello World!"); return "index"; //return "forward:/js/login.js"; //服务端跳转 //return "redirect:/js/login.js"; //客户端跳转 } /** * Created on: 2013-12-9 * <p>Discription: 返回json数据(@ResponseBody可以放在方法上面,如json方法;或者在返回值前,像json2一样) * 访问:http://localhost:8080/xxx/mvc/namespace/json</p> * @return Object */ @RequestMapping("/json") @ResponseBody public Object json(){ List<String> list=new ArrayList<String>(); list.add("电视"); list.add("洗衣机"); list.add("冰箱"); list.add("电脑"); list.add("汽车"); list.add("空调"); list.add("自行车"); list.add("饮水机"); list.add("热水器"); return list; } /** * Created on: 2013-12-9 * <p>Discription: 返回json数据(@ResponseBody可以放在方法上面,如json方法;或者在返回值前,像json2一样), * 访问:http://localhost:8080/xxx/mvc/namespace/json2</p> * @return Shop */ @RequestMapping("/json2") public @ResponseBody Shop json2(){ Shop shop = new Shop(); shop.setName("爽歪歪"); shop.setStaffName(new String[]{"张三", "李四", "王五"}); return shop; } /** * Created on: 2013-12-9 * <p>Discription: 使用rest风格来接收参数,如http://localhost:8080/xxx/mvc/namespace/rest/dreamoftch,则参数中的username的值就是dreamoftch</p> * @return String */ @RequestMapping("/rest/{username}") public String rest(Model model,@PathVariable("username") String username) { model.addAttribute("message", "Hello "+username+" !"); return "index"; } /** * Created on: 2013-12-9 * <p>Discription: 使用rest风格来接收参数<br>如http://localhost:8080/xxx/mvc/namespace/json3,则参数中的myParam的值就是json3<br> * 这个例子也说明了路径的匹配是先精确匹配,如果是http://localhost:8080/xxx/mvc/namespace/json,或者 * http://localhost:8080/xxx/mvc/namespace/json2则会分别映射到json和json2方法,但http://localhost:8080/xxx/mvc/namespace/json3 * 则没有精确映射的方法,所以就进到这里了,myParam的值就是json3</p> * @return String */ @RequestMapping("{myParam}") public String rest2(Model model,@PathVariable("myParam") String myParam) { model.addAttribute("message", "Hello "+myParam+" !"); return "index"; } /** * Created on: 2013-12-9 * <p>Discription: 使用rest风格来接收参数,如http://localhost:8080/xxx/mvc/namespace/rest/aaa/bbb,则参数中的username的值就是aaa,password是bbb</p> * @return String */ @RequestMapping("rest/{username}/{password}") public String rest3(Model model,@PathVariable("username") String username,@PathVariable("password") String password) { System.out.println("rest3"); model.addAttribute("message", "Hello "+username+" , your password is "+password+" !"); return "index"; } /** * Created on: 2013-12-9 * <p>Discription: 使用rest风格来接收参数,如http://localhost:8080/xxx/mvc/namespace/aaa/bbb,则参数中的username的值就是aaa,password是bbb</p> * @return String */ @RequestMapping("/{username}/{password}") public String rest4(Model model,@PathVariable("username") String username,@PathVariable("password") String password) { System.out.println("rest4"); model.addAttribute("message", "Hello "+username+" , your password is "+password+" !"); return "index"; } }
拦截器:
MyInteceptor :
package com.tch.springmvc.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class MyInteceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("prehandle -------"); return super.preHandle(request, response, handler); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion -------"); super.afterCompletion(request, response, handler, ex); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle -------"); super.postHandle(request, response, handler, modelAndView); } }
MyInteceptor2 :
package com.tch.springmvc.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class MyInteceptor2 extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception { System.out.println("prehandle -------MyInteceptor2"); String uri = request.getRequestURI(); if(uri.indexOf("rest") != -1){ response.getWriter().print("contains rest"); return false; } return true; } @Override public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion -------MyInteceptor2"); } @Override public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle -------MyInteceptor2"); } }
实体类:
package com.tch.springmvc.bean; public class Shop { String name; String staffName[]; public String getName() { return name; } public void setName(String name) { this.name = name; } public String[] getStaffName() { return staffName; } public void setStaffName(String[] staffName) { this.staffName = staffName; } }
最后就是页面了,由于上面dispatcher-servlet.xml 中配置了:
<!-- 添加前缀 --> <property name="prefix" value="/pages/" /> <!-- 添加后缀 --> <property name="suffix" value=".jsp" />
表示我们的相应页面的结构是这样组成: '/pages/' + action的结果字符串 + '.jsp'
对应上面的helloWorld方法的结果字符串:"helloWorld",页面就是 /pages/helloWorld.jsp 了。
所以需要在/pages/ 下面新建 helloWorld.jsp ,内容为:(页面加载完之后,会发出ajax请求获取json数据,最后控制台打印出来)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'User.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="<%=basePath%>/js/jquery-1.4.2.min.js"></script> <script type="text/javascript"> $(function(){ //ajax请求获取json数据 $.getJSON("mvc/namespace/json", function(json){ console.info(json); }); }); </script> </head> <body> ${message} </body> </html>
好了,最简单的结构就完成了(下面的 xxx 是项目名称)
访问helloWorld : http://localhost:8080/xxx/mvc/namespace/helloWorld 就出来结果了。。。
访问json : http://localhost:8080/xxx/mvc/namespace/json
访问json2 : http://localhost:8080/xxx/mvc/namespace/json2
访问rest : http://localhost:8080/xxx/mvc/namespace/rest/dreamoftch
访问rest2 : http://localhost:8080/z/mvc/namespace/json3
访问rest3 : http://localhost:8080/xxx/mvc/namespace/rest/aaa/bbb,则参数中的username的值就是aaa,password是bbb
访问rest4 : http://localhost:8080/xxx/mvc/namespace/aaa/bbb,则参数中的username的值就是aaa,password是bbb
相关推荐
**Spring MVC 入门教程——基于登录示例** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者分离业务逻辑、数据处理和用户界面,使得代码更易于...
这个"精简源码-spring-mvc 入门级使用"的压缩包文件,旨在为初学者提供一个简单易懂的实践案例,帮助他们快速理解和上手 Spring MVC。 首先,我们从 "spring" 这个标签开始。Spring 是一个开源框架,它提供了一个...
Spring MVC 是一款强大的Java web应用程序框架,用于构建高效、模块化的Web应用。它基于Spring框架,专注于处理HTTP请求和响应,...《Spring MVC入门》这本书将帮助你深入了解这一框架,并引导你一步步掌握其使用技巧。
**Spring MVC 入门项目详解** Spring MVC 是 Java Web 开发中的一个核心框架,它为构建基于模型-视图-控制器(MVC)模式的Web应用程序提供了强大的支持。本项目是一个专门为初学者设计的入门教程,旨在帮助大家快速...
【描述】:“Java Spring MVC超简单,Spring MVC入门,第一个Java程序,IntelliJ IDEA入门” 这表明我们将从零开始,逐步学习如何在IntelliJ IDEA这个强大的Java集成开发环境中配置Spring MVC环境,创建并运行一个...
在这个Spring MVC入门向导中,我们将深入探讨如何配置开发环境、理解Spring MVC的架构以及构建Web Store项目。 首先,配置Spring开发环境至关重要。这包括安装Java Development Kit (JDK),设置环境变量以确保Java...
### Spring MVC 入门知识点详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一部分,主要用于构建基于 Model-View-Controller (MVC) 设计模式的 Web 应用程序。它提供了丰富的功能来简化 Web 开发过程,...
### Spring MVC 入门教程详解 #### 一、Spring MVC框架概述 Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它遵循Model-View-Controller(MVC)设计模式,将业务逻辑、数据和表示层分离,提高代码...
这个“资料-10 Spring MVC入门程序.rar”压缩包很可能是包含了一个简单的Spring MVC项目示例,帮助初学者理解并学习如何搭建和运行Spring MVC应用程序。 在Spring MVC中,核心概念包括DispatcherServlet、Model-...
首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...
**Spring MVC 入门实例详解** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 Spring 框架的一部分,用于构建Web应用程序。它简化了开发流程,提供了强大的数据绑定、自动验证和异常处理等功能。本...
通过这个"Spring mvc入门Demo资料",新手可以学习如何创建一个简单的Spring MVC项目,理解控制器的编写、视图的展示以及如何处理HTTP请求。实际运行这个Demo,能帮助初学者更好地理解Spring MVC的工作原理,并为...
这个入门Demo是Spring MVC学习的起点,展示了如何搭建一个基础的Spring MVC应用并实现简单的请求处理。随着对框架的深入理解,可以学习更多高级特性,如模型绑定、数据验证、异常处理、RESTful API设计、视图技术...
Spring MVC入门教程
总结一下,Spring MVC入门涉及的关键概念有: 1. `DispatcherServlet`:作为请求分发器。 2. XML配置:定义组件,如视图解析器、处理器映射器和处理器适配器。 3. 注解配置:使用`@Controller`、`@RequestMapping`等...
本入门案例将带你逐步了解如何使用 Spring MVC 创建一个简单的 Web 应用。 首先,我们需要了解 Spring MVC 的核心组件和工作流程: 1. **DispatcherServlet**:作为所有请求的前端控制器,它负责接收请求并分派到...
**Spring MVC 入门示例** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,用于构建动态 Web 应用程序。它提供了处理 HTTP 请求、数据绑定、异常处理等功能,使得开发者可以更专注于业务逻辑,而不是...
Spring MVC 入门级资料 Spring MVC 是一个基于 Java 的 Web 框架,它提供了一种灵活、可扩展、Easy-to-use 的 Web 应用程序开发方式。Spring MVC 是 Spring 框架的一部分,提供了一个强大、灵活、可扩展的 MVC 框架...