首先给出Servlet程序,然后再分许其实现。编写一个最简单的Servlet程序,只需要写两个文件即可。一个是Servlet的Java程序,一个是配置web.xml。
Servlet是继承自HttpServlet,需要重写doGet()和doPost()两个方。
HelloServlet
package com.java.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 HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8"); //设置响应类型为HTML文档
PrintWriter out = resp.getWriter(); //获取响应输出流
out.println("<html>");
out.println("<title>God of Night! </title>");
out.println("<body>");
out.println("<h1>Without a bit of cold, how can the plum blossoms smell so sweet.</h1>");
out.println("</body>");
out.println("</html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
分析代码:
首先response调用setContentType()方法,设置响应内容的类型。
这个setContentType方法是由response调用的,response是HttpServletResponse 的实例对象,点进去HttpServletResponse 可以看见,HttpServletResponse继承了ServletResponse
ServletResponse接口定义了setContentType方法,以及后面要说getWriter方法。
查看setContentType的实现类,发现ServletResponseWrapper实现了ServletResponse接口中所有的方法。
整个流程图如下:
总结:
ServletResponse定义了响应的所有方法,ServletResponseWrapper和HttpServletResponseWrapper共同实现这些方法,然后HttpServletResponse继承ServletResponse,所有HttpServletResponse就可以直接使用ServletResponse的所有方法。
关于HttpServletRequest的流程图和源码分析跟HttpServletResponse如出一辙。
再谈一个resp.getWriter(),这个方法作用是获取响应输出流,将信息数据到前端页面,如果通过System.out.println();
只能将信息输出到后后台。
web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.java.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/geeks</url-pattern>
</servlet-mapping>
</web-app>
web.xml注册servlet,将servlet的类和包注册之后,通过url-pattern设置URL跳转我们编写的servlet程序。
总结:
- 编写Servlet程序,定义页面的内容
- 注册Servlet程序,定义URL访问地址