一、概述
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>myservlet</servlet-name>
<servlet-class>com.lin.servlet.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
方法二:使用注解
@WebServlet("/servlet")
public class Servlet implements javax.servlet.Servlet {
......
}
laingzhongf
三、生命周期
- 当浏览器访问Servlet时,Tomcat会判断对象是否存在,若不存在则根据反射创建,若存在则执行第三步
- 调用 init 方法初始化
- 调用 service 方法进行逻辑操作
- 关闭Tomcat时调用 destory 方法释放资源
(1)init方法
<!-- 全局初始值-->
<context-param>
<param-name>name</param-name>
<param-value>admin</param-value>
</context-param>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.lin.servlet.Servlet</servlet-class>
<!-- 具体各个servlet初始值-->
<init-param>
<param-name>name</param-name>
<param-value>username</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/servlet</url-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则针对具体的进行操作
(2)service方法
用于接收客户端的请求并做出响应
@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层次结构
Servlet——》GenericServlet——》HttpServlet
在我们一般使用时,不直接使用实现Servlet接口的GenericServlet(为他的子类屏蔽了不常用的方法,只需重写service方法即可),而是使用其子类HttpServlet(根据请求类型分发处理,GET请求分发给doGet方法以此类推),我们只需要继承HttpServlet(重写doGet和doPost方法)
一般HTTP请求有四种:
- GET 读取
- POST 保存
- PUT 修改
- DELETE 删除
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);
}
}