首页 > Web开发 > 详细

Servlet 直接返回web前端(代码库)

时间:2021-04-30 20:49:35      阅读:26      评论:0      收藏:0      [点我收藏+]

先在 web.xml 中 添加Servlet

<servlet>
    <servlet-name>bingTestServlet</servlet-name>
    <servlet-class>com.bing.servlet.BingTestServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>bingTestServlet</servlet-name>
    <url-pattern>/abcde</url-pattern>
</servlet-mapping>

 

然后是servlet 类 BingTestServlet.java

package com.bing.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class BingTestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setStatus(200);
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        String htmlContent = "<!DOCTYPE html>\n" +
                "<html lang=\"en\">\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>你好</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "<label style=\"color: red\">Hello Word !</label>\n" +
                "</body>\n" +
                "</html>";
        writer.write(htmlContent);
        writer.flush();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

 

但是一般情况下,不会直接在java类里写html的代码,所以往往会在html文件里好,然后在servlet中读取里边的内容。如下:

1、首先在WEB-INF 的同级目录下,新建一个 bing.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>你好</title>
</head>
<body>
<label style="color: red">Hello Word !</label>
</body>
</html>

 

2、然后 将BingTestServlet.java 修改成下面代码

package com.bing.servlet;

import org.apache.commons.io.FileUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

public class BingTestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private String htmlContent = null;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if (htmlContent == null) {
            String path = Thread.currentThread().getContextClassLoader().getResource("").getPath().replace("WEB-INF/classes/", "bing.html");
            try {
                htmlContent = FileUtils.readFileToString(new File(path), "utf-8");
            } catch (Exception e) {
                response.setStatus(404);
                return;
            }
        }

        response.setStatus(200);
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.write(htmlContent);
        writer.flush();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

 

写在最后:

1、上面的例子中, /abcde 并不是一个接口,在web.xml 中被Servlet拦住了以后,就直接返回了,没有再往程序里面走
2、如果先写一个 /abcde接口,让web.xml 里先走Spring的接口,再走Servlet,将它的response修改一下,会怎么样呢?这样是不是就可以动态修改返回参数了。(当然有很多其他方法可以修改参数,这里只说servlet)

 

PS:发现想的幼稚了,就算有个 /abcde 的接口,断点发现,它仍然是先走Servlet, 不会走到接口里去

 

原创文章,欢迎转载,转载请注明出处!

 

Servlet 直接返回web前端(代码库)

原文:https://www.cnblogs.com/acm-bingzi/p/java_servlet_html.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!