论坛首页 Java企业应用论坛

基于注解的SpringMVC+freemarker环境搭建

浏览 15703 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-19   最后修改:2012-03-19
这种帖子网上也有不少,自己写出来也是做为一种补充,SpringMvc+freemarker确实是MVC不错的实现。废话不多说了,下面是自己利用eclipse搭建的一个简单的springMVC+freemarker

1  首先用IDE建一个web工程。(这个就不详细介绍了)

2  引入响应的jar包

3  一切web工程的配置都从web.xml开始,现在就看下web.xml都要配置啥
<?xml version="1.0" ?>
<web-app 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_3_0.xsd"
	version="3.0">
	<!--  Spring 服务层的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
	
	<!--  Spring 容器启动监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!--为DispatcherServlet建立映射 -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>


4 SpringMVC另外一个重要的配置文件。
DispatcherServlet会根绝web.xml中配置的<servlet-name>去找<servlet-name>-servlet.xml的文件来加载spring的一些配置信息。我这里就应该取名叫springmvc-servlet.xml
<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	
	<!--对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
	<context:component-scan base-package="com.liba.spring.mvc"/>
	
	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射   请求映射-->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	
        <!--以下三种视图配置根据需要任选一种即可 -->

	<!--  一般的视图配置 -->
	<!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
		p:prefix="/WEB-INF/view/" p:suffix=".jsp"/>-->
	
	<!-- 针对freemarker的视图配置 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
		<property name="cache" value="true" />
		<property name="prefix" value="" />
		<property name="suffix" value=".ftl" />
		<property name="contentType" value="text/html;charset=UTF-8"></property>
		<property name="requestContextAttribute" value="request" />
		<property name="exposeSpringMacroHelpers" value="true" />
		<property name="exposeRequestAttributes" value="true" />
		<property name="exposeSessionAttributes" value="true" />
	</bean>
		
		
	<!-- View resolvers can also be configured with ResourceBundles or XML files. 
		If you need different view resolving based on Locale, you have to use the 
		resource bundle resolver. -->
	<!-- 这个是针对返回视图还是json值的视图配置   来分别处理同步和异步请求 -->
	<!--<bean
			class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
			<property name="mediaTypes">
				<map>
					<entry key="html" value="text/html" />
					<entry key="json" value="application/json" />
				</map>
			</property>
			<property name="favorParameter" value="true" />
			<property name="viewResolvers">
				<list>
					<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
					<bean id="viewResolver"
						class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
						<property name="cache" value="true" />
						<property name="prefix" value="" />
						<property name="suffix" value=".ftl" />
						<property name="contentType" value="text/html;charset=UTF-8"></property>
						<property name="requestContextAttribute" value="request" />
						<property name="exposeSpringMacroHelpers" value="true" />
						<property name="exposeRequestAttributes" value="true" />
						<property name="exposeSessionAttributes" value="true" />
					</bean>
				</list>
			</property>
			<property name="defaultContentType" value="text/html" />
		</bean>
		-->
</beans>


如果是使用freemarker最为视图模板需要再spring的配置文件applicationContext.xml中加入以下配置
<bean id="freemarkerConfig"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="/WEB-INF/view/" />
		<property name="freemarkerSettings">
			<props>
				<prop key="template_update_delay">0</prop>
				<prop key="default_encoding">UTF-8</prop>
				<prop key="number_format">0.##########</prop>
				<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
				<prop key="classic_compatible">true</prop>
				<prop key="template_exception_handler">ignore</prop>
			</props>
		</property>
	</bean>



5  Controller建立
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class SpringMvcController {

	@RequestMapping(value="/welcome",method={RequestMethod.GET}) 
	public ModelAndView getFirstPage(HttpServletRequest request) {
                //welcom就是视图的名称(welcom.ftl)
		ModelAndView mv = new ModelAndView("welcom");
		mv.addObject("name", "My First Spring Mvc");
		return mv;
	}
}


在url上敲http://localhost:8080/welcome就会到WEB-INF/view/welcom.ftl页面渲染数据

welcom.ftl页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Hello ${name}
</body>
</html>




页面出来的效果:

Hello My First Spring Mvc
  • DC.rar (6.5 MB)
  • 下载次数: 74
   发表时间:2012-03-21  
<bean 
            class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">这个是多视图协商,求使用经验和讲解
0 请登录后投票
   发表时间:2012-03-21  
正需要这块的资料,谢谢分享
0 请登录后投票
   发表时间:2012-03-21  
及时雨啊.刚好需要.谢谢.
0 请登录后投票
   发表时间:2012-03-22  
嗯 写的不错 挺详细的
0 请登录后投票
   发表时间:2012-03-22  
web.xml配置有误,如果使用springmvc的话,不要配置listener 否则会有两个对象容器,会造成一些错误
0 请登录后投票
   发表时间:2012-03-22  

<?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">
 <context-param>
  <param-name>contextConfig</param-name>
  <param-value>/WEB-INFO/springmvc3-servlet.xml</param-value>
 </context-param>
 <servlet>
  <servlet-name>springmvc3</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>springmvc3</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>
 用spingmvc3 web.xml文件如上配置就行了,不需要用listener加载spring对象容器了
0 请登录后投票
   发表时间:2012-03-23  
moyue 写道

 

<?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">
 <context-param>
  <param-name>contextConfig</param-name>
  <param-value>/WEB-INFO/springmvc3-servlet.xml</param-value>
 </context-param>
 <servlet>
  <servlet-name>springmvc3</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>springmvc3</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>
 用spingmvc3 web.xml文件如上配置就行了,不需要用listener加载spring对象容器了

 

 

你这样写不对吧,“contextConfig” 谁读呢??

 

 

最近在写跟我学spring Web MVC ,正好画了张图 一起学习下 

 


 

 

ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、ServiceBean

 

DispatcherServlet初始化的上下文加载的Bean是只对Spring Web MVC有效的BeanControllerHandlerMappingHandlerAdapter等等,该初始化上下文应该只加载Web相关组件。

 

 

 

以下是 DispatcherServlet 初始化 上下文 的 代码

 

protected WebApplicationContext initWebApplicationContext() {
        //ROOT上下文(ContextLoaderListener加载的)
		WebApplicationContext rootContext =
				WebApplicationContextUtils.getWebApplicationContext(getServletContext());
		WebApplicationContext wac = null;
		if (this.webApplicationContext != null) {
			// 1、在创建该Servlet注入的上下文
			wac = this.webApplicationContext;
			if (wac instanceof ConfigurableWebApplicationContext) {
				ConfigurableWebApplicationContext cwac = (ConfigurableWebApplicationContext) wac;
				if (!cwac.isActive()) {
					if (cwac.getParent() == null) {
						cwac.setParent(rootContext);
					}
					configureAndRefreshWebApplicationContext(cwac);
				}
			}
		}
		if (wac == null) {
             //2、查找已经绑定的上下文
			wac = findWebApplicationContext();
		}
		if (wac == null) {
             //3、如果没有找到相应的上下文,并指定父亲为ContextLoaderListener
			wac = createWebApplicationContext(rootContext);
		}
		if (!this.refreshEventReceived) {
             //4、刷新上下文(执行一些初始化)
			onRefresh(wac);
		}
		if (this.publishContext) {
			// Publish the context as a servlet context attribute.
			String attrName = getServletContextAttributeName();
			getServletContext().setAttribute(attrName, wac);
			//省略部分代码
		}
		return wac;
	}
 

 

  • 大小: 27 KB
0 请登录后投票
   发表时间:2012-03-25  
moyue 写道
web.xml配置有误,如果使用springmvc的话,不要配置listener 否则会有两个对象容器,会造成一些错误

什么错误呢? 能不能贴出来给我看下。我没发现有什么错误啊。 这两个是不冲突的。我这里只是简单的描述了下springMvc的流程。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics