Servlet 是运行在 Web 服务器或应用服务器上的程序,负责与客户端进行通信:
Servlet为接口,需要创建类实现Servlet接口
public class Servlet implements javax.servlet.Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
注意:由于网页无法直接访问Servlet文件,所以需要通过配置映射访问
方法一:配置xml文件
<servlet>
<servlet-name>myservletservlet-name>
<servlet-class>com.lin.servlet.Servletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>myservletservlet-name>
<url-pattern>/servleturl-pattern>
servlet-mapping>
方法二:使用注解
@WebServlet("/servlet")
public class Servlet implements javax.servlet.Servlet {
......
}
laingzhongf
<context-param>
<param-name>nameparam-name>
<param-value>adminparam-value>
context-param>
<servlet>
<servlet-name>myservletservlet-name>
<servlet-class>com.lin.servlet.Servletservlet-class>
<init-param>
<param-name>nameparam-name>
<param-value>usernameparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>myservletservlet-name>
<url-pattern>/servleturl-pattern>
servlet-mapping>
@Override
public void init(ServletConfig servletConfig) throws ServletException {
// 单个Servlet的初始值
System.out.println(servletConfig.getInitParameter("name"));
System.out.println("--------------------------");
// Servlet上下文
ServletContext servletContext = servletConfig.getServletContext();
// Tomcat版本号
System.out.println(servletContext.getServerInfo());
// 全局Servlet初始值
System.out.println(servletContext.getInitParameter("name"));
}
这里容易混淆ServletConfig和ServletContext。其中ServletContext为上下文,一个web应用对应一个,用于针对全局进行操作;一个web应用可以有很多个servlet,而ServletConfig则针对具体的进行操作
用于接收客户端的请求并做出响应
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
String id = servletRequest.getParameter("id");
System.out.println("已收到客户端的请求,id为"+id);
// 解决中文编码
servletResponse.setContentType("text/html;charset=UTF-8");
servletResponse.getWriter().write("Hello Client!你的id为:"+id);
}
Servlet——》GenericServlet——》HttpServlet
在我们一般使用时,不直接使用实现Servlet接口的GenericServlet(为他的子类屏蔽了不常用的方法,只需重写service方法即可),而是使用其子类HttpServlet(根据请求类型分发处理,GET请求分发给doGet方法以此类推),我们只需要继承HttpServlet(重写doGet和doPost方法)
一般HTTP请求有四种:
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}