Servlet基础

Servlet基础,第1张

Servlet基础

目录

1.Servlet简介

 2.Servlet生命周期

3.Servlet 的配置

 4.Servlet中的重定向和转发

 5.cookie、session

 6.过滤器

7.监听器


1.Servlet简介

        Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容,狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类


Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:

1.客户端发送请求至服务器端;

2.服务器将请求信息发送至 Servlet;

3.Servlet 生成响应内容并将其传给服务器。

4.服务器将响应返回给客户端。

jsp和servlet的联系

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。

Servlet和JSP最主要的不同点在于:

Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。

而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

JSP侧重于视图,Servlet主要用于控制逻辑

Servlet更多的是类似于一个Controller,用来做控制。

 2.Servlet生命周期

Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。在讨论Servlet生命周期之前,先让我们来看一下这几个方法

servlet生命周期可被定义为从创建直到毁灭的整个过程,以下是servlet遵循的过程:

Servlet 通过调用 init () 方法进行初始化。

Servlet 调用 service() 方法来处理客户端的请求。

Servlet 通过调用 destroy() 方法终止(结束)。

  1. init()方法

 在Servlet的生命周期中,仅执行一次init()方法,相当于java静态代码块

     2. service()方法

它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用

     3. destroy()方法

仅执行一次,在服务器端停止且卸载Servlet时执行该方法。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

3.Servlet 的配置

        Servlet不是网页文件,而是运行在服务器端的小程序,所在在form中 action时,不会有XXX.jsp这样的网页名称,而要指定Servlet服务小程序的名称。这时就要对Servlet进行配置 ,以便于Servlet的容器对小程序进行查找并运行。     


      Servlet1  服务器里的servlet小程序的名字
      servlet.Servlet1  服务器里的Servlet小程序的类 


      Servlet1    服务器里的servlet小程序的名字
      /OK            网址里访问Servlet的路径 
 
 4.Servlet中的重定向和转发

  重定向: 相当于超链接

        response.sendRedirect(String path)

  转发: 相当于调用

request.getRequestDispatcher("success.jsp").forward(request,response);

重定向和转发的区别

重定向发生两次请求;而转发只有一次。

转发不会改变访问的地址;而重定向会更改。

转发发生在服务器(不如servlet),重定向发生在客户端(浏览器)

重定向可以访问外部网站,转发只能访问内部资源

转发的性能要优于重定向

 5.cookie、session

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是cookie与Session。cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

cookie具有不可跨域名性cookie中保存中文只能编码。一般使用UTF-8编码即可。不推荐使用GBK等中文编码,因为浏览器不一定支持,而且Javascript也不支持GBK编码。

cookie不仅可以使用ASCII字符与Unicode字符,还可以使用二进制数据。例如在cookie中使用数字证书,提供安全度。使用二进制数据时也需要进行编码。

 

 注意:本程序仅用于展示cookie中可以存储二进制内容,并不实用。由于浏览器每次请求服务器都会携带cookie,因此cookie内容不宜过多,否则影响速度。cookie的内容应该少而精。

cookie并不提供修改、删除 *** 作。如果要修改某个cookie,只需要新建一个同名的cookie,添加到response中覆盖原来的cookie。

  如果要删除某个cookie,只需要新建一个同名的cookie,并将maxAge设置为0,并添加到response中覆盖原来的cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。

两者最大的区别在于生存周期,一个是IE启动到IE关闭.(浏览器页面一关 ,session就消失了)

一个是预先设置的生存周期,或永久的保存于本地的文件。(cookie)

Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪

cookie是完全保持在客户端的如:IE firefox 当客户端禁止cookie时将不能再使用

import javax.servlet.http.cookie;
import java.io.IOException;
public class Servlet2 extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        request.setCharacterEncoding("UTF-8");//post方式提交,那必须要指定字符集。
        String username=request.getParameter("name"); //接收传入的用户名
        String password=request.getParameter("p1"); //接收登录界面传入的密码
        cookie[] cookie =request.getcookies();
        cookie ck=null;
        for (int i=0;i 

 以上是在服务器端对cookie进行 *** 作。使用Javascript也可以在客户端对cookie文件进行 *** 作。


 6.过滤器

顾名思义是起到过滤的作用,所有的请求在真正到达servlet之前都会首先经过过滤器过滤一遍。过滤器也是Servlet的一种 因此也有init和destroy方法,还有一个服务方法,只是这里提供的是过滤服务

一个Servlet要想成为过滤器需要实现javax.servlet.Filter接口

一般客户端发出请求后会交给Servlet;如果过滤器存在,则客户端发出的请求都是先交给过滤器,然后交给Servlet

必须实现以下方法:

1.public  void  init(FilterConfig config)  throws  ServletException{

        //   init方法在Web容器启动时就会调用;

}   

  1. public  void  doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){// doFilter的参数是ServletRequest和ServletResponse而不是Http的;
  2. }  

3.public void destroy(){

        //应用被关闭时调用

}//向多个过滤器及后面的servlet传递请求,否则servlet无法执行

写完过滤器后,我们必须要限制过滤器调用的范围,即域名为多少时会调用过滤器,

我们在web.xml 中进行配置

  

    myFilter               

    com.lq.Filter.Myfilter      

  

  

    myFilter               

    
        //取Session中的用户列表
        List online=(List) this.application.getAttribute("online");
        String username=(String) se.getSession().getAttribute("username");//获取用户名
        online.remove(username);//从列表中删除用户
        application.setAttribute("online",online);//将删除的列表重新设置到application中.
    }
    public void contextDestroyed(ServletContextEvent sce) {
    }
    public void sessionCreated(HttpSessionEvent se) {
    }
    public void attributeRemoved(HttpSessionBindingEvent sbe) {
    }
    public void attributeReplaced(HttpSessionBindingEvent sbe) {
    }
}

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5661267.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存