架设仿冒网站挂马,建筑公司起名大全2022,电子商务网站建设的规划和实施,整合wordpress与discuz零、在线文档
Servlet 3.1 API Documentation - Apache Tomcat 8.0.53
一、Servlet基本介绍
1.为什么出现Servlet
提出需求:请用你现有的html css javascript#xff0c;开发网站#xff0c;比如可以让用户留言/购物/支付,你能搞定吗?
不能 这几个不能直接操作数据库
…零、在线文档
Servlet 3.1 API Documentation - Apache Tomcat 8.0.53
一、Servlet基本介绍
1.为什么出现Servlet
提出需求:请用你现有的html css javascript开发网站比如可以让用户留言/购物/支付,你能搞定吗?
不能 这几个不能直接操作数据库
所以引入动态页面 跟用户交互
走静态和动态两个方面 2.什么是Servlet
Servlet在开发动态WEB工程中得到广泛的应用掌握好Servlet 非常重要了, ServletSpringMVC的基础
Servlet(java 服务器程序)它的特点:
1.他是由服务器端调用和执行的(是Tomcat解析和执行)
2.他是用java语言编写的本质就是Java类
3.他是按照Servlet规范开发的tolmcat - Servlet weblogic - Servlet
4.功能强大可以完成几乎所有的网站功能
3.Servlet在JavaWeb项目位置 二、Servlet基本使用
1.Servlet开发方式
1. servlet3.0前使用web.xml , servlet3.0版本以后(包括3.0)支持注解同时 支持web.xml配置
2.如何查看servlet版本[如图] 3.讲解SpringBoot时 我们用注解方式 从ssm,springboot后面全部使用注解
4.这专门讲servlet,为让大家更清晰知道servlet使用原理,老师用配置方式(说明原生的Servlet在项目中使用很少)
5.不管使用哪种方式本质都一样
2.快速入门 - 手动开发Servlet
需求说明
1、开发一个HelloServlet
2、当浏览器访问http:/ /localhost:8080/web应用名/helloServlet时后台输出hi HelloServelt
具体步骤
1.编写类HelloServlet去实现 Servlet接口(本质是一套规范)
2.实现service方法处理请求并响应数据
3.在web.xml中去配置servlet程序的访问地址
操作步骤
1.创建servlet JavaWeb工程并配置好Tomcat
2.添加servlet-api.jar(在tomcat/lib)到工程,因为servlet.jar不是jdk自带的,要引入引入后记得构建为libray 3.在src下包com.yinhai.servlet.HelloServlet.java并实现Servlet接口
package com.yinhai.servlet;import javax.servlet.*;
import java.io.IOException;/*** author 银小海* version 1.0* email yinhai14qq.com*/
public class HelloServlet implements Servlet {Overridepublic void init(ServletConfig servletConfig) throws ServletException {/*1.初始化servlet2.当创建HelloServlet实例时会调用init方法3.该方法只会被调用1次*/}/*返回ServletConfig也就是返回Servlet的配置*/Overridepublic ServletConfig getServletConfig() {return null;}/*1. service 方法处理浏览器的请求(包括get/post)2.当浏览 器每次请求Servlet时就会调用一次service3. 当tomcat调用该方法时会把http请求的数据封装成实现ServletRequest接口的request对象4. 通过servletRequest 对象可以得到用户提交的数据5. servletResponse 对象可以用于返回数据给tomcat-浏览器*/Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}/*返回servlet信息使用较少*/Overridepublic String getServletInfo() {return null;}/*1. 该方法是在servlet销毁时被调用2. 只会调用一次*/Overridepublic void destroy() {}
}4.在web.xmI配置HelloServlet即:给HelloServlet 提供对外访问地址
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0!-- web.xml主要用来配置该web应用使用到的Servlet1. servlet-name: 给Servlet取名(程序员决定), 该名字唯一2. servlet-class: Servlet的类的全路径: Tomcat在反射生成该Servlet需要使用3. url-pattern: 这个就是该servlet访问的url的配置(路径)4. 这时我们应该这样访问servlet http://localhost:8080/servlet/helloServlet5. url-pattern 取名是程序员决定的6. load-on-startup 表示在tomcat 启动时会自动的加载servlet实例小技巧 altr 老师配置
--!-- 配置HelloServlet --servletservlet-nameHelloServlet/servlet-nameservlet-classcom.yinhai.servlet.HelloServlet/servlet-class!--load-on-startup1/load-on-startup--/servletservlet-mappingservlet-nameHelloServlet/servlet-nameurl-pattern/helloServlet/url-pattern/servlet-mapping
/web-app
5.通过浏览器访问HelloServlet ,看是否正确(记住要redeploy或者restart) 3.浏览器Servlet流程分析 servlet是默认单例的 4.Servlet生命周期
1. init() 初始化阶段 2. service() 处理浏览器请求阶段 3. destroy() 终止阶段 5.GET和POST请求的分发处理
开发Servlet, 通常编写doGet、doPost方法。来对表单的get和post请求进行分发处理
1.创建D:\idea_java_projects\yinhai_servlet\web\register.html
Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println(hello world by servlet (count));//思考-从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请求}} 6.通过继承HttpServlet开发Servlet package com.yinhai.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** author 银小海* version 1.0* email yinhai14qq.com*/
public class HiServlet extends HttpServlet {//重写HttpServlet的goGet和doPost/*处理doGet请求*/Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(hiservlet doGet);}/*doPost请求*/Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(hiservlet doPost);}
}HttpServlet本质上是对HttpServlet的service方法的调用 7.IDEA 开发Servlet 程序
手动开发Servlet需要程序员自己配置Servlet ,比较麻烦在工作中直接使用IDEA开发Servlet会更加方便 8.注意事项
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.注解方式配置HspServlet, 一个Servlet支持配置多个urlPattern
package com.yinhai.servlet.annotation;import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.annotation.*;/*** author 银小海* version 1.0* email yinhai14qq.com*/
/*1. WebServlet 是一个注解 java基础-注解* 2. WebServlet 源码* Target({ElementType.TYPE})* Retention(RetentionPolicy.RUNTIME)* Documented 在javadoc工具生成文档有记录* public interface WebServlet {* String name() default ;** String[] value() default {};** String[] urlPatterns() default {};** int loadOnStartup() default -1;** WebInitParam[] initParams() default {};** boolean asyncSupported() default false;** String smallIcon() default ;* }* 3. urlPatterns 对应 web.xml 的 url-pattern/url-pattern
* 4. {/ok1, /ok2} 可以给OkServlet配置多个 url-pattern
* 5. 相当于这个WebServlet(urlPatterns {/ok1, /ok2}) 代替了 web.xml的配置
* 底层使用了 反射注解IO集合 来完成一个支撑
* 6. 浏览器可以这样访问OkServlet时可以 http://localhost:8080/servlet/ok1 或者
* http://localhost:8080/servlet/ok2
* 7. 同学们有很多小问号? 解密. 一会老师再说.
* 8. 我们可以根据 interface WebServlet 源码知道可以配置哪些* web.xml init-param 在注解中如何指定呢? 老师看了源码老师搞定* init-param* param-name/param-name* param-value/param-value* /init-param* 9. 注解方式开发Servlet和 web.xml配置servlet 流程机制是一样* 10. /ok1/aa /ok1/bb /ok1/cc /ok1/aa/bb/cc /ok2* 11. *.action 这时 zs.action ls.action* 12. http://localhost:8080/servlet/register.html*/
WebServlet(urlPatterns {/ok1, /ok2})
public class OkServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(doGet);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(doPost);}
}2.模拟Tomcat注解的底层
package com.yinhai.servlet.annotation;import javax.servlet.annotation.WebServlet;
import java.util.HashMap;/*** author 银小海* version 1.0* email yinhai14qq.com* 模拟一把Tomcat是如果通过 WebServlet(urlPatterns {/ok1, /ok2})* 来装载一个Servlet的** 说明这代码主要的目的就是打破 注解的神秘感*/
public class TestAnnotationServlet {private static final HashMapString, Object hm new HashMap();public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {//1. 首先要得到扫描的包 路径 io, 进而得到类的全路径String classAllPath com.yinhai.servlet.annotation.OkServlet;//2. 得到 OkServlet的Class对象Class? aClass Class.forName(classAllPath);//3. 通过class对象得到AnnotationWebServlet annotation aClass.getAnnotation(WebServlet.class);System.out.println(annotation);String[] strings annotation.urlPatterns();for (String url : strings) {System.out.println(url url);}//如果匹配url,如果是第一次tomcat就会创建一个OkServlet实例放入到hashmapObject instance aClass.newInstance();System.out.println(instance instance);//OkServlet//简单的模拟没有深入.hm.put(OkServlet, instance);System.out.println(hm);}
}3.Servlet urlPatterns配置
//精确匹配
WebServlet(urlPatterns {/ok1/ok, /ok2})
//目录匹配 模糊匹配 即/ok/任意 都能访问到任意包括多级目录
WebServlet(urlPatterns {/ok1/*})
//拓展名匹配 不能带/ /*.xxx否则报错
WebServlet(urlPatterns {*.action})
//任意匹配 WebServlet(/)
WebServlet(urlPatterns {/,/*})
4.注意事项
1、当Servlet配置了/,会覆盖tomcat的DefaultServlet,当其他的utl-pattern都匹配不上时都会走这个Servlet,这样可以拦截到其它静态资源,比如D:\hspedu_ javaweb_temp\hspedu_ servlet\web\hi.html[举例] 查看: tomcat/conf/ web.xml ,配置的DefaultServlet 2、当Servelt配置了/*,表示可以匹配任意访问路径
3、提示:建议不要使用/和/*,建议尽量使用精确匹配
4、优先级遵守:精确路径 目录路径 扩展名路径 /* / 默认
四、课后作业 1.
package com.yinhai.homework;import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;/*** author 银小海* version 1.0* email yinhai14qq.com**/
WebServlet(urlPatterns {/cat})
public class CatServlet implements Servlet {private int count 0;Overridepublic void init(ServletConfig servletConfig) throws ServletException {}Overridepublic ServletConfig getServletConfig() {return null;}Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println(service count count);HttpServletRequest httpServletRequest (HttpServletRequest) servletRequest;String method httpServletRequest.getMethod();System.out.println(method);}Overridepublic String getServletInfo() {return null;}Overridepublic void destroy() {}
}