什么是servlet
- 是使用java编写的服务器段的程序,通俗的说是(运行在tomcat中的一个小程序)、
作用
- 处理客户端的发送的请求,并将处理完成的请求返回给客户端
工作大致流程
- 客户端发送请求到服务器
- 服务器接收请求并调用Servlet处理请求
- 更具请求内容生成响应内容并传给服务器
- 服务器将响应内容返回给客户端
servlet使用方法
- servlet是一个接口类,使用它的时候必须直接或者间接实现它
- 在编写实现Servlet的Servlet类时,直接实现它。在扩展实现这个这个接口的类时,间接实现它
servlet里面的方法
public interface Servlet {
/*
1.servlet中的生命周期从"创建"到"工作"到"销毁"的过程
2.对应的三个方法init,servce,destory
*/
/*
作用:<将servlet初始化>
当servlet第一次被请求时,Servlet容器就会开始调用init()方法来初始化一个Servlet对象出来,
Servlet容器并传入一个ServletConfig对象进来从而对Servlet对象进行初始化,
这个方法只会执行一次
*/
void init(ServletConfig var1) throws ServletException;
//获取servlet配置方法,这个方法会返回由Servlet容器传给init( )方法的ServletConfig对象
ServletConfig getServletConfig();
/*
作用:<处理请求,并做出响应>
每当请求Servlet时,Servlet容器就会调用service()方法,
如果时第一次请求时,会先调用init()方法初始化servlet,然后调用service()方法,
如果不是第一次请求时,则直接调用service()方法
*/
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
//这个方法会返回Servlet的一段描述,可以返回一段字符串,例如版本号、作者、描述等。
String getServletInfo();
/*
作用:<销毁servlet>
当要销毁Servlet时,Servlet容器就会调用这个方法,
在卸载应用程序或者关闭Servlet容器时,就会发生这种情况,一般在这个方法中会写一些清除代码
*/
void destroy();
}
servlet实现类案例
//实现servelt类
public class DemoServlet implements Servlet {
private ServletConfig config;
public void init(ServletConfig servletConfig) throws ServletException {
this.config = servletConfig; // 保存ServletConfig引用以备后用
System.out.println("Servlet正在初始化");
String servletName = servletConfig.getServletName();
System.out.println("Servlet名称:" + servletName);
// 通过getInitParameter()方法获取初始化参数
String paramValue = servletConfig.getInitParameter("xr");
System.out.println("初始化参数xr的值:" + paramValue);
}
public ServletConfig getServletConfig() {
return null;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet正在处理请求并响应");
}
public String getServletInfo() {
System.out.println("获取servlet信息");
return null;
}
public void destroy() {
System.out.println("Servlet正在销毁");
}
}
//web.xml配置DemoServlet
<servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>com.xr.DemoServlet</servlet-class>
<init-param>
<param-name>xr</param-name>
<param-value>dd</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>
<url-pattern>/DemoServlet</url-pattern>
</servlet-mapping>
//启动项目时必须配置Tomcat,因为servlet是基于tomcat服务器的,然后启动后访问本地访问+/DemoServlet
//1.第一次的请求的运行结果(执行了init方法和service方法)
Servlet正在初始化
Servlet名称:DemoServlet
初始化参数 paramName 的值:dd
Servlet正在处理请求并响应
//2.刷新页面相当于第二次请求,运行结果(只执行了service方法)
Servlet正在处理请求并响应
//3.关闭运行时,结果(只执行了destory方法)
Servlet正在销毁
servletRequest接口常用的方法(请求接口)
public interface ServletRequest {
int getContentLength();//返回请求主体的字节数
String getContentType();//返回主体的MIME类型
String getParameter(String var1);//返回请求参数的值
//getParameter是在ServletRequest中最常用的方法
}
servletResponse接口的方法(响应接口)
public interface ServletResponse {
String getCharacterEncoding();
String getContentType();
ServletOutputStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException;
void setCharacterEncoding(String var1);
void setContentLength(int var1);
void setContentType(String var1);
void setBufferSize(int var1);
int getBufferSize();
void flushBuffer() throws IOException;
void resetBuffer();
boolean isCommitted();
void reset();
void setLocale(Locale var1);
Locale getLocale();
}
servletContext 对象
//下面为servletContext对象的方法
//servletContext相当于一个存储空间,任何东西都可以存到里面,
//可以设置值,获取值,这个值以key,value形式存在
//所有的servlet都可以获取servletContext储存的东西
Object getAttribute(String var1);
Enumeration<String> getAttributeNames();
void setAttribute(String var1, Object var2);
void removeAttribute(String var1);
GenericServlet抽象类
- 前面servlet都是通过实现servlet接口来编写的,并且需要重写servlet里面的所有的方法,这样就麻烦了许多,比如我只要用到servlet接口的里面的其中几个方法,但是也要全部重写servlet接口的所有方法,并且还需要自己手动的维护ServletConfig这个对象的引用
- 而GenericServlet抽象类就解决了这些问题,你想要里面的哪个方法就重写哪个,并且它已经帮你维护好了ServletConfig方法
- GenericServlet抽象类直接实现了Servlet接口,我们要编写servlet类直接继承GenericServlet抽象类 就可以了
- 然而,虽然GenricServlet是对Servlet一个很好的加强,但是也不经常用,因为他不像HttpServlet那么高级。
HttpServlet抽象类
- HttpServlet之所以运用广泛的另一个原因是现在大部分的应用程序都要与HTTP结合起来使用。这意味着我们可以利用HTTP的特性完成更多更强大的任务。Javax。servlet.http包是Servlet API中的第二个包,其中包含了用于编写Servlet应用程序的类和接口。Javax.servlet.http中的许多类型都覆盖了Javax.servlet中的类型。
- HttpServlet抽象类是继承于GenericServlet抽象类而来的。使用HttpServlet抽象类时,还需要借助分别代表Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。
- HTTP请求处理方法:HttpServlet定义了一系列方法,用于处理不同类型的HTTP请求,包括doGet()、doPost()、doPut()、doDelete() 等。这些方法可以根据HTTP请求类型来实现,以执行相应的操作。开发人员可以重写这些方法,根据自己的需求来处理HTTP请求。例如,要处理HTTP的GET请求,你可以重写doGet()方法:
javaCopy code
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理GET请求的逻辑
}
- 发、HTTP请求对象和响应对象:HttpServlet方法的参数包括HttpServletRequest和HttpServletResponse对象,这些对象提供了有关请求和响应的详细信息。你可以使用这些对象来访问请求参数、处理会话、设置响应头、生成响应内容等。
- 初始化和销毁:与通用Servlet一样,HttpServlet也具有init()和destroy()方法,用于在Servlet的初始化和销毁时执行相应的操作。
- HTTP请求映射:你可以使用web.xml文件来将特定的URL模式映射到HttpServlet。这意味着当客户端发送请求匹配特定URL模式时,相应的HttpServlet将会处理该请求。
- 会话管理:HttpServlet也支持会话管理,允许你在HTTP会话中存储和获取数据,以维护用户状态。
- 重定向和请求转发:HttpServlet可以执行重定向和请求转发,使你能够将请求从一个Servlet传递给另一个Servlet,或者将客户端重定向到不同的URL。
总之,HttpServlet是用于处理HTTP请求的基础,它提供了许多方便的方法和功能,用于开发Web应用程序。通过继承HttpServlet并重写适当的方法,你可以实现自定义的HTTP请求处理逻辑,以满足你的Web应用程序需求。