InternalResourceViewResolver:这是一个最常用的解析器。通常使用它指定渲染对象为jsp页面
FreeMarkerViewResolver:这就是Spring与Freemarker整合需要用到的解析器
参考:http://bubuko.com/infodetail-2645545.html
期末作业遇到了很多问题…
想法:我现在所做的项目里有jsp文件和html文件,想在控制器类返回html或者jsp文件。思路是根据优先级匹配。例如返回一个登录页面(html),如果jsp优先级高,那先从jsp找,找不到再去html中找。
目录结构:
一、控制器类
为了测试某个页面,所以单独建立了一个控制器类,服务器一运行就返回这个页面。
这个页面是LearnPhotography.html,不是jsp。所以要配置springmvc-config.xml(这是我的命名xxx.xml),原来老师给的代码只能返回jsp页面,所以我更改了配置文件。
package jee.course.ch10.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping(value = "/")
public String index(){
return "LearnPhotography";
}
}
二、springmvc-config.xml 多视图配置
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath">
<!--我的html文件都在根目录下 -->
<value>/</value>
</property>
</bean>
<!-- 配置默认html页面的地址 -->
<bean id="html_viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".html"/>
<property name="order" value="0"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<!-- 其实这里是处理了字符,但是在我这里不起作用 -->
</bean>
<!-- 配置默认jsp页面的地址 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>
<property name="prefix" value="/WEB-INF/jsp/view/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="0"/>
</bean>
三、web.xml过滤器
<!--过滤器配置 -->
<!--编码过滤器-->
<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>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
四、需要加入的maven依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.8.RELEASE</version>
</dependency>
测试:
发现严重乱码啊。。。。更改html文件编码没有用,修改web.xml过滤器也没有用
最后查了很多资料,但是不知道怎么描述问题~~~还好找到了答案,很开心。
在springmvc-config.xml文件添加 一段配置就解决了。
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath">
<value>/</value>
<-----------------添加的就是这段!!!!!!!!!!!!--------------->
</property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">1</prop>
<!--关键解决点-->
<prop key="default_encoding">UTF-8</prop>
<!--关键解决点-->
</props>
</property>
<----------------------------------------------------------------->
</bean>
<!-- 配置默认html页面的地址 -->
<bean id="html_viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".html"/>
<property name="order" value="0"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>
<!-- 配置默认jsp页面的地址 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>
<property name="prefix" value="/WEB-INF/jsp/view/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="0"/>
</bean>
标题太傻了。。。就马赛克了。