原项目:点击打开链接
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 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,谷歌都是可以的,再就是需要注意的是
atom=application/atom+xml
html=text/html
json=application/json
*=*/*
${hibernate.dialect}
${hibernate.hbm2ddl.auto}
${hibernate.format_sql}
${hibernate.show_sql}
4、welcome.jsp,加入了对easyui的简单调用:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Basic Panel - jQuery EasyUI Demo
Insert title here
Basic Panel
The panel is a container for other components or elements.
jQuery EasyUI framework helps you build
your web pages easily.
- easyui is a collection of user-interface plugin based on
jQuery.
- easyui provides essential functionality for building modem,
interactive, javascript applications.
- using easyui you don't need to write many javascript code,
you usually defines user-interface by writing some HTML markup.
- complete framework for HTML5 web page.
- easyui save your time and scales while developing your
products.
- easyui is very easy but powerful.
5、web.xml,这里的mapping映射原来是 / 斜杠,但是很奇葩的是这样就无法引用调用了 js 脚本的jsp页面,不知道是不是因为js脚本不在WEB-INF文件夹下的原因,但是目前还不知道怎么配置使得js能放在WEB-INF文件夹下,这里要请求添加和查询数据库就需要加上htnl的后缀,否则找不到映射:(用"/"访问js文件,把js文件放在WEB-INF文件夹外,然后直接用/***/***.js的形式来访问)
Spring4 MVC Hibernate4 Application
mvc-dispatcher
org.springframework.web.servlet.DispatcherServlet
1
mvc-dispatcher
*.html
welcome.jsp
7、关于浏览器接收json返回数据的问题这里先保留,之后再修改,对于目前返回的json数据,还需要pom引入两个库才行,以下是修改后的pom.xml,注意的是之前有两个json的库是注释起来的,但是之前的项目没有注释,暂时保留这两个库到底是否有用:
4.0.0
springmvc
springmvc
0.0.1-SNAPSHOT
war
src
maven-compiler-plugin
3.3
1.7
maven-war-plugin
2.6
WebContent
false
4.1.5.RELEASE
4.3.8.Final
5.1.10
4.11
3.1.0
2.1
1.2
1.7
org.springframework
spring-core
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-test
${spring.version}
test
org.hibernate
hibernate-core
${hibernate.version}
org.hibernate
hibernate-c3p0
${hibernate.version}
mysql
mysql-connector-java
${mysql.version}
javax.servlet
javax.servlet-api
3.1.0
javax.servlet.jsp
jsp-api
${jsp-version}
provided
jstl
jstl
${jstl-version}
junit
junit
${junit-version}
test
net.sf.json-lib
json-lib
2.4
com.fasterxml.jackson.core
jackson-core
2.4.1
com.fasterxml.jackson.core
jackson-databind
2.4.1.1
关于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:
org.codehaus.jackson
jackson-core-asl
1.8.5
org.codehaus.jackson
jackson-mapper-asl
1.8.5
3、通过 @ResponseBody 来返回 JSONArray 对象,加入pom依赖:
net.sf.json-lib
json-lib
2.4
但是在sprinframework 4.1.5 版本下,使用以上配置返回JSONArray 数据也会返回 406 错误.
1、spring 4 版本基础配置如下,dispatch,不需要加版本号了:
pom依赖:
org.springframework
spring-web
4.1.5.RELEASE
org.springframework
spring-webmvc
4.1.5.RELEASE
2、对于返回String类型对象,只需要添加dispatch,同样添加完之后是不兼容IE:
atom=application/atom+xml
html=text/html
json=application/json
*=*/*
4.0.0
com.busymonkey
springDemo
0.0.1-SNAPSHOT
war
src
maven-compiler-plugin
3.3
1.7
maven-war-plugin
2.6
WebContent
false
jstl
jstl
1.2
org.springframework
spring-web
4.1.5.RELEASE
org.springframework
spring-webmvc
4.1.5.RELEASE
net.sf.json-lib
json-lib
2.4
com.fasterxml.jackson.core
jackson-core
2.4.1
com.fasterxml.jackson.core
jackson-databind
2.4.1.1
主要是截获请求的,
如果你的url-pattern定义的是路径,那么以后所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理;
如果你的url-pattern定义的是资源格式例如*.do等,那么对于所有符合这种格式的资源的请求都由指定的servlet处理。