初识前端--Servlet基础
Server 与 Applet 的缩写。可以像生成动态的 WEB 页,Servlet 主要运行在服务器端,并由服务器调用执行, 是一种按照 Servlet 标准来开发的类。 是 SUN 公司提供的一门用于开发动态 Web 资源的技术。
Servlet 本质上也是 Java 类,但要遵循 Servlet 规范进行编写,没有 main()方法,它的创建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。
Servlet 是和 HTTP 协议是紧密联系的,其可以处理 HTTP 协议相关的所有内容。这也是Servlet 应用广泛的原因之一。
提供了 Servlet 功能的服务器,叫做 Servlet 容器,其常见容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。
基于Servlet实现基本请求处理
创建Tomcat服务和动态项目
基础步骤参考初识前端–启动服务器
其中有两点需要注意:
- 创建动态项目时,可以选择动态Web的模型版本
- 如果是3.0以上的不需要写配置文件,通过注解的方式配置参数
- 如果是以下版本,则需要创建配置文件,声明相关配置
- 下文以2.5版本为例先做介绍
- 给项目命名后,点击两次next,可以设置 Context Root,站点名,即访问时的根层资源名
设置配置参数
- 打开项目文件-WebContent-WEB-INF-web.xml
- 可以看到一些XML配置,在根节点下增加两个子节点,建议使用Design模式,选中根节点右键 -> Add Child-message-destination - welcome-file-list ->
- >servlet:有两个子节点
- servlet-name:给当前这个servlet命名,与servlet-mapping中的servlet-name保持同名
- servlet-class:声明实现servlet的类
- >servlet-mapping
- servlet-name:给当前这个servlet命名,与servlet中的servlet-name保持同名
- url-pattern:声明访问时的资源路径,需要加/
- >servlet:有两个子节点
继承servlet相关类,实现其方法
继承HttpServlet类,重写其servlet方法
注意导包
public class Servlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
System.out.println("servlet OK");
}
}
继承GenericServlet类,重写其
public class Servlet02 extends GenericServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("Servlet02...");
}
}
实现Servlet接口
servlet接口提供了多个方法需要重写,上述的两个类实际也是提前实现了Servlet接口,只保留最关键的接口供给我们自己实现其相关功能
- init():初始化方法,创建实例时使用该方法
- service():主要方法,调用该servlet时调用,可多次使用
- 其他的方法在代码中有介绍,没提及的不太重要
public class Servlet03 implements Servlet {
/**
* 系统方法,初始化方法,当servlet被实例化时调用,只会执行一次(在第一次访问 Servlet执行)
* 当有请求访问servlet时,会先判断是否存在servlet实例,如果不存在,则调用init方法,实例化servlet类;如果存在,则不调用init方法
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("Servlet03 init...");
}
//系统方法,返回null即可
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 系统方法,服务方法,每当有请求访问servlet时,都会调用;可以调用多次
*/
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("Servet03...");
}
@Override
public String getServletInfo() {
return null;
}
/**
* 系统方法,销毁方法,在服务器关闭时调用该方法,只会执行一次
*/
@Override
public void destroy() {
System.out.println("Servlet03 destoy...");
}
}
来源:https://blog.csdn.net/qq_32886505/article/details/102748325