Servlet

Servlet

Servlet 是一个运行于 Web 服务器中的特殊 Java 程序,它接收和响应每个客户端的请求,双方遵循 HTTP 协议。

Servlet 的作用

动态向客户端输出 Web 页面的内容,是创建动态资源的常用技术之一。

如果新建了Servlet或者修改了Servlet代码,都需要重启服务器
如果新建或修改静态资源,不需要重启服务器

Servlet 的应用场景

1. 用户注册/用户登录/用户退出

2. 显示新闻内容

Servlet 与普通的 Java 程序的区别

1. 必须实现 Servlet 接口

2. 必须在 Servlet 容器(服务器)中运行

3. Servlet 程序可以接收用户请求参数以及向浏览器输出数据

创建Servlet的方式

Servlet结构
    Servlet接口
        GenericServlet实现类
            HttpServlet实现类

方式一:
//根据Servlet接口创建Servlet
1.实现Servlet接口创建Servlet
2.重写了service方法


方式二:
//根据GenericServlet类创建Servlet

1.  继承GenericServlet创建Servlet
2.重写了service方法

//实现Servlet接口与继承GenericServlet创建Servlet的区别
1.实现Servlet接口需要重写很多方法
2.继承GenericServlet只需要重写services方法
Generice特点
    客户端提交get请求或post提交的请求统一都有service方法处理


方式三:
//根据HttpServlet创建Servlet(推荐使用)

1.继承HttpServlet创建Servlet
2.重写了doGet/doPost方法

//httpServlet处理请求的特点
会根据客户端的请求方式处理请求
    如果是get请求,就调用doGet处理get请求
    如果是post请求,就调用doPost处理post请求


//继承httpServlet与继承GenericServlet创建Servlet区别
继承GenericServlet所有的请求都有service方法处理,不能区分get或post请求类型,

继承httpServlet可以根据不同的请求类型分别处理请求。
httpServlet依然重写父类的service方法处理请求,但是进行了进一步的加工,

在service重写的方法里面判断请求的类型,
如果是get请求就调用子类的doGet方法,如果是post请求就调用子类的doPost方法。

开发 Servlet

1. 创建一个普通 Java 类,继承 HttpServlet 类。

直接创建Servlet文件  类名为MyServlet

2.  添加当前工程对 Tomcat 的依赖 JAR 包

3. 重写 doGet 和 doPost 这二个方法。

4. 在 doGet 方法中调用 doPost 方法。
this.doPost(request,response);

5. 在 doPost 方法中,向浏览器输出当前时间。
PrintWriter writer = response.getWriter();
writer.write(new Date().toLocaleString());
writer.flush();
writer.close();

6. 在这个普通 Java 类前,用@注解配置这个 Servlet 的映射路径
@WebServlet(name="MyServlet",urlPatterns = "/first")
public class MyServlet extends HttpServlet {

}


@WebServlet(name="类名",urlPatterns = "/Servlet访问名称")
public class 类名 extends HttpServlet {

}
//默认路径/Servlet访问名称   可以访问该Servlet文件

7. 将这个Web项目发布到Tomcat中

Servlet生命周期

一个对象从创建到销毁的过程,就是生命周期。


//servlet生命周期:
1.先构造servlet,然后使用init方法使其初始化。

2.处理来自客户端对service方法的所有调用。

3.从服务中取出servlet,然后使用destroy方法销毁它,最后进行垃圾回收处理
public void init(ServletConfig servletConfig) 
throws ServletException     
初始化Servlet的方法,执行一次,由服务器调用。

public void service(ServletRequest servletRequest, ServletResponse servletResponse) 
throws ServletException, IOException    
处理客户端请求的方法,执行多次,由服务器调用。

public void destroy()   销毁Servlet的方法,执行一次,由服务器调用。
Servlet生命周期流程
1_浏览器通过http来访问我的tomcat,
http://localhost:8080/myweb(工程名)/first(访问名)

2_服务器获取/myweb这个工程/项目/模块/应用名,去tomcat中,查看一下,
去tomcat/webapps目录中找是否有这个名字,
  如果有myweb的话,就继续进行一下步操作
  如果无myweb的话,返回空白页面

3_服务器获取/first这个名字,
 去tomcat中每个Servlet的@WebServlet(urlPatterns)中查找有没有这个路径,
  如果有/first的,就继续进行一下步操作
  如果无/first的话,返回404错误页面

4_服务器查询这个Servlet对象是否已经存在,
  如果已经存在,直接使用
  如果不存在,则创建这个Servlet,执行无参构造器

5_如果不存在,服务器调用Servlet的构造器方法创建并同时调用init方法,为这个Servlet进行初始化操作,
  如果存在,构造器和init()方法不会执行


6_服务器会创建request和response这二个对象,调用Servlet对象的service()方法,
将刚刚创建好的request和reponse对象传入到service()方法中。

7_Servlet在service()方法中向浏览器的所有输出内容,都封装在response对象中。

8_response对象中的数据,会发送Web服务器,Web服务器会将结果以HTML的形式响应给浏览器。

9_浏览器解析这个由Web服务器响应过来的html文件,从而显示出漂亮的效果。

10_如果服务器停止,那么先会调用服务器内部所有Servlet的destory()方法,
这时Servlet对象从服务器中销毁,GC会在适当的时候回收。

结论:
servlet在初始化一次之后,就不再创建,因此servlet是一个单例对象。

servlet 服务器创建的,服务器调用的。

什么时候使用doPost,什么时候使用doGet,doPost和doGet有什么区别?

什么时候在doPost里面写,什么时候在doGet里面写?

前端浏览器提交请求
     Get请求,明文的,请求数据在url上,url?get请求数据,提交数据大小是有限制1kb~18kb
     Post请求,非明文的,在请求体上。post提交数据大小没有限制(建议使用)
     默认所有的请求都是get,只有表单明确指明了是post才是post请求

Servelt,处理请求与响应
     DoGet,处理get请求
     DoPost,处理post请求
一般情况,不需要区分,无论get还是post统一在一个方法处理,另一个方法调用这个方法就可以了
特殊请求,请求一定要分开处理,才需要在doGet和doPost单独处理

流程

1.浏览器根据url寻找ip地址,浏览器获取到url后,先在搜寻本地的hosts,如果本地没有就会搜寻远程的dns.

2.找到ip地址后,就会根据url上的端口来寻找对应网络电脑主机上的服务器.

3.服务器可以获取传过来的资源目录,然后再进入服务器中的webapps找到对应的资源目录

注意:
1.Servlet的实例是由服务器创建的
2.所有的请求信息都在request对象里面
3.所有的响应信息都在response对象里面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值