Servlet
Servlet是在Web服务器中运行的小型Java程序。
Servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求。
编写可扩展的通用servlet javax.servlet.GenericServlet 或 javax.servlet.http.HttpServlet 。
生命周期
- 收到HTTP请求构造Servlet,然后使用 init()方法初始化。
- 响应请求,调用 service()方法响应处理。
- 退出服务,调用destroy()方法销毁Servlet对象。
Servlet接口方法
修饰符和类型 | 方法和说明 |
---|---|
void | destroy()由Servlet容器调用以向Servlet指示该Servlet正在退出服务。 |
ServletConfig | getServletConfig()返回一个ServletConfig 对象,其中包含此Servlet的初始化和启动参数。 |
java.lang.String | getServletInfo()返回有关servlet的信息,例如作者,版本和版权。 |
void | init(ServletConfig) servlet容器调用以向servlet指示该servlet正在准备使用。 |
void | service(ServletRequest, ServletResponse)由Servlet容器调用,以允许Servlet响应请求。 |
public interface Servlet {
/**
* 实例化servlet之后,servlet容器仅调用一次init方法。 servlet可以接收任何请求之前,init方法必须成功完成。
*/
void init(ServletConfig var1) throws ServletException;
/**
* 返回一个ServletConfig对象,其中包含此Servlet的初始化和启动参数。ServletConfig 返回的对象是传递给init方法的对象。
*/
ServletConfig getServletConfig();
/**
* 仅在servlet的init()方法完成后才调用,始终发送servlet响应的状态代码,可以同时处理多个请求。
* ServletRequest包含客户请求的对象
* ServletResponse包含Servlet响应的对象
*/
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
/**
* 返回有关servlet的信息,例如作者,版本和版权。此方法返回的字符串应该是纯文本.
*/
String getServletInfo();
/**
* 仅在servletservice方法中的所有线程都已退出或经过超时时间后,才调用此方法。调用后,不再再次调用。
* 此方法使Servlet有机会清理所持有的任何资源(例如,内存,文件句柄,线程),并确保任何持久状态都与Servlet在内存中的当前状态同步。
*/
void destroy();
}
补充:
GenericServlet类
修饰符和类型 方法和说明
void destroy()
由Servlet容器调用以向Servlet指示该Servlet正在退出服务。
java.lang.String getInitParameter(java.lang.String name)
返回一个String包含命名初始化参数值的,null如果该参数不存在,则返回。
java.util.Enumeration<java.lang.String> getInitParameterNames()
返回servlet的初始化参数的名称作为 Enumeration的String对象或空 Enumeration如果servlet没有初始化参数。
ServletConfig getServletConfig()
返回此servlet的ServletConfig对象。
ServletContext getServletContext()
返回ServletContext对该servlet在其中运行的引用。
java.lang.String getServletInfo()
返回有关servlet的信息,例如作者,版本和版权。
java.lang.String getServletName()
返回此servlet实例的名称。
void init()
可以重写的便捷方法,因此无需调用super.init(config)。
void init(ServletConfig config)
servlet容器调用以向servlet指示该servlet正在投入使用。
void log(java.lang.String message)
将指定的消息写到Servlet日志文件中,并以Servlet名称开头。
void log(java.lang.String message, java.lang.Throwable t)
将给定Throwable异常的解释性消息和堆栈跟踪信息写入 Servlet日志文件,并以Servlet名称为前缀。
abstract void service(ServletRequest req, ServletResponse res)
由Servlet容器调用,以允许Servlet响应请求。
HttpServlet类 方法
修饰符和类型 方法和说明
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
由服务器调用(通过service方法),以允许Servlet处理DELETE请求。
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
由服务器调用(通过service方法),以允许Servlet处理GET请求。
protected void doHead(HttpServletRequest req, HttpServletResponse resp)
从受保护的service方法接收HTTP HEAD请求 并处理该请求。
protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
由服务器调用(通过service方法),以允许Servlet处理OPTIONS请求。
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
由服务器调用(通过service方法),以允许Servlet处理POST请求。
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
由服务器调用(通过service方法),以允许Servlet处理PUT请求。
protected void doTrace(HttpServletRequest req, HttpServletResponse resp)
由服务器调用(通过service方法),以允许Servlet处理TRACE请求。
protected long getLastModified(HttpServletRequest req)
返回HttpServletRequest 对象的最后修改时间,以格林尼治标准时间1970年1月1日午夜以来的毫秒数为单位。
protected void service(HttpServletRequest req, HttpServletResponse resp)
从公共service方法接收标准的HTTP请求, 并将其分派到此类中定义的doMethod方法。
void service(ServletRequest req, ServletResponse res)
将客户端请求分派到受保护的 service方法。
package com.kongjs.servlet;
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.Map;
import java.util.Set;
@WebServlet(urlPatterns={"/req"})
public class YourServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().println("<!DOCTYPE html>" +
"<html>\n" +
"<head><title>" + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + "</h1>\n" +
"<ul>\n"+ req.getParameter("url") + "\n" +
"</ul>\n" +
"</body></html>");
resp.getWriter().write(String.valueOf(req.getRequestURL()));
resp.getWriter().write(String.valueOf(req.getHeaderNames()));
resp.getWriter().write(String.valueOf(req.getMethod()));
System.out.println("req.getMethod() = " + req.getMethod());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String userName = req.getParameter("userName");
String password = req.getParameter("password");
resp.getWriter().write(String.valueOf(userName));
resp.getWriter().write(String.valueOf(password));
Map<String, String[]> parameterMap = req.getParameterMap();
Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
entries.forEach(entry -> System.out.println("entry = " + entry));
for (Map.Entry<String,String[]> str : entries){
System.out.println("str = " + str);
}
String[] strings = parameterMap.get("");
}
}