`

springMVC 下jsp和freemarker共同使用(双servlet解决方案)

阅读更多

freemarker和jsp更有优势,否则也不会有这篇文章了。

 

对于共同使用,网上也有文章,解决思路基本上有两种:

1.双servlet

2.单servlet,通过使用ResourceBundle方式,将配对url与对应的视图实现

 

这样看来其实原理都一样,第二种方法网上貌似都是基于spring2.5或者更早的,我没有配置成功。

 

这篇文章主要多强调了一些,我觉得很容易造成模糊,但其实很简单的一些问题(网上文章都没提)

 

来看第一种,双servlet。


第一步:配置servlet

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ftl</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<load-on-startup>3</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>ftl</servlet-name>
  	<url-pattern>*.ftl</url-pattern>
  </servlet-mapping>
 第二步:编写相关spring的servlet配置文件,这个是关键,我使用的Spring3,基于注释的,freemarker的设置中,字符集设置统一为UTF-8


很多说乱码的,大多数是你的ftl(即模板文件)本身的编码有问题!而这个情况如果你使用EditorPlus等工具时可能不能发现,因为这些工具很有可能自动会转换!

 

<!-- 自动搜索@Controller标注的类 -->
	<context:component-scan base-package="com.xxx.app.common.controller" />
	
	
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

    <!-- ===================================================== -->
    <!--           ViewResolver For FreeMarker                 -->
    <!-- ===================================================== -->
     <bean id="freemarkerResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">   
        <property name="order" value="1"/>   
        <property name="suffix" value=".ftl"/>   
        <property name="contentType" value="text/html;charset=utf-8"/>   
        <property name="viewClass">   
            <value>org.springframework.web.servlet.view.freemarker.FreeMarkerView</value>   
        </property>   
    </bean>   
    <!-- ===================================================== -->
    <!--    ViewResolver For FreeMarkerConfigurer              -->
    <!-- ===================================================== -->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    	<property name="templateLoaderPath"> 
    		<value>/</value> 
    	</property>
    	<property name="freemarkerSettings"><!-- 设置FreeMarker环境属性-->       
      		<props>     
	          <prop key="template_update_delay">5</prop><!--刷新模板的周期,单位为秒-->       
	          <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->     
	          <prop key="locale">zh_CN</prop><!-- 本地化设置-->
	          <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>

 注意,如果default_encoding是UTF-8,请保证你的工程项目是UTF-8编码的,如果是gbk什么的,即使你加入

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

 也没有用!

 

接下来要说一下

<property name="templateLoaderPath"> 
    		<value>/WEB-INF/freemarker/</value> 
</property>

 这个属性!

首先看一下一个control

@RequestMapping(value = "/left.ftl", method = RequestMethod.GET)
	public String left(@ModelAttribute Website website) {
		

		return "left";
	}

 他返回一个left

 

那么实际访问的路径就是 WEB-INF/freemarker/left.ftl,就是一个简单拼接

 

这样就可以实现jsp与freemarker互不干扰了。

 

当然如果项目开发完毕后,可以细化ftl的servlet配置,这样就不会让spring扫描两次同样的control了,这其中的开销是否很大我也不是很清楚了

 

分享到:
评论
5 楼 alieismy 2014-05-12  
<!-- Spring MVC Servlet -->
<servlet>
<servlet-name>springDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc/spring-mvc.xml</param-value>
</init-param>
<!-- 启动级别 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 覆盖default servlet的/, springmvc servlet将处理原来处理静态资源的映射 -->
<servlet-mapping>
<servlet-name>springDispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4 楼 alieismy 2014-05-12  
<!-- 定义FreeMarker -->
<!-- 需要返回的页面,返回html格式,也即return “login”,相当于跳转到login.html -->
<bean id="viewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="requestContextAttribute" value="ctp" />
        <property name="cache" value="true" />
        <property name="prefix" value="" />
        <property name="suffix" value=".html" />
        <property name="contentType" value="text/html;charset=UTF-8" />
        <property name="order" value="0" />
    </bean>

<!-- 定义JSP文件的位置 -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"  value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
<property name="order" value="1" />
</bean>
3 楼 sjbwylbs 2011-12-13  
单DispatcherServlet就可以,配置不同的ViewResolver即可.
2 楼 mxdba321123 2010-05-06  
srdrm 写道
不需要配两个DispatcherServlet, 一个就行,

请问 能给出思路或者是配置文件吗?

我也尝试过单servlet 但是没有成功
1 楼 srdrm 2010-05-05  
不需要配两个DispatcherServlet, 一个就行,

相关推荐

    springMvc+myBatis+freemarker+maven

    Spring MVC通过DispatcherServlet作为入口点,管理请求的路由,并支持多种视图技术,如JSP、Thymeleaf或Freemarker。 【MyBatis】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis...

    SpringMVC+Freemarker+Hibernate整合范例

    SpringMVC、Freemarker和Hibernate是Java Web开发中三个重要的技术组件,它们分别负责不同的职责:SpringMVC作为轻量级的MVC框架,负责处理请求和响应;Freemarker是一个模板引擎,用于生成动态HTML或其他格式的输出...

    springMvc+freemarker

    在这个"springMvc+freemarker"的项目中,我们可以看到作者用Spring MVC与FreeMarker模板引擎集成创建了一个示例应用。 首先,Spring MVC框架的主要组件包括DispatcherServlet、Controller、Model、View和...

    springMVC 多视图配置(Jsp Freemarket Json)实例

    在这个"springMVC 多视图配置(Jsp Freemarket Json)实例"中,我们将探讨如何在 SpringMVC 中设置多种视图解析器来支持 Jsp、FreeMarker 和 Json 格式的响应。 **1. 视图解析器 (View Resolver)** 在 SpringMVC ...

    基于servlet3.0手写springmvc

    5. **ViewResolver**:视图解析器,负责根据视图名查找实际的视图对象,如JSP、FreeMarker或Thymeleaf。 6. **IoC (Inversion of Control)**:依赖注入是Spring框架的核心特性之一,它使得对象之间的依赖关系可以在...

    SpringMVC完整使用教程

    SpringMVC 使用 `ViewResolver` 解析视图名称,常见的视图技术如 JSP、Thymeleaf、FreeMarker 等。视图名称通常与实际视图资源路径有关,通过配置 `ViewResolver` 可以指定转换规则。 ### 第 6 章 异常处理 ...

    SpringMVC精品资源--基于springMVC实现的解决方案系统.zip

    在“SpringMVC精品资源--基于springMVC实现的解决方案系统.zip”这个压缩包中,我们可以推测包含了一系列关于SpringMVC开发的教程、示例代码或完整的项目模板,用于帮助开发者更好地理解和应用SpringMVC。...

    spring+springmvc+hibernate+jsp 练习demo项目源码

    7. 视图渲染:使用JSP或FreeMarker等技术,根据Controller返回的数据渲染视图。 这个练习项目源码提供了一个完整的基础架构,帮助开发者了解如何在实际项目中整合使用SSH框架。通过分析和运行该项目,你可以深入...

    springMVC教案.rar

    SpringMVC提供了MockMvc工具,允许在不依赖Web服务器的情况下进行单元测试和集成测试。 这份教案将涵盖以上各个知识点,并可能包括实践案例和代码示例,帮助初学者理解SpringMVC的工作原理,掌握如何构建和调试...

    SpringMVC知识点.doc

    在 `pom.xml` 文件中,我们需要添加 SpringMVC 和其他依赖库,例如 Servlet API 和 JSP API(这里使用的是 javax.* 版本,而不是 javax.servlet.*)。确保添加以下依赖: ```xml &lt;!-- SpringMVC --&gt; &lt;groupId&gt;...

    springMVC练手代码

    SpringMVC支持多种视图技术,如JSP、FreeMarker、Thymeleaf等。在配置文件中,会指定视图解析器(如InternalResourceViewResolver),它负责将逻辑视图名转换为实际的视图资源。 6. **视图解析器(View Resolver)**...

    intellij maven springmvc demo

    例如,如果使用JSP,那么在`WEB-INF/views`目录下创建一个名为`hello.jsp`的文件,编写JSP代码来展示内容。 **7. 运行与测试** 在IntelliJ IDEA中,可以右键点击项目运行"Run 'SpringMvcDemo'"。通过浏览器访问`...

    SpringMVC 4.0

    6. **视图解析(View Resolution)**:SpringMVC 4.0支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,通过配置ViewResolver,可以轻松地解析并跳转到相应的视图。 7. **RESTful风格的支持**:SpringMVC 4.0增强...

    SpringMVC Demo_java_springmvc_DEMO_

    5. **视图解析**:SpringMVC支持多种视图技术,如JSP、FreeMarker或Thymeleaf。在这个DEMO中,视图可能是由一个或多个JSP页面组成,它们通过`@RequestMapping`注解的视图名称进行渲染。 6. **数据绑定和验证**:...

    SpringMVC3AndHibernate3 & springMVC集成DWR

    - 配置SpringMVC的核心文件`dispatcher-servlet.xml`,声明DispatcherServlet,定义视图解析器和HandlerMapping。 - 使用`@Controller`、`@RequestMapping`等注解定义控制器类和处理方法。 2. **配置Hibernate** ...

    SpringMVC 学习总结

    2. 添加 SpringMVC 和 Servlet API 的 Maven 依赖。 3. 配置 web.xml,设置 DispatcherServlet 作为前端控制器,并定义 CharacterEncodingFilter 来确保请求编码统一。 4. 创建 springmvc-servlet.xml 配置文件,...

    SpringMVC 开发接口demo

    - **View**:负责渲染和展示结果,如JSP、Freemarker或Thymeleaf模板。 - **Controller**:处理请求并返回Model,起到连接模型和视图的作用。 2. **配置SpringMVC** - 首先需要在`web.xml`中配置`...

    SpringMVC3.1实例源码

    SpringMVC支持模型对象的数据绑定和验证,例如,使用@ModelAttribute注解将请求参数绑定到方法参数,使用@Validated或JSR-303/JSR-349注释进行数据验证。 8. **上传下载支持** SpringMVC提供了便捷的文件上传和...

    纯springMVC基础框架

    - **视图技术**:如JSP、Freemarker或Thymeleaf,它们负责展示处理后的数据。 搭建一个纯SpringMVC框架的过程包括以下步骤: 1. 引入SpringMVC相关的依赖库。 2. 配置web.xml以启动DispatcherServlet。 3. 创建...

Global site tag (gtag.js) - Google Analytics