栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet模版引擎使用示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet模版引擎使用示例

1. 动态页面的渲染方式 1.1 服务器端渲染

HTML如下:




    
    猜数字


结果:

Java代码如下:

package Thymeleaf;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Random;

@WebServlet("/guessNum")
public class GuessNumServlet extends HttpServlet {
    Random random = new Random();
    private int toGuess = 0;

    // 使用这个 doGet 来从服务器获取到猜数字的初始页面
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        toGuess = random.nextInt(100) + 1;
        resp.getWriter().write("n" +
                "n" +
                "n" +
                "    n" +
                "    猜数字n" +
                "n" +
                "n" +
                "n" +
                "    
n" + " n" + " n" + "
n" + "n" + "结果:n" + "n" + ""); } // 使用 doPost 来从服务器获取到 "带有猜测结果" 的页面 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=UTF-8"); // 先根据用户提交的数字来比较一下看看结果 int user = Integer.parseInt(req.getParameter("toGuess")); String result = ""; if (user < toGuess) { result = "低了"; } else if (user > toGuess) { result = "高了"; } else { result = "答对了"; } resp.getWriter().write("n" + "n" + "n" + " n" + " 猜数字n" + "n" + "n" + "n" + "
n" + " n" + " n" + "
n" + "n" + "结果:n" + result + "n" + ""); } }

会发现在不使用模版引擎的情况下,当前的Java代码(代表着业务逻辑)和HTML代码(代表着用户界面)混合在一起,非常的不友好。尤其是HTML比较长,比较复杂的时候。

1.2 客户端渲染「Thymeleaf」

HTML文件





    
    
    
    MessageWal



    

    

表白墙

输入后点击提交,将会吧信息显示在表格中

谁:
对谁:
说什么:
对 说:

Servlet代码

import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

class Message {
    public String from;
    public String to;
    public String message;
}

@WebServlet("/message")
public class MessageServlet extends HttpServlet {
    // 1.先创建引擎
    private TemplateEngine engine = new TemplateEngine();

    // 保存所有的消息
    private ArrayList messages = new ArrayList<>();

    @Override
    public void init() throws ServletException {
        // 2.创建解析器
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(getServletContext());
        resolver.setPrefix("/WEB-INF/template/");
        resolver.setSuffix(".html");
        resolver.setCharacterEncoding("UTF-8");
        engine.setTemplateResolver(resolver);
    }

    // 获取初始页面
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 把当前的模版读取加载过来,把消息 messages 给替换进去,并返回页面
        resp.setContentType("text/html;charset=UTF-8");
        WebContext webContext = new WebContext(req, resp, getServletContext());
        webContext.setVariable("messages", messages);
        engine.process("MessageWall", webContext, resp.getWriter());
    }
    // 执行新增页面

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 读取用户提交的数据,添加到 messages 列表中去,然后再返回一个完整页面
        // 设置请求的访问方式是必要的,否则 Servlet 读到的中文可能是乱码
        req.setCharacterEncoding("UTF-8");
        Message message = new Message();
        message.from = req.getParameter("from");
        message.to = req.getParameter("to");
        message.message = req.getParameter("message");
        messages.add(message);


        // 返回完整页面
        resp.setContentType("text/html;charset=UTF-8");
        WebContext webContext = new WebContext(req, resp, getServletContext());
        webContext.setVariable("messages", messages);
        engine.process("MessageWall", webContext, resp.getWriter());
    }
}



文件目录

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号