Servlet详解
Servlet基本原理
简介:
- 是一种Web服务器端编程技术。是实现了特殊接口的Java类。
- 由支持Servlet的Web服务器调用和启动运行。
- —个Servlet负责对应的一个或一组URL访问请求,并返回相应的响应内容。
搭建Servletweb程序:
- 创建一个普通java文件
- Java文件的类名实现HttpServlet
- 重写service的方法
- 在WEB-INF下的web.xml中添加请求与servlet类的映射关系
代码:
编写Servlet类:
package com.wp;/*
*@author wupeng
*@time 2021/6/21-10:01
*/
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("first wen project");
System.out.println("my fisrt wen project");
}
}
配置xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- 配置Servlet的别名,同时在Servlet-class配置项中添加类的完全限定名, 包名-类名-->
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.wp.MyServlet</servlet-class>
</servlet>
<!-- 配置Servlet跟请求的映射关系-->
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>myServlet2</servlet-name>
<servlet-class>com.wp.MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet2</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletLife</servlet-name>
<servlet-class>com.wp.ServletLife</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servletLife</servlet-name>
<url-pattern>/life</url-pattern>
</servlet-mapping>
</web-app>
servlet访问流程:
流程处理:

-
组成:
- 服务器地址:端口/虚拟项目名/servlet的别名
- uri:虚拟项目名/servlet别名
-
过程:浏览器发送请求到服务器,服务器根据请求URL地址中的URI信息在webapps目录下找到对应的项目文件夹,然后再web.xml中检索对应的servlet,找到
后调用并执行servlet
Servlet生命周期:
代码说明:
package com.wp;/*
*@author wupeng
*@time 2021/6/21-10:40
*/
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//接受到客户端的请求才会创建Servlet
public class ServletLife extends HttpServlet {
@Override
public void init() throws ServletException {
/*
完成Servlet对象的初始化
在Servlet接受到第一次请求的时候创建对象
生命周期:从第一次接受请求开始到服务器关闭之后销毁
当再web.xml文件配置中,配置了load-up-start 1 ,默认服务器启动的时候创建Servlet 中间的数字表现优先级。
*/
System.out.println("init");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("servlet life");
System.out.println("servlet life");
}
/*
服务器停止之后调用
*/
@Override
public void destroy() {
System.out.println("destroy");
}
}
Servlet Service,doGet,doPost方法的区别:
package com.wp;
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;
/*
Servlet类中可以有service方法,用来接受get post请求
如果Service和doGet或者doPost同时存在,默认调用service方法
如果同时有Service,doGet和doPOST方法,在Service方法的实现中调用了super.service()会跳转到根据请求的方式跳转到Post,或者Get
doGet用来接受Get请求
doPost用来接受Post请求
总结:编写servlet类的时候,不需要重新实现service方法,只需要重写doGet和dopost方法,只需要写doPost方法或者doGet可以接受getPost
请求
*/
@WebServlet("/methodServlet")
public class MethodServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("method");
System.out.println("method");
super.service(req,resp);
}
}
Servlet常见错误:
404:访问资源不存在,找不到对应的请求(请求路径与Web.xml中填写的不一致)
请求路径的项目虚拟名称填写错误
405:请求的方式跟Servlet中支持的方式不一致
500:(服务器内部错误)代码错误(web.xml中servlet类的名称错误)