先在 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, 不会走到接口里去
原创文章,欢迎转载,转载请注明出处!