关于 spring3 和spring4 中返回json 以及调用 js 和对原项目的修改

38 篇文章 0 订阅

原项目:点击打开链接

1、修改后项目目录结构,配置文件放置WEB-INF下的文件夹中:




2、controller 的修改,添加了非String 的JSONArray对象返回浏览器:

package com.busymonkey.controller;

import java.util.List;

import org.jboss.logging.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.busymonkey.entity.TestEntity;
import com.busymonkey.service.TestService;

import net.sf.json.JSONArray;

@Controller
public class TestController {
	private static final Logger logger = Logger.getLogger(TestController.class);

	public TestController() {
		System.out.println("EmployeeController()");
	}

	@Autowired
	private TestService employeeService;

	@RequestMapping("/createEmployee")
	@ResponseBody
	public String createEmployee() {
		TestEntity employee = new TestEntity("busymonkey", 25, 10000);
		employeeService.createEmployee(employee);
		logger.info("Creating Employee. Data: " + employee);
		return "done!";
	}

	@RequestMapping("/queryEmployee")
	@ResponseBody
	public JSONArray queryEmployee() {
		List<TestEntity> employees = employeeService.getAllEmployees();
		JSONArray array = null;
		try {
			array = JSONArray.fromObject(employees);
			System.out.println(employees);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return array;
	}
}



3、dispatch修改了几个地方,一个是指定jdbc配置文件的位置,这里是在WEB-INF目录下的文件夹,但是这里调用easyui的时候不能放到WEB-INF目录下,应该是因为某些安全文件夹的问题,再就是加入了对非String 的 JSONArray对象返回浏览器的支持,这里还是不兼容IE(会弹出下载),360,谷歌都是可以的,再就是需要注意的是

  1. <mvc:annotation-driven  
  2.         content-negotiation-manager="contentNegotiationManager" />
加入的这部分标签是需要spring4支持的,即pom依赖中 4.1.5.RELEASE 的 springframework:

<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:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- Specifying base package of the Components like Controller, Service, 
		DAO -->
	<context:component-scan base-package="com.busymonkey" />

	<mvc:annotation-driven
		content-negotiation-manager="contentNegotiationManager" />
	<bean id="contentNegotiationManager"
		class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
		<property name="favorPathExtension" value="false" />
		<property name="favorParameter" value="false" />
		<property name="ignoreAcceptHeader" value="false" />
		<property name="mediaTypes">
			<value>
				atom=application/atom+xml
				html=text/html
				json=application/json
				*=*/*
			</value>
		</property>
	</bean>

	<!-- Getting Database properties -->
	<context:property-placeholder
		location="./WEB-INF/properties/application.properties" />

	<!-- View Resolver -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<!-- DataSource -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="${database.driverClass}" />
		<property name="jdbcUrl" value="${database.url}" />
		<property name="user" value="${database.username}" />
		<property name="password" value="${database.password}" />
		<property name="acquireIncrement" value="${connection.acquireIncrement}" />
		<property name="minPoolSize" value="${connection.minPoolSize}" />
		<property name="maxPoolSize" value="${connection.maxPoolSize}" />
		<property name="maxIdleTime" value="${connection.maxIdleTime}" />
	</bean>

	<!-- Hibernate SessionFactory -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
			</props>
		</property>
		<property name="packagesToScan" value="com.busymonkey.entity"></property>
	</bean>

	<!-- Transaction -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>



4、welcome.jsp,加入了对easyui的简单调用:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
	<title>Basic Panel - jQuery EasyUI Demo</title>
	<link rel="stylesheet" type="text/css" href="./easyui/themes/default/easyui.css">
	<link rel="stylesheet" type="text/css" href="./easyui/themes/icon.css">
	<link rel="stylesheet" type="text/css" href="./easyui/demo/demo.css">
	<script type="text/javascript" src="./easyui/jquery.min.js"></script>
	<script type="text/javascript" src="./easyui/jquery.easyui.min.js"></script>
<title>Insert title here</title>
</head>
<body>
	<h2>Basic Panel</h2>
	<p>The panel is a container for other components or elements.</p>
	<div style="margin: 20px 0 10px 0;">
		<a href="#" class="easyui-linkbutton"
			οnclick="javascript:$('#p').panel('open')">Open</a> <a href="#"
			class="easyui-linkbutton" οnclick="javascript:$('#p').panel('close')">Close</a>
	</div>
	<div id="p" class="easyui-panel" title="Basic Panel"
		style="width: 700px; height: 200px; padding: 10px;">
		<p style="font-size: 14px">jQuery EasyUI framework helps you build
			your web pages easily.</p>
		<ul>
			<li>easyui is a collection of user-interface plugin based on
				jQuery.</li>
			<li>easyui provides essential functionality for building modem,
				interactive, javascript applications.</li>
			<li>using easyui you don't need to write many javascript code,
				you usually defines user-interface by writing some HTML markup.</li>
			<li>complete framework for HTML5 web page.</li>
			<li>easyui save your time and scales while developing your
				products.</li>
			<li>easyui is very easy but powerful.</li>
		</ul>
	</div>

</body>
</html>



5、web.xml,这里的mapping映射原来是  /  斜杠,但是很奇葩的是这样就无法引用调用了 js 脚本的jsp页面,不知道是不是因为js脚本不在WEB-INF文件夹下的原因,但是目前还不知道怎么配置使得js能放在WEB-INF文件夹下,这里要请求添加和查询数据库就需要加上htnl的后缀,否则找不到映射:(用"/"访问js文件,把js文件放在WEB-INF文件夹外,然后直接用/***/***.js的形式来访问)

<?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">
 <display-name>Spring4 MVC Hibernate4 Application</display-name>
    
    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>  
        <welcome-file>welcome.jsp</welcome-file>  
    </welcome-file-list>
</web-app>




7、关于浏览器接收json返回数据的问题这里先保留,之后再修改,对于目前返回的json数据,还需要pom引入两个库才行,以下是修改后的pom.xml,注意的是之前有两个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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>springmvc</groupId>
	<artifactId>springmvc</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<!-- Specifying the Versions of Spring, Hiberante, MySQL etc -->
	<properties>
		<spring.version>4.1.5.RELEASE</spring.version>
		<hibernate.version>4.3.8.Final</hibernate.version>
		<mysql.version>5.1.10</mysql.version>
		<junit-version>4.11</junit-version>
		<servlet-api-version>3.1.0</servlet-api-version>
		<jsp-version>2.1</jsp-version>
		<jstl-version>1.2</jstl-version>
		<java.version>1.7</java.version>
	</properties>

	<!-- Specifying the Dependencies -->
	<dependencies>

		<!-- Spring 4 dependencies -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</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.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
			<scope>test</scope>
		</dependency>

		<!-- Hibernate 4 dependencies -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-c3p0</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

		<!--MYSQL Connector -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>

		<!-- Servlet and JSP -->
		<!-- <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> 
			<version>${servlet-api-version}</version> </dependency> -->

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>${jsp-version}</version>
			<scope>provided</scope>
		</dependency>

		<!-- JSTL dependency -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>${jstl-version}</version>
		</dependency>

		<!-- JUnit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit-version}</version>
			<scope>test</scope>
		</dependency>

		<!-- json 
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-asl</artifactId>
			<version>1.8.5</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.8.5</version>
		</dependency>-->
		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.4.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.4.1.1</version>
		</dependency>

	</dependencies>
</project>



第二篇:

关于json返回的问题:

以下是在springframework 3.1.1 版本的应配置:

1、如果按照项目点击打开链接的dispatch来配置(也就是什么额外的标签都不加)但是直接用  @ResponseBody 来返回String ,IE浏览器是有问题的,360、谷歌是可以的;直接用  @ResponseBody 来返回Map ,都会返回406错误:The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers;如果什么也不加,直接返回,是不行的,如下:

@RequestMapping("/test1")  
    public String test1() {   
        String message = "test1 = ModelAndView + String!";  
        return message;  
    }


2、如果按以下 dispatch 和 pom 依赖来配置,是可以解决以上406的问题,但是IE浏览器会提示下载 json 数据,360和谷歌是可以正常显示的。

dispatch:

<?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:p="http://www.springframework.org/schema/p"  
 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/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">  
    
 <context:component-scan base-package="com.busymonkey" />   
 <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
  <property name="prefix" value="/WEB-INF/jsp/" />  
  <property name="suffix" value=".jsp" />  
 </bean>  
 <mvc:annotation-driven />
   
</beans>


添加的pom关于 json 的依赖:

    <dependency>   
        <groupId>org.codehaus.jackson</groupId>   
        <artifactId>jackson-core-asl</artifactId>   
        <version>1.8.5</version>   
    </dependency>   
    <dependency>   
        <groupId>org.codehaus.jackson</groupId>   
        <artifactId>jackson-mapper-asl</artifactId>   
        <version>1.8.5</version>   
    </dependency>


3、通过 @ResponseBody 来返回 JSONArray 对象,加入pom依赖:

<dependency>  
            <groupId>net.sf.json-lib</groupId>  
            <artifactId>json-lib</artifactId>  
            <version>2.4</version>  
        </dependency>


但是在sprinframework 4.1.5 版本下,使用以上配置返回JSONArray 数据也会返回 406 错误.

1、spring 4 版本基础配置如下,dispatch,不需要加版本号了:

<?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:p="http://www.springframework.org/schema/p"  
 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.xsd  
  http://www.springframework.org/schema/context  
  http://www.springframework.org/schema/context/spring-context.xsd  
  http://www.springframework.org/schema/mvc  
  http://www.springframework.org/schema/mvc/spring-mvc.xsd">  
    
 <mvc:annotation-driven />   
    
 <context:component-scan base-package="com.busymonkey" />
 <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
  <property name="prefix" value="/WEB-INF/jsp/" />  
  <property name="suffix" value=".jsp" />  
 </bean>  

   
</beans>
pom依赖:

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.1.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.1.5.RELEASE</version>
		</dependency>


2、对于返回String类型对象,只需要添加dispatch,同样添加完之后是不兼容IE:

<?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:p="http://www.springframework.org/schema/p"  
 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.xsd  
  http://www.springframework.org/schema/context  
  http://www.springframework.org/schema/context/spring-context.xsd  
  http://www.springframework.org/schema/mvc  
  http://www.springframework.org/schema/mvc/spring-mvc.xsd">  
    
 <mvc:annotation-driven  
        content-negotiation-manager="contentNegotiationManager" />  
    <bean id="contentNegotiationManager"  
        class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">  
        <property name="favorPathExtension" value="false" />  
        <property name="favorParameter" value="false" />  
        <property name="ignoreAcceptHeader" value="false" />  
        <property name="mediaTypes">  
            <value>  
                atom=application/atom+xml  
                html=text/html  
                json=application/json  
                *=*/*  
            </value>  
        </property>  
    </bean>   
    
 <context:component-scan base-package="com.busymonkey" />
 <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
  <property name="prefix" value="/WEB-INF/jsp/" />  
  <property name="suffix" value=".jsp" />  
 </bean>  

   
</beans>



对于返回 json 格式对象,需要加入pom依赖,之前 spring 3.1.1 版本使用的依赖就可以去掉,可以注意这里是注释起来的:

<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.busymonkey</groupId>
	<artifactId>springDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.1.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.1.5.RELEASE</version>
		</dependency>
		<!--  <dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-asl</artifactId>
			<version>1.8.5</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.8.5</version>
		</dependency>-->
		<dependency>  
            <groupId>net.sf.json-lib</groupId>  
            <artifactId>json-lib</artifactId>  
            <version>2.4</version>  
        </dependency>
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-core</artifactId>  
            <version>2.4.1</version>  
        </dependency>  
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-databind</artifactId>  
            <version>2.4.1.1</version>  
        </dependency>

	</dependencies>
</project>



servlet-mapping干什么用的

主要是截获请求的,
如果你的url-pattern定义的是路径,那么以后所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理;
如果你的url-pattern定义的是资源格式例如*.do等,那么对于所有符合这种格式的资源的请求都由指定的servlet处理。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值