freemarker + servlet實現 list 顯示 及 頁面跳轉


說明:該實例解決.ftl模板頁面跳轉問題。

         解決servlet作用域存值動態改變模板內容。

         doGet方法 和 doPost方法的靈活應用。

         List 遍歷顯示 和 動態添加內容。

 

1. 首先我們來看一下項目結構圖:

2. 新建User實體類:

package net.viralpatel.freemarker;

public class User {
    private String firstname;
    private String lastname;
    
    public User(){
    }
    
    public User(String firstname,String lastname){
        this.firstname=firstname;
        this.lastname=lastname;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    
    
}

3. 新建HelloServlet類(繼承 HttpServlet):

package net.viralpatel.freemarker;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet  extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private static List<User> userList=new ArrayList<User>();
    
    static{
        userList.add(new User("Bill","王恆"));
        userList.add(new User("Steve","王恆"));
        userList.add(new User("Larry","王恆"));
        userList.add(new User("Sergey","王恆"));
        userList.add(new User("Larry","王恆"));
    }
    
    protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("users", userList);
        
        req.getRequestDispatcher("/index.ftl").forward(req, resp);
    }
    
    
    protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
        String firstname=req.getParameter("firstname");
        String lastname=req.getParameter("lastname");
        
        if(null !=firstname && null != lastname
                && !firstname.isEmpty() && !lastname.isEmpty()){
            synchronized (userList) {
                userList.add(new User(firstname,lastname));
            }
        }
        doGet(req, resp);
    }
    
    
    
}

注意:代碼中標紅內容 理解巧妙之處。

4. 新建index.ftl:

<html>
<head><title>ViralPatel.net - FreeMarker Hello World</title>

<body>
<form name="user" action="hello" method="post">
XiaoGongZhu: <input type="text" name="firstname" /> <br/>
XiaoXianNv: <input type="text" name="lastname" /> <br/>
<input type="submit" value="Save" />
</form>

<table class="datatable">
<tr>
<th>Firstname</th> <th>Lastname</th>
</tr>
<#list users as user>
<tr>
<td>${user.firstname}</td> <td>${user.lastname}</td>
</tr>
</#list>
</table>
</body>
</html>

5. 配置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_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Freemarker_Hello_World</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>
<servlet> <servlet-name>freemarker</servlet-name> <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class> <!-- FreemarkerServlet settings: --> <init-param> <param-name>TemplatePath</param-name> <param-value>/</param-value>
        </init-param>
        <init-param>
            <param-name>NoCache</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>ContentType</param-name>
            <param-value>text/html; charset=UTF-8</param-value>
            <!-- Forces UTF-8 output encoding! -->
        </init-param>

        <!-- FreeMarker settings: -->
        <init-param>
            <param-name>template_update_delay</param-name>
            <param-value>0</param-value>
            <!-- 0 is for development only! Use higher value otherwise. -->
        </init-param>
        <init-param>
            <param-name>default_encoding</param-name>
            <param-value>ISO-8859-1</param-value>
            <!-- The encoding of the template files. -->
        </init-param>
        <init-param>
            <param-name>number_format</param-name>
            <param-value>0.##########</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping> <servlet-name>freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping> 

    <servlet> <servlet-name>hello_servlet</servlet-name> <servlet-class>net.viralpatel.freemarker.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello_servlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>

    <!--
        Prevent the visiting of MVC Views from outside the servlet container.
        RequestDispatcher.forward/include should and will still work. Removing
        this may open security holes!
    -->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>FreeMarker MVC Views</web-resource-name>
            <url-pattern>*.ftl</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <!-- Nobody is allowed to visit these -->
        </auth-constraint>
    </security-constraint>

</web-app>

注意:代碼中紅色標識為必須配置內容,其他可以根據自己需要進行配置。

 

6. 部署項目,測試 (http://localhost:8080/Freemarker_Hello_World/hello):

 

 

備注:可能遇到的錯誤,如:

解決辦法:檢查web.xml是否配置:

<servlet> <servlet-name>freemarker</servlet-name> <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class> <!-- FreemarkerServlet settings: --> <init-param> <param-name>TemplatePath</param-name> <param-value>/</param-value> </init-param>
        <init-param>
            <param-name>NoCache</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>ContentType</param-name>
            <param-value>text/html; charset=UTF-8</param-value>
            <!-- Forces UTF-8 output encoding! -->
        </init-param>

        <!-- FreeMarker settings: -->
        <init-param>
            <param-name>template_update_delay</param-name>
            <param-value>0</param-value>
            <!-- 0 is for development only! Use higher value otherwise. -->
        </init-param>
        <init-param>
            <param-name>default_encoding</param-name>
            <param-value>ISO-8859-1</param-value>
            <!-- The encoding of the template files. -->
        </init-param>
        <init-param>
            <param-name>number_format</param-name>
            <param-value>0.##########</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet> <servlet-mapping> <servlet-name>freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM