9159金沙游艺场

图片 9
IO流

通过vclient管理esxi主机9159金沙游艺场

Java: FreeMarker的配置和使用

06.在controller层创建一个类

package freemarker.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class Hello { @RequestMapping(value = "helloFtl") public String helloFtl(Model model) { model.addAttribute("hello", "hello world!"); return "helloFtl"; }}

这个模板非常简单。只在h1标签中方了一个需要数据“user”的Freemarker标签。这个“user”数据就是在之后的HashMap提供的。

 

01.首先利用maven构建一个以war方式打包的web工程

9159金沙游艺场 1

  • finish后,看到如下报错

9159金沙游艺场 2

  • 然后进行解决

9159金沙游艺场 3

在工程中最后把这些捏合在一起,让他们彼此知道、协同工作的是web.xml配置文件。这里先介绍web.xml的配置,之后具体说明如何一步一步的添加配置文件中涉及到的模板、java
objects等。这样有利于读者从总体出发逐步把握每一个相关的细节。

9159金沙游艺场 4

9159金沙游艺场 5

然后添加Controller,也就是在web.xml配置文件中指定的example.Test类。首先在项目的根目录下,创建一个“example”的包,然后在里面添加一个Servlet。Servlet的名称设定为Test。名字可以随意起,但是在配置文件中的必须和这个类的名称是一致的。

  这里将HelloWorld.java中的hello方法改为:

07.在templates目录下创建一个helloFtl.ftl文件

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body> ${hello}</body></html>
  • 启动tomcat后,输入以下网址查看效果:

9159金沙游艺场 6

  • 点击hello的链接就可以从controller层获取数据和跳转页面

    9159金沙游艺场 79159金沙游艺场 8长按扫码关注:java后端生活

<!DOCTYPE html>
<html>
  <head>
    <title>Hello</title>
  </head>

  <body>
    This is my HTML page. <br>
    <h1>${user}</h1>
  </body>
</html>
@RequestMapping("/helloworld")
    public String hello(){
        System.out.println("hello world");
        return "Jackie";
}

9159金沙游艺场 9

FreeMarker是什么

9159金沙游艺场 10

官方简介:FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据,
并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。
它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

 

04.创建springmvc的配置文件

  • applicationContext-web.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置自定扫描的包 --> <context:component-scan base-package="freemarker" /> <!-- 整合Freemarker --> <bean > <property name="templateLoaderPath" value="/WEB-INF/templates"/> </bean> <!-- 配置视图解析器 --> <bean > <property name="prefix" value=""/> <property name="suffix" value=".ftl"/> <property name="contentType" value="text/html; charset=UTF-8"/> </bean> <!-- 配置注解驱动 --> <mvc:annotation-driven /> <!-- 配置直接跳转的页面,无需经过Controller层 http://localhost:8080/freemarker01/index 然后会跳转到 WEB-INF/templates/index.html 页面 --> <mvc:view-controller path="/index" view-name="index"/></beans>

非常的简单明了。FreeMarker是一个java包。实现了MVC模式,分离开发者和设计师。也就是分离html也java的代码。

 

  • 最终项目的目录如下:

初学什么都不可以忽略的地方就是这个东西的官方网站:。下载或者API都可以参考这里。

9159金沙游艺场 11

05.在WEB-INF目录下创建templates目录,设置直接跳转的页面index.ftl

<!DOCTYPE html><html><head><meta charset="UTF-8"><!-- <meta http-equiv="refresh" content="0; url=hello.ftl" /> --><title>Insert title here</title></head><body> <a href="helloFtl">hello</a></body></html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    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">
    <servlet>
        <servlet-name>Test</servlet-name>
        <servlet-class>example.Test</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

  这样就可以保证spring
能够拦截并处理静态资源

02.添加依赖

  • springmvc的依赖

<!-- springmvc start --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.7.RELEASE</version> </dependency><!-- springmvc end -->
  • freemarker的依赖

<!-- freeMarker start --><dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.7.RELEASE</version></dependency><!-- freeMarker end -->
package example;

import java.io.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import freemarker.template.*;

public class Test extends HttpServlet {

    private Configuration _config;

    public void init() {
        // 初始化Freemarker配置
        _config = new Configuration(Configuration.VERSION_2_3_0);
        // 设置Freemarker模板文件的位置
        _config.setServletContextForTemplateLoading(this.getServletContext(), "templates");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        // 数据
        Map root = new HashMap();
        root.put("user", "Jack");

        // 获取模板
        Template t = _config.getTemplate("Test.ftl");

        // 准备输出, 使用模板的编码作为本页的charset
        response.setContentType("text/html; charset=" + t.getEncoding());
        PrintWriter out = response.getWriter();

        try{
            // 在模板中加入动态数据
            t.process(root, out);
        }
        catch(freemarker.template.TemplateException e){
            throw new ServletException("处理Template模版中出现错误", e);
        }
    }
}

9159金沙游艺场 12

03.web.xml的配置

<!-- 配置 DispatcherServlet --><servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指定 SpringMVC 配置文件的位置和名称 若SpringMVC的配置文件名的格式和位置满足: /WEB-INF/servlet-name + "-servlet.xml" 则可以省略下面的init-param代码。这里的servlet-name是springmvc。 即/WEB-INF/springmvc-servlet.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/applicationContext-web.xml</param-value> </init-param> <load-on-startup>1</load-on-startup></servlet><!-- Web请求 --><servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- servlet知识点:处理所有请求 --> <url-pattern>/</url-pattern></servlet-mapping><!-- 字符集过滤器 --> <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>

Freemarker是一个功能十分强大的模板引擎。不只有文中介绍的简单的数据的替换,还有指令、宏等功能。非常好用。

9159金沙游艺场 13

配置依次说明了:有一个叫Test的servlet,对应在代码的example包的Test类。这个类的名字可以随便起,其他的节点在配置的时候使用的知识servlet-name,然后他会找到这个类。下面的servlet-mapping在url中访问*.do的时候会访问这个servlet-name为Test的节点配置的类。之后,在index.jsp中添加一个指向*.do的超链接。整个的整个测试项目就可以run起来了。

 

代码:

9159金沙游艺场, 

按照MVC的方式理解。在servlet-name中配置的类就是Controller。View就是模板。Model就是之后在HashMap中的数据。下面依次创建在配置文件中直接或者间接需要用到的代码。

  在src目录下新建springmvc.xml

FreeMarker是如何工作的

class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name = "prefix" value="/WEB-INF/views/"></property>
            <property name = "suffix" value = ".jpg"></property>
</bean>

 

 

 

9159金沙游艺场 14

9159金沙游艺场 15

9159金沙游艺场 16 success.jsp

这里假设你已经创建了一个web
project,这个project的名字叫做test。首先创建模板。一定要在WebRoot目录下创建一个templates目录。然后在里面添加后缀为ftl(freemarker
template的缩写),名称为Test的模板。在配置文件中没有出现模板叫什么,所以这里你可以随便命名这个模板文件。这个文件之后会在Controller中明确指定。不会出现找不到的问题。

  success.jsp(WEB-INF/views下)

代码_config.setServletContextForTemplateLoading(this.getServletContext(),
“templates”);
指定了模板文件所在的目录,以后的全部的Controller的模板文件都是从这个地方找了,也就是前文指定的在WebRoot下创建的templates目录。在后面的代码Template
t =
_config.getTemplate(“Test.ftl”);
中指定了具体的模板文件是哪一个。Map
root = new HashMap(); root.put(“user”,
“Jack”);
指定了具体的数据Model。这个key值必须和在模板中设定的${user}一致。最后在方法t.process(root,
out);
中,把数据添加到模板中。通过这几步以后,MVC的几个部分就结合到了一起。

  HelloWorld.java(com.jackie.springmvc.handlers下)

  关于使用spring
mvc处理静态资源,比如html(发现之前的springmvc.xml中<property name =
“suffix” value =
“.jsp”></property>定义为jsp结尾就可以成功跳转,但是如果改为html并在web-inf下面新建了html文件后,并将suffix这里的”.jsp”改为”.html”,无法跳转到想要的html页面,并且给出404错误,同时console给出错误信息为:No
mapping found for HTTP request with URI
[/springTest/WEB-INF/views/result.html] in DispatcherServ)

这是官网的图。非常明确的说明了FreeMarker是如何运作的。首先需要有一个template模板,在那里就是一堆的html标签和一些专属FreeMarker的标签,这些标签之后会被具体的数据代替。这些数据就是有左下的Java
objects提供。<FreeMarker>就是工程中的Jar包。他把这些模板和Java
objects的数据加工组合之后输出html页面。所以,FreeMarker的功能,就如官网中一直强调的,不是别的而是一个模板引擎。

   3.
这里的servlet-mapping表示拦截的模式,这里是“/”,表示对于所有的请求的拦截,包括静态资源如html,
js,
jpg等。这时候对于静态资源的访问就会报404的错误。关于如何解决后面会介绍

 

 

参考:

 

最后在index.jsp中添加一个超链接:<a href=”Hello.do”>Freemarker
first page</a>
。整个例子就可以运行了。看那看效果吧。

spring
mvc如何访问静态资源

添加可运行的代码

 1 <servlet-mapping>
 2      <servlet-name>default</servlet-name>
 3      <url-pattern>*.css</url-pattern>
 4 </servlet-mapping>
 5 
 6 <servlet-mapping>
 7       <servlet-name>default</servlet-name>
 8       <url-pattern>*.gif</url-pattern>
 9 </servlet-mapping>
10 
11 <servlet-mapping>
12     <servlet-name>default</servlet-name>
13      <url-pattern>*.jpg</url-pattern>
14 </servlet-mapping>
15 
16 <servlet-mapping>
17      <servlet-name>default</servlet-name>
18      <url-pattern>*.js</url-pattern>
19 </servlet-mapping>
20 
21 <servlet-mapping>
22       <servlet-name>default</servlet-name>
23       <url-pattern>*.html</url-pattern>
24 </servlet-mapping>

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图