什么是Servlet?
- 从广义上讲,Servlet规范是由Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口(即Servlet是一个接口)。
- 从狭义上讲,Servlet指的是javax.servlet.Servlet接口及其子接口,也可以指实现了Servlet接口的实现类。
- Servlet 作为服务器端的组件,它的本意是“服务器端的小程序”。
Servlet作用:
- 接收来自客户端的请求
- 处理来自客户端的请求
- 完成响应(将处理结果回送给客户端(浏览器))
Servlet并不是所有请求都处理,一个Servlet只能处理一个指定的请求。
JavaWeb项目创建Servlet的方式:
- 手动创建:implements Servlet → 需要自己配置web.xml → 调用service()方法
- 自动创建:extends HttpServlet → 自动配置好web.xml → 调用doGet()/doPost()方法
注:Post请求只有一种,就是Form表单提交,指定method="post"
其余的例如超链接、img src="" .....均是Get请求
①手动编写Servlet的三个步骤:
- 创建自己的类XXXServlet,并实现Servlet接口 (Eclipse→New→Servlet)
- 实现service()方法
- 在web.xml中配置servlet信息
web.xml中配置事例:
<!--在servlet标签中配置servlet的类信息,告诉服务器我有这个servlet类-->
<servlet>
<description></description>
<!--配置servlet的名字,自己起的别名,给程序员看的-->
<display-name>MessageServlet</display-name>
<servlet-name>MessageServlet</servlet-name>
<!--配置servlet类的全包名,给服务器看的-->
<servlet-class>cn.lk.wjyl.web.servlets.MessageServlet</servlet-class>
</servlet>
<!--servlet映射信息-->
<servlet-mapping>
<servlet-name>MessageServlet</servlet-name>
<!--用于配置此servlet处理哪个请求-->
<url-pattern>/MessageServlet</url-pattern>
</servlet-mapping>
Servlet生命周期:
- Servlet是跑在Tomcat服务器上的, 所以Tomcat服务器可看做是Servlet的容器。
- 当我们第一次访问Servlet时。
- 创建一个Servlet对象(即执行构造方法)
- 调用init()方法
- 调用Service方法处理请求
- 之后的每次请求
- 只调用Service()方法来处理请求 即 整个WEB项目运行期间,Servlet只创建一次/个(单实例、多线程模式下运行)。
- 当停止Tomcat服务器后(项目从服务器上卸载)
- 调用destory()方法
public class HelloServ implements Servlet{
private ServletConfig config = null;
public HelloServ() {
}
//Servlet初始化方法,由Tomcat服务器调用
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
//获取Servlet的配置信息
@Override
public ServletConfig getServletConfig() {
return config;
}
//返回Servlet的描述信息
@Override
public String getServletInfo() {
return null;
}
//处理请求
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
}
//销毁Servlet对象,由Tomcat进行销毁。
@Override
public void destroy() {
}
}
ServletConfig
详见:https://mp.csdn.net/postedit/93469033
②Eclipse自动创建Servlet
New → Servlet
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public HelloServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
HttpServlet
httpServlet专门为处理Http请求定制的Servlet 因为Web应用都是应用的Http,所以也就是为Web应用定制的。
HttpServlet原理如下:↓
HttpServletRequest request 代表封装浏览器请求信息的对象
HttpServletResponse response 代表要发送给浏览器的响应对象
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.可以给浏览器响应/回传一个字符串
PrintWriter writer = response.getWriter();
writer.write("Hello....");
//2.可以重定向到一个页面或者其他资源
response.sendRedirect("success.html");
}