大家好:我想在已经搞好的spring3.0 mvc restFul 上面把视图层换成FreeMarker,我现在的代码是从本网站http://download.csdn.net/source/2226304下载的,很好用,可它里面是用jsp做为视图层,我现在想把他换成FreeMarker,我主要的改动是把springmvc-servlet:
<?xml version="1.0" encoding="UTF-8"?><!--
修改说明:
1.修改<context:component-scan以确定要加载的controller,默认为com.**.controller
2.修改class=ControllerClassNameHandlerMapping节点的pathPrefix以确定要生成的前缀
-->
<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"
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"
default-autowire="byName"> <!-- 自动搜索@Controller标注的类 -->
<context:component-scan base-package="com.**.controller" /> <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- Default ViewResolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/pages"/>
<property name="suffix" value=".jsp"></property>
</bean> <bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="i18n/messages" /> <!-- Mapping exception to the handler view -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props></props>
</property>
</bean></beans>
换成
<?xml version="1.0" encoding="UTF-8"?><!--
修改说明:
1.修改<context:component-scan以确定要加载的controller,默认为com.**.controller
2.修改class=ControllerClassNameHandlerMapping节点的pathPrefix以确定要生成的前缀
-->
<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"
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"
default-autowire="byName"> <!-- 自动搜索@Controller标注的类 -->
<context:component-scan base-package="com.**.controller" /> <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- Default ViewResolver -->
<!--
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/pages"/>
<property name="suffix" value=".jsp"></property>
</bean>
-->
<bean id="freeerResolver"
class="org.springframework.web.servlet.view.freeer.FreeMarkerViewResolver">
<property name="order" value="1" />
<property name="prefix" value="/WEB-INF/pages" />
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html;charset=utf-8" />
<property name="viewClass">
<value>
org.springframework.web.servlet.view.freeer.FreeMarkerView
</value>
</property>
</bean> <bean id="freeerConfig"
class="org.springframework.web.servlet.view.freeer.FreeMarkerConfigurer"> <property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="i18n/messages" /> <!-- Mapping exception to the handler view -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props></props>
</property>
</bean></beans>控制类:
/*
* Powered By [rapid-framework]
* Web Site: http://www.rapid-framework.org.cn
* Google Code: http://code.google.com/p/rapid-framework/
*/
package com.company.project.controller.demo;import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import cn.org.rapid_framework.page.Page;
import cn.org.rapid_framework.page.PageRequest;import java.util.*;import javacommon.base.*;
import javacommon.util.*;import cn.org.rapid_framework.util.*;
import cn.org.rapid_framework.web.util.*;
import cn.org.rapid_framework.page.*;
import cn.org.rapid_framework.page.impl.*;import com.company.project.model.*;
import com.company.project.dao.*;
import com.company.project.service.*;/**
* @author badqiu email:badqiu(a)gmail.com
* @version 1.0
* @since 1.0
*/@Controller
@RequestMapping("/userinfo")
public class UserInfoController extends BaseRestSpringController<UserInfo,java.lang.Long>{
//默认多列排序,example: username desc,createTime asc
protected static final String DEFAULT_SORT_COLUMNS = null;
private UserInfoManager userInfoManager;
private final String LIST_ACTION = "redirect:/userinfo";
/**
* 增加setXXXX()方法,spring就可以通过autowire自动设置对象属性
**/
public void setUserInfoManager(UserInfoManager manager) {
this.userInfoManager = manager;
}
/** 列表 */
@Override
public ModelAndView index(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) {
PageRequest<Map> pageRequest = newPageRequest(request,DEFAULT_SORT_COLUMNS);
return new ModelAndView("/userinfo/index","userInfo","我成功了"); }
/** 进入新增 */
@Override
public ModelAndView _new(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) throws Exception {
return new ModelAndView("/userinfo/new","userInfo",userInfo);
}
/** 显示 */
@Override
public ModelAndView show(@PathVariable java.lang.Long id) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
return new ModelAndView("/userinfo/show","userInfo",userInfo);
}
/** 编辑 */
@Override
public ModelAndView edit(@PathVariable java.lang.Long id) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
return new ModelAndView("/userinfo/edit","userInfo",userInfo);
}
/** 保存新增 */
@Override
public ModelAndView create(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) throws Exception {
userInfoManager.save(userInfo);
return new ModelAndView(LIST_ACTION);
}
/** 保存更新 */
@Override
public ModelAndView update(@PathVariable java.lang.Long id,HttpServletRequest request,HttpServletResponse response) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
bind(request,userInfo);
userInfoManager.update(userInfo);
return new ModelAndView(LIST_ACTION);
}
/** 删除 */
@Override
public ModelAndView delete(@PathVariable java.lang.Long id) {
userInfoManager.removeById(id);
return new ModelAndView(LIST_ACTION);
} /** 批量删除 */
@Override
public ModelAndView batchDelete(java.lang.Long[] items) {
for(int i = 0; i < items.length; i++) {
userInfoManager.removeById(items[i]);
}
return new ModelAndView(LIST_ACTION);
}
}访问url:http://localhost:8080/spfk/userinfo却报错:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Could not resolve view with name '/userinfo/index' in servlet with name 'springmvc'
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1042)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:71)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.28 logs.
--------------------------------------------------------------------------------
项目紧,还望高手们帮我尽快解决,本人不剩感激
<?xml version="1.0" encoding="UTF-8"?><!--
修改说明:
1.修改<context:component-scan以确定要加载的controller,默认为com.**.controller
2.修改class=ControllerClassNameHandlerMapping节点的pathPrefix以确定要生成的前缀
-->
<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"
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"
default-autowire="byName"> <!-- 自动搜索@Controller标注的类 -->
<context:component-scan base-package="com.**.controller" /> <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- Default ViewResolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/pages"/>
<property name="suffix" value=".jsp"></property>
</bean> <bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="i18n/messages" /> <!-- Mapping exception to the handler view -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props></props>
</property>
</bean></beans>
换成
<?xml version="1.0" encoding="UTF-8"?><!--
修改说明:
1.修改<context:component-scan以确定要加载的controller,默认为com.**.controller
2.修改class=ControllerClassNameHandlerMapping节点的pathPrefix以确定要生成的前缀
-->
<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"
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"
default-autowire="byName"> <!-- 自动搜索@Controller标注的类 -->
<context:component-scan base-package="com.**.controller" /> <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- Default ViewResolver -->
<!--
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/pages"/>
<property name="suffix" value=".jsp"></property>
</bean>
-->
<bean id="freeerResolver"
class="org.springframework.web.servlet.view.freeer.FreeMarkerViewResolver">
<property name="order" value="1" />
<property name="prefix" value="/WEB-INF/pages" />
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html;charset=utf-8" />
<property name="viewClass">
<value>
org.springframework.web.servlet.view.freeer.FreeMarkerView
</value>
</property>
</bean> <bean id="freeerConfig"
class="org.springframework.web.servlet.view.freeer.FreeMarkerConfigurer"> <property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="i18n/messages" /> <!-- Mapping exception to the handler view -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props></props>
</property>
</bean></beans>控制类:
/*
* Powered By [rapid-framework]
* Web Site: http://www.rapid-framework.org.cn
* Google Code: http://code.google.com/p/rapid-framework/
*/
package com.company.project.controller.demo;import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import cn.org.rapid_framework.page.Page;
import cn.org.rapid_framework.page.PageRequest;import java.util.*;import javacommon.base.*;
import javacommon.util.*;import cn.org.rapid_framework.util.*;
import cn.org.rapid_framework.web.util.*;
import cn.org.rapid_framework.page.*;
import cn.org.rapid_framework.page.impl.*;import com.company.project.model.*;
import com.company.project.dao.*;
import com.company.project.service.*;/**
* @author badqiu email:badqiu(a)gmail.com
* @version 1.0
* @since 1.0
*/@Controller
@RequestMapping("/userinfo")
public class UserInfoController extends BaseRestSpringController<UserInfo,java.lang.Long>{
//默认多列排序,example: username desc,createTime asc
protected static final String DEFAULT_SORT_COLUMNS = null;
private UserInfoManager userInfoManager;
private final String LIST_ACTION = "redirect:/userinfo";
/**
* 增加setXXXX()方法,spring就可以通过autowire自动设置对象属性
**/
public void setUserInfoManager(UserInfoManager manager) {
this.userInfoManager = manager;
}
/** 列表 */
@Override
public ModelAndView index(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) {
PageRequest<Map> pageRequest = newPageRequest(request,DEFAULT_SORT_COLUMNS);
return new ModelAndView("/userinfo/index","userInfo","我成功了"); }
/** 进入新增 */
@Override
public ModelAndView _new(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) throws Exception {
return new ModelAndView("/userinfo/new","userInfo",userInfo);
}
/** 显示 */
@Override
public ModelAndView show(@PathVariable java.lang.Long id) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
return new ModelAndView("/userinfo/show","userInfo",userInfo);
}
/** 编辑 */
@Override
public ModelAndView edit(@PathVariable java.lang.Long id) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
return new ModelAndView("/userinfo/edit","userInfo",userInfo);
}
/** 保存新增 */
@Override
public ModelAndView create(HttpServletRequest request,HttpServletResponse response,UserInfo userInfo) throws Exception {
userInfoManager.save(userInfo);
return new ModelAndView(LIST_ACTION);
}
/** 保存更新 */
@Override
public ModelAndView update(@PathVariable java.lang.Long id,HttpServletRequest request,HttpServletResponse response) throws Exception {
UserInfo userInfo = (UserInfo)userInfoManager.getById(id);
bind(request,userInfo);
userInfoManager.update(userInfo);
return new ModelAndView(LIST_ACTION);
}
/** 删除 */
@Override
public ModelAndView delete(@PathVariable java.lang.Long id) {
userInfoManager.removeById(id);
return new ModelAndView(LIST_ACTION);
} /** 批量删除 */
@Override
public ModelAndView batchDelete(java.lang.Long[] items) {
for(int i = 0; i < items.length; i++) {
userInfoManager.removeById(items[i]);
}
return new ModelAndView(LIST_ACTION);
}
}访问url:http://localhost:8080/spfk/userinfo却报错:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Could not resolve view with name '/userinfo/index' in servlet with name 'springmvc'
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1042)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:71)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.28 logs.
--------------------------------------------------------------------------------
项目紧,还望高手们帮我尽快解决,本人不剩感激
<bean id="freeerConfig"
class="org.springframework.web.servlet.view.freeer.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/templates/"/>
</bean>
<!--使用freeer的resolver-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freeer.FreeMarkerViewResolver">
<property name="viewClass">
<value>
org.springframework.web.servlet.view.freeer.FreeMarkerView
</value>
</property>
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.ftl</value>
</property>
<!-- 如果你需要使用Spring 对 FreeMarker 宏命令的支持, 将这个属性设为true -->
<property name="exposeSpringMacroHelpers" value="true" />
<property name="contentType" value="text/html;charset=utf-8"></property>
</bean>
<!--使用简单HandlerMapping-->
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/userinfo/index">UserController</prop>
</props>
</property>
</bean>
<bean id="UserController" class="com.company.project.controller.demo.UserInfoController"></bean>
为什么视图层使用jsp的话就可以使用restFul,而现在换成freeer却要使用简单HandlerMapping,因为我想达到restful的效果,该怎么配置呢?
我不知道是否是我自己的web.xml错误了还是他们的springmvc-servlet.xml错误,我运行起来就报错,对jsp支持到了好的,但一换上freeer配置:
<bean id="freeerConfig"
class="org.springframework.web.servlet.view.freeer.FreeMarkerConfigurer">
<property name="templateLoaderPath"
value="/WEB-INF/jsp/" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freeer.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
</bean>
就报错:
javax.servlet.ServletException: Servlet.init() for servlet hello threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Thread.java:595)root causeorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewResolver' defined in ServletContext resource [/WEB-INF/hello-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'viewClass' threw exception; nested exception is java.lang.IllegalArgumentException: Given view class [org.springframework.web.servlet.view.freeer.FreeMarkerViewResolver] is not of type [org.springframework.web.servlet.view.InternalResourceView]
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1341)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:443)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:459)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:340)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:307)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Thread.java:595)root causeorg.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'viewClass' threw exception; nested exception is java.lang.IllegalArgumentException: Given view class [org.springframework.web.servlet.view.freeer.FreeMarkerViewResolver] is not of type [org.springframework.web.servlet.view.InternalResourceView]
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1338)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:443)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:459)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:340)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:307)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Thread.java:595)
我也是Spring 入门级的
帮你顶下吧
我也是刚接触springMVC正在辛苦学习中
如方便的话 加QQ 330120034 以后共同研究!
帮你顶下吧
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- session超时定义,单位为分钟 -->
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener> <!-- Spring ApplicationContext配置文件的路径�,可使用通配符,多个路径用�1,号分隔
此参数用于后面的Spring-Context loader --> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:resources/spring/applicationContext-security.xml
</param-value>
</context-param> <!--
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/*.xml</param-value>
</context-param>
-->
<!-- 默认i18n资源文件 -->
<!--
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>i18n/messages</param-value>
</context-param>
-->
<!-- 默认首页定义 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list> <!--============================= Error Page定义 =================================================-->
<error-page>
<error-code>500</error-code>
<location>/commons/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/commons/404.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/commons/403.jsp</location>
</error-page>
<!-- ================================Spring Mvc =====================================-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- ============================== SpringSecurity filter ================================================= --> <filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!--==================================== 自定义过滤器 ===================================-->
<filter>
<filter-name>webControlFilter</filter-name>
<filter-class>
com.huawei.portal.filter.WebControlFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>webControlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!--==================================== 著名 Character Encoding filter ===================================-->
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- =========================使Spring支持request与session的scope,如:<bean id="loginAction" class="com.foo.LoginAction" scope="request"/> ==================================-->
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener> <!-- ================================Spring 刷新Introspector防止内存泄露 =====================================-->
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<!-- =========================== HiddenHttpMethodFilter ==================================================-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>
org.springframework.web.filter.HiddenHttpMethodFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>springmvc</servlet-name>
</filter-mapping> <!-- =============================== sitemesh start =======================================================-->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>sitemesh-freeer</servlet-name>
<servlet-class>
com.opensymphony.module.sitemesh.freeer.FreeerDecoratorServlet
</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-freeer</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping> <!-- not required for containers that fully support JSP 1.2 -->
<taglib>
<taglib-uri>sitemesh-page</taglib-uri>
<taglib-location>
/WEB-INF/lib/sitemesh-page.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>sitemesh-decorator</taglib-uri>
<taglib-location>
/WEB-INF/lib/sitemesh-decorator.tld
</taglib-location>
</taglib> <!-- =================================================== sitemesh end =======================================-->
<!-- ===================== 访问静态的/static/ 如http://localhost/foo.css ,则要换成http://localhost/static/foo.css -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping></web-app>
<!-- ============================== SpringSecurity filter --> <filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>此配置是用与Security登陆用的,如果不用可以去掉
<!-- =============================== sitemesh start =======================================================-->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>sitemesh-freeer</servlet-name>
<servlet-class>
com.opensymphony.module.sitemesh.freeer.FreeerDecoratorServlet
</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-freeer</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping> <!-- not required for containers that fully support JSP 1.2 -->
<taglib>
<taglib-uri>sitemesh-page</taglib-uri>
<taglib-location>
/WEB-INF/lib/sitemesh-page.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>sitemesh-decorator</taglib-uri>
<taglib-location>
/WEB-INF/lib/sitemesh-decorator.tld
</taglib-location>
</taglib> <!-- =================================================== sitemesh end =======================================-->此配置是sitemesh配置,如果不用可以去掉
除了上面所讲外,web.xml的其他配置就是spring3.0 restful 的配置
2. springmvc-servlet.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?><!--
修改说明:
1.修改<context:component-scan以确定要加载的controller,默认为com.**.controller
2.修改class=ControllerClassNameHandlerMapping节点的pathPrefix以确定要生成的前缀
-->
<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"
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"
default-autowire="byName"> <!-- ============================ 自动搜索@Controller标注的类 ===================================== -->
<context:component-scan base-package="com.**.controller" /> <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- ============================ ftl文件位置 ============================ --> <bean id="freeerConfig"
class="org.springframework.web.servlet.view.freeer.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/pages/" />
<property name="freeerSettings">
<props>
<prop key="template_update_delay">1</prop>
<prop key="defaultEncoding">UTF-8</prop><!-- 乱码 重点在这里 也可以改成gb2312-->
<prop key="classic_compatible">true</prop><!-- 为null时候替换成空,而不报错--> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="time_format">HH:mm:ss</prop>
<prop key="number_format">0.######</prop>
<prop key="boolean_format">true,false</prop>
<!--
<prop key="auto_import">"index.ftl" as p</prop>
<prop key="whitespace_stripping">true</prop>
<prop key="tag_syntax">auto_detect</prop>
<prop key="url_escaping_charset">UTF-8</prop>
-->
</props>
</property> </bean> <bean id="viewResolver"
class="org.springframework.web.servlet.view.freeer.FreeMarkerViewResolver">
<property name="viewClass">
<value>
org.springframework.web.servlet.view.freeer.FreeMarkerView
</value>
</property>
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.ftl</value>
</property> <property name="exposeSpringMacroHelpers" value="true" />
<property name="contentType" value="text/html;charset=utf-8"></property>
</bean> <!--
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="i18n/messages" />
--> <!-- i18n Resource Bundle -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>resources/i18n/messages</value>
</list>
</property>
</bean><!--
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> <bean id="defaultUrlMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="interceptors"
ref="localeChangeInterceptor" />
<property name="order">
<value>1</value>
</property>
</bean>
-->
</beans>
<sitemesh>
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>
<excludes file="${decorators-file}"/> <page-parsers>
<parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
</page-parsers> <decorator-mappers> <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
<param name="property.1" value="meta.decorator" />
<param name="property.2" value="decorator" />
</mapper> <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
</mapper> <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
<param name="match.MSIE" value="ie" />
<param name="match.Mozilla [" value="ns" />
<param name="match.Opera" value="opera" />
<param name="match.Lynx" value="lynx" />
</mapper> <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
<param name="decorator" value="printable" />
<param name="parameter.name" value="printable" />
<param name="parameter.value" value="true" />
</mapper> <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
<param name="decorator" value="robot" />
</mapper> <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
<param name="decorator.parameter" value="decorator" />
<param name="parameter.name" value="confirm" />
<param name="parameter.value" value="true" />
</mapper> <mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
</mapper> <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
<param name="config" value="${decorators-file}" />
</mapper> </decorator-mappers></sitemesh>
4. decorators.xml配置:
<?xml version="1.0" encoding="utf-8"?><decorators defaultdir="/WEB-INF/decorators">
<!-- Any urls that are excluded will never be decorated by Sitemesh -->
<excludes>
<pattern>/index.jsp</pattern>
<pattern>/exclude/*</pattern>
</excludes> <decorator name="default" page="head_demo.ftl">
<pattern>/userinfo*</pattern>
</decorator>
<!--
<decorator name="nohead" page="nohead_demo.ftl">
<pattern>/nohea</pattern>
</decorator>
-->
</decorators>5.所用类如下:
/*
* Powered By [rapid-framework]
* Web Site: http://www.rapid-framework.org.cn
* Google Code: http://code.google.com/p/rapid-framework/
*/package com.huawei.portal.controller.demo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;import com.huawei.portal.model.Info;
import com.huawei.portal.model.UserInfo;
import com.huawei.portal.support.base.BaseSpringController;/**
* @author badqiu email:badqiu(a)gmail.com
* @version 1.0
* @since 1.0
*/@Controller
@RequestMapping("/userinfo")
public class UserInfoController extends BaseSpringController<UserInfo,java.lang.Long>{
private final String LIST_ACTION = "redirect:/userinfo";
/** 列表 */
@RequestMapping(value="/test")
public ModelAndView test(HttpServletRequest request,
HttpServletResponse response, Info userInfos,UserInfo userInfo) {
this.reqMap.put("message", "我成功了userinfo");
//return new ModelAndView("/userinfo/index", "userInfo", "我成功了userinfo");
return this.toModelAndView("/userinfo/index", request);
}
/** 列表 */
@Override
public ModelAndView index(HttpServletRequest request,
HttpServletResponse response, UserInfo userInfo) {
this.reqMap.put("message", "我成功了userinfo");
//this.reqMap.put("hahaha", this.getMessageSourceAccessor().getMessage("label.head.title.mydemo"));
this.reqMap.put("hahaha",this.getMessageResByKey("label.head.title.mydemoccc"));
//return new ModelAndView("/userinfo/index", "userInfo", "我成功了userinfo");
return this.toModelAndView("/userinfo/index", request);
} /** 进入新增 */
@Override
public ModelAndView _new(HttpServletRequest request,
HttpServletResponse response, UserInfo userInfo) throws Exception {
return new ModelAndView("/userinfo/new", "userInfo", userInfo);
}
/** 编辑 */
@Override
public ModelAndView edit(@PathVariable Long id) throws Exception {
return new ModelAndView("/userinfo/edit", "userInfo", id);
}
/** 保存新增 */
@Override
public ModelAndView create(HttpServletRequest request,HttpServletResponse response,UserInfo model) throws Exception {
return new ModelAndView(LIST_ACTION, "userInfo", model);
}
/** 保存更新 */
@Override
public ModelAndView update(@PathVariable Long id,HttpServletRequest request,HttpServletResponse response) throws Exception {
return new ModelAndView(LIST_ACTION, "userInfo", id);
}
/** 删除 */
@Override
public ModelAndView delete(@PathVariable Long id) {
return new ModelAndView(LIST_ACTION, "userInfo", id);
}}