一、所需lib包
二、web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <filter> <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置DispatchcerServlet --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置Spring mvc下的配置文件的位置和名称 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
三、src/springmvc.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置自动扫描的包 --> <context:component-scan base-package="com.lixj"></context:component-scan> <!-- 配置以下内容以支持静态资源访问 --> <mvc:default-servlet-handler/> <mvc:annotation-driven> <mvc:message-converters> <!-- 避免返回JSON出现下载文件 --> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value="/views/"></property> <property name = "suffix" value = ".jsp"></property> </bean> --> <!-- 设置freeMarker的配置文件路径 --> <bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="classpath:freemarker.properties"/> </bean> <!-- 配置freeMarker的模板路径 --> <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="freemarkerSettings" ref="freemarkerConfiguration"/> <property name="templateLoaderPath"> <value>/ftl/</value> </property> <property name="freemarkerVariables"> <map> <entry key="xml_escape" value-ref="fmXmlEscape" /> </map> </property> </bean> <!-- 配置freeMarker视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/> <property name="contentType" value="text/html; charset=utf-8"/> <property name="cache" value="false"/> <property name = "suffix" value = ".ftl"></property> <property name="exposeRequestAttributes" value="true" /> <property name="exposeSessionAttributes" value="true" /> <property name="exposeSpringMacroHelpers" value="true" /> </bean> <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1046666000"/> <property name="maxInMemorySize" value="4096" /> <property name="defaultEncoding" value="UTF-8"></property> </bean> </beans>
四、src/freemarker.properties 配置
#设置标签类型:square_bracket:[] auto_detect:[]<> tag_syntax=auto_detect #模版缓存时间,单位:秒 template_update_delay=0 default_encoding=UTF-8 output_encoding=UTF-8 locale=zh_CN #设置数字格式 ,防止出现 000.00 number_format=# #变量为空时,不会报错 classic_compatible=true #这个表示每个freemarker的视图页面都会自动引入这个ftl文件。里面定议的就是一些宏,如text文本框,各种form元素 #auto_import="/WEB-INF/templates/index.ftl" as do
五、FreemarkerController.java 代码
package com.lixj; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; @Controller public class FreemarkerController { @RequestMapping("/hi") public String sayHello(ModelMap map){ System.out.println("say hi...."); map.put("name","kimi"); map.put("name2","李"); return "hi"; } @RequestMapping(value = "/hi/{id}/{name}") public String helloPathVar(@PathVariable(value = "id") Integer id, @PathVariable(value = "name") String name, ModelMap map) { System.out.println("PathVariable id=" + id + " name=" + name); map.put("id",id); map.put("name",name); return "hi"; } @RequestMapping(value = "/testPojo") //, method = RequestMethod.POST public String testPojo(@RequestParam(value = "flag", required = false, defaultValue = "yes") String flag, User user, ModelMap map) { System.out.println("flag: " + flag); System.out.println("testPojo: " + user.toString()); map.put("name", user.getUsername()); return "hi"; } @RequestMapping(value="/json") @ResponseBody public Object getJson(){ HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); List list = new ArrayList(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("text", "LIXJ"); map1.put("id", "123"); list.add(map1); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("text", "测试"); map2.put("id", "222"); list.add(map2); return list; } @RequestMapping("/fileUpload") public String fileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request) { if (!file.isEmpty()) { try { String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/" + file.getOriginalFilename(); file.transferTo(new File(filePath)); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return "redirect:/index.jsp"; } }
六、index.jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta name="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <link rel="stylesheet" type="text/css" href="/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="/easyui/themes/icon.css"> <script type="text/javascript" src="/easyui/jquery.min.js"></script> <script type="text/javascript" src="/easyui/jquery.easyui.min.js"></script> </head> <body> <form action="/fileUpload" method="post" accept-charset="utf-8" enctype="multipart/form-data"> <input type="file" name="file" > <input type="hidden" name="flag" value="update"><br> username: <input type="text" name="username"><br> password: <input type="password" name="password"><br> email: <input type="text" name="email"><br> age: <input type="text" name="age"><br> city: <input type="text" name="address.city"><br> province: <input type="text" name="address.province"><br> <input type="submit" value="submit"> </form><br/><br/> <div style="margin-bottom:20px"> <input id="language" class="easyui-combobox" name="language" style="120px" data-options=" url:'/json', method:'get', valueField: 'id', textField: 'text', label: 'Language:', labelPosition: 'top' " /> </div> </body> </html>
七、webRoot/ftl/hi.ftl 代码:
<html>
<body>
<h1>id=${id} : name=${name} name2=${name2}</h1><br/>
</body>
</html>
八、页面访问地址 http://localhost:90/hi/1/33