爱做网站外国,一流的网站建设与优化,客户说做网站没效果,冀州市网站建设一、什么是 Servlet Servlet 在开发动态 WEB 工程中#xff0c;得到广泛的应用#xff0c;掌握好 Servlet 非常重要了 , Servlet( 基 石 ) 是 SpringMVC 的基础 Servlet(java 服务器小程序 ) #xff0c;它的特点 : 1. 他是由服务器端调用和执行的 ( 一句话得到广泛的应用掌握好 Servlet 非常重要了 , Servlet( 基 石 ) 是 SpringMVC 的基础 Servlet(java 服务器小程序 ) 它的特点 : 1. 他是由服务器端调用和执行的 ( 一句话是 Tomcat 解析和执行 ) 2. 他是用 java 语言编写的 , 本质就是 Java 类 3. 他是按照 Servlet 规范开发的 ( 除了 tomcat-Servlet weblogic-Servlet) 4. 功能强大可以完成几乎所有的网站功能 ( 在以前我们老程员使用 Servlet 开发网站 ) 技 术栈要求高 二、快速入门- 手动开发 Servlet
1.需求说明 1开发一个 HelloServlet 2当浏览器 访问 http://localhost:8080/web 应用名/helloServlet 时后台输出 hi HelloServelt 2.具体步骤 1. 编写类HelloServlet去实现 Servlet 接口 2. 实现 service 方法处理请求并响应数据 3. 在 web.xml 中去配置 servlet 程序的访问地址 3.演示 1. 创建 hspedu_servlet JavaWeb 工程并配置好 Tomcat 2. 添加 servlet-api.jar( 在 tomcat/lib 下 ) 到工程 , 因为 servlet.jar 不是 jdk 自带的 , 要引入 3. 在 src 下 包 com.hspedu.servlet.HelloServlet.java 并实现 Servlet 接口 4.在web.xml配置HelloServlet即:给HelloServlet 提供对外访问地址
5.通过浏览器访问HelloServlet ,看是否正确(记住要redeploy[快] 或者 restart[慢])
package com.hspedu.servlet;import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;/*** 解读* 1. 开发一个Servlet 需要 实现Servlet接口* 2. 实现Servlet接口的方法5个*/
public class HelloServlet implements Servlet {private int count 0; //属性/*** 1.初始化 servlet* 2.当创建HelloServlet 实例时会调用init方法* 3. 该方法只会被调用一次* param servletConfig* throws ServletException*/Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println(init() 被调用);}/*** 返回ServletConfig 也就是返回Servlet的配置* return*/Overridepublic ServletConfig getServletConfig() {return null;}/*** 1. service方法处理浏览器的请求(包括get/post)* 2. 当浏览器每次请求Servlet时就会调用一次service* 3. 当tomcat调用该方法时会把http请求的数据封装成实现ServletRequest接口的request对象* 4. 通过servletRequest 对象可以得到用户提交的数据* 5. servletResponse 对象可以用于返回数据给tomcat-浏览器* param servletRequest* param servletResponse* throws ServletException* throws IOException*/Overridepublic void service(ServletRequest servletRequest,ServletResponse servletResponse) throws ServletException, IOException {count;//如果count的值在不停的累计说明HelloServlet是单例的System.out.println(hi HelloServlet~ count count);//Tomcat每处理一次http请求就生成一个新的线程System.out.println(当前线程id Thread.currentThread().getId());//思考-从servletRequest对象来获取请求方式-//1. ServletRequest 没有得到提交方式的方法//2. ServletRequest 看看ServletRequest子接口有没有相关方法//3. 老师小技巧ctrlaltb 可以看到接口的子接口和实现子类//4. 把servletReqeust转成 HttpServletRequest引用//5. 仍然是Java基础的OOPHttpServletRequest httpServletRequest (HttpServletRequest) servletRequest;String method httpServletRequest.getMethod();if(GET.equals(method)) {doGet(); //用doGet() 处理GET请求} else if(POST.equals(method)) {doPost(); //用doPost() 处理POST请求}}/*** 用于响应get请求的*/public void doGet() {System.out.println(doGet() 被调用..);}/*** 用于响应post请求的*/public void doPost() {System.out.println(doPost() 被调用..);}/*** 返回servlet信息使用较少* return*/Overridepublic String getServletInfo() {return null;}/*** 1. 该方法是在servlet销毁时被调用* 2. 只会调用一次*/Overridepublic void destroy() {System.out.println(destroy() 被调用...);}
}4.浏览器调用 Servlet 流程分析 三、Servlet 生命周期 主要有三个方法 1. init() 初始化阶段 2. service() 处理浏览器请求阶段 3. destroy() 终止阶段 1.初始化阶段 Servlet 容器 ( 比如 : Tomcat) 加载 Servlet 加载完成后 Servlet 容器会创建一个 Servlet 实例 并调用 init() 方法 init() 方法只会调用一次 , Servlet 容器在下面的情况装载 Servlet 1. Servlet 容器(Tomcat)启动时自动装载某些 servlet实现这个需要在 web.xml 文件中添加 load-on-startup1/load-on-startup 1 表示装载的顺序
2在 Servlet 容器启动后浏览器首次向 Servlet 发送请求(这个前面说过)
3Servlet 重新装载时(比如 tomcat 进行 redeploy【redeploy 会销毁所有的 Servlet 实例】)浏览器再向 Servlet 发送请求的第 1 次
2.处理浏览器请求阶段(service 方法) 1. 每收到一个 http 请求服务器就会产生一个新的线程去处理 [ 线程 ] 2. 创建一个用于封装 HTTP 请求消息的 ServletRequest 对象和一个代表 HTTP 响应消息的 ServletResponse 对象 3. 然后调用 Servlet 的 service() 方法并将请求和响应对象作为参数传递进去 3.终止阶段 destory 方法(体现 Servlet 完整的生命周期) 当 web 应用被终止或者 Servlet 容器终止运行或者 Servlet 类重新装载时会调用 destroy() 方法 , 比如重启 tomcat , 或者 redeploy web 应用 四、通过继承 HttpServlet 开发 Servlet 在实际项目中都是使用继承 HttpServlet 类开发 Servlet 程序 更加方便 1.具体的开发步骤 1. 编写一个类去继承 HttpServlet 类 2. 根据业务需要重写 doGet 或 doPost 方法 3. 到 web.xml 中的配置 Servlet 程序 2.应用实例 1. 创建 D:\idea_java_projects\hspedu_servlet\src\com\hspedu\servlet\HiServlet.java package com.hspedu.servlet;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 HiServlet extends HttpServlet {//重写HttpServlet的doGet 和 doPost/*** 处理doGet请求* param req* param resp* throws ServletException* throws IOException*/Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(HiServlet doGet()...);}/*** 处理doPost* param req* param resp* throws ServletException* throws IOException*/Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(HiServlet doPost()...);}
}2. 修改 D:\idea_java_projects\hspedu_servlet\web\WEB-INF\web.xml 完成配置 !-- 配置HiServlet --servletservlet-nameHiServlet/servlet-nameservlet-classcom.hspedu.servlet.HiServlet/servlet-class/servletservlet-mappingservlet-nameHiServlet/servlet-nameurl-pattern/hiServlet/url-pattern/servlet-mapping 五、IDEA 开发 Servlet 程序 ● 说明 编手动开发 Servlet 需要程序员自己配置 Servlet , 比较麻烦在工作中直接使用 IDEA 开 发 Servlet 会更加方便 ● 应用实例 六、Servlet 注意事项和细节 1. Servlet 是一个供其他 Java 程序 Servlet 引擎调用的 Java 类不能独立运行 2. 针对浏览器的多次 Servlet 请求通常情况下服务器只会创建一个 Servlet 实例对象 也就是说 Servlet 实例对象一旦创建它就会驻留在内存中为后续的其它请求服务直至 web 容器退出 / 或者 redeploy 该 web 应用 servlet 实例对象才会销毁 3. 在 Servlet 的整个生命周期内 init 方法只被调用一次。而对每次请求都导致 Servlet 引 擎调用一次 servlet 的 service 方法。 4. 对于每次访问请求 Servlet 引擎都会创建一个新的 HttpServletRequest 请求对象和一个 新的 HttpServletResponse 响应对象然后将这两个对象作为参数传递给它调用的 Servlet 的 service() 方法 service 方法再根据请求方式分别调用 doXXX 方法 5. 如果在 servlet 元素中配置了一个 load-on-startup 元素那么 WEB 应用程序在启动时 就会装载并创建 Servlet 的实例对象、以及调用 Servlet 实例对象的 init() 方法 , 老师聊聊 ( 定 时发送邮件的服务 / 自动启动 - 完成任务 ) 七、Servlet - 注解方式 1.快速入门 具体步骤 1. 编写类 OkServlet 去继承 HttpServlet 2. 注解方式配置 OkServlet, 一个 Servlet 支持配置多个 urlPattern 2.Servlet urlPattern 配置 (1)精确匹配 配置路径 : WebServlet( /ok/zs ) 访问 servlet: localhost:8080/servlet /ok/zs (2)目录匹配 配置路径 : WebServlet( /ok/* ) 访问文件 : localhost:8080/servlet /ok/aaa localhost:8080/servlet /ok/bbb (3) 扩展名匹配 配置路径 : WebServlet(*.action) 访问文件 : localhost:8080/hsp /zs.action localhost:8080/hsp /ls.action 提示 : WebServlet( / *.action) , 不能带 / , 否则 tomcat 报错 (4) 任意匹配 配置路径 : WebServlet(/) WebServlet(/*) 访问文件 : localhost:8080/hsp /aaa localhost:8080/hsp /bbb localhost:8080/hsp /ccc 提醒 / 和 /* 的配置会匹配所有的请求这个比较麻烦要避免 3.注意事项和使用细节 1 、当 Servlet 配置了 /, 会覆盖 tomcat 的 DefaultServlet, 当其他的 utl-pattern 都匹配 不 上 时 都 会 走 这 个 Servlet, 这 样 可 以 拦 截 到 其 它 静 态 资 源 , 比 如 D:\hspedu_javaweb_temp\hspedu_servlet\web\hi.html 查看 tomcat/conf/web.xml , 配置的 DefaultServlet The default servlet for all web applications, that serves static resources. 这个默认的 servlet 是处理静态资源的一旦拦截静态资源不能处理 2 、当 Servelt 配置了 /*, 表示可以匹配任意访问路径 3 、提示 : 建议不要使用 / 和 /* , 建议尽量使用 精确匹配 4 、优先级遵守 : 精确路径 目录路径 扩展名路径 /* /