本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Servlet接口,定义一些处理请求的方法。返回给客户端动态资源。我们使用都是创建一个继承于HTTPServlet类(实现了Servlet接口)的子类。处理doGet,doPost方法。 MyServlet--》HttpServlet-->GenericServlet
Servlet 的生命周期
何时创建? 第一次请求时加载,并创建对象 何时消亡? destroy方法调用时,即服务器关闭时
Init()方法 初始化方法
service()方法 处理请求方式,对于客户端过来的请求无论是什么方式的请求,都会拦截,如果存在doGet,则不会调用。 其实service方法只在HttpSerlvet类都已经确定好,而我们创建的servlet类都是HttpSerlvet子类,那么我们无需再重写此方法。
destroy()方法 serlvet对象生命消亡的方法,在关闭服务器时调用。
Servlet3.0,使用注解的方式来表征servlet的一些数据。 如果是Servlet3之前,那么对于比如url mapping等数据需要展示在web.xml中。
Servlet3.0的方式(目前的方式): 创建servlet类时,会存在以下代码:
@WebServlet( urlPatterns = { "/MyServlet",
}, initParams = { @WebInitParam(name = "username", value = "666") })
Servlet3.0之前的方式: 1有关创建。老版本的servlet的创建依托于web.xml,其中配置servlet时,何时创建由 1 当然默认值是0, 如果load-on-startup的值是>=0的数,代表服务器启动时就会加载serlvet。如果值>0,值越小,加载的优先级越高。0最后加载代表最大整数。 如果是负数,代表第一次请求时加载。 Serlvet的特点: 1 servlet就是一个java类,继承于HttpServlet 2 使用response对象对客户端做响应数据的返回,通过getWriter()方法 3 处理客户端向服务器发送的请求体 3.1以GET请求为例,请求体直接拼接在URL的?后,多个参数间用&隔开。 http://localhost:8080/LoginTest/LoginServlet?username=shm&password=666 1 通过request.getParameter(“username”)方法获得客户端发送的请求体数据 2 为了防止乱码,request和response都要设置编码格式: request.setCharacterEncoding(“utf-8”); response.setCharacterEncoding(“utf-8”); 3.2 以post方式为例,使用jsp为依托,使用form表单 当点击登录按钮,跳转到serlvet,由servlet来处理请求。 post的url中是没有数据,也就是说没有?,所有的数据包装成了请求体,相对于GET请求,没有把用户名和密码裸露出来,安全。
Serlvet 映射 URL mappings 1 一个servlet对应多个URL 2 匹配? 2.1 精准匹配 /Servlet 2.2 模糊匹配 /* 2.3 后缀名匹配 .do 优先级2.1>2.2>2.3 /a/b//c精准匹配
GET 请求与POST请求的区别: 1 GET 请求是将请求体放置在URL的后面,以?开头作为标识,多个请求体的数据格式为: username=shm & password=666 类似于<K,V>结构。 而POST请求没有把请求体放置在URL上。 2 GET请求的URL是有长度限制的。不同浏览器长度不同,IE是1024字节。 3 安全性 POST请求不会把密码这样的信息裸露出来,更安全。