servlet基础

本文详细介绍了Servlet的概念、生命周期及其与CGI的区别。同时,还探讨了如何解决Servlet中的中文问题,配置加载方式,以及ServletConfig和ServletContext的作用。此外,还讨论了RequestDispatcher的工作原理,并对比了forward与include的区别。
摘要由CSDN通过智能技术生成

1.什么是Servler呢?

  Servlet是用java编写得服务器端得程序,与平台和协议无关,只能在容器中运行,它有自己得生命周期.

 

2.Servlet与CGI得区别??

  先说CGI吧,CGI是运行在进程中得,一个进程对应一个CGI程序,如果CGI需要资源共享,那么必须要跨进程调用,数据共享很难,而且CGI是用本地语言编写得,移植性差;而Servlet是属于线程得,支持多线程,资源共享方便,快捷;可移植性好,安全性高.

 

3.简述一下Servlet得生命周期?

init()和destroy()在整个serlet得生命周期中只执行一次

1.       容器加载实例化一个Servlet

2.       调用init()方法初始化Serlvet

3.       调用service()方法执行客户端的请求

4.       调用destroy()方法销毁实例,释放资源

 

分别说说这三个方法得作用?

 init()方法:用于初始化一些资源文件,如读入配置文件得信息

 service()方法:为客户端提供服务,处理客户端发过来得请求

 destory()方法:释放资源

 

4.在Servlet中,如何解决中文化问题?

 

 request.setCharacterEncoding("gbk"); //中文输入乱码

 response.setContentType("text/html;charset="gbk") //静态中文信息乱码

 

5.两种加载Servlet得方法,分别讲述?

  第一种方法是在客户端第一次调用serlvet时,容器会对servlet实例化,在客户端第二次请求过来时,将直接调用该实例对象

  第二种方法是在web.xml配置文件中,在配置<servlet>时加入load-on-startup,那么Servlet部署入容器是,ClassLoader直接对Servlet进行初试化!

 

6.ServletConfig与ServletContext分别有什么作用?

  ServletConfig主要用于读取web.xml文件中配置得初始信息,一个Servlet得ServletContext不能被其他得Servlet调用;

  ServletContext则不一样,他是能被所有Servlet共享,他主要用于读取web.xml文件中得应用初始信息,写日志,共享数据等.

 

7.如何去获得ServletConfig与ServletContext呢?如何使用他们呢?

  ServletConfig

   this.getServletConfig(); 任何方法中均可调用

   config.getServletConfig(); 在init(ServletConfig config)方法中可以调用

  ServletContext

   this.getServletContext();

   config.getServletContext();

 

8.用ServletContext()写日志与读取文件

  this.getServletContext().log(String info);

  InputStream is = this.getServletContext().getResourceAsStream("/book.txt");

 

9.Servlet是单线程还是多线程呢??

  Servlet是单实例多线程得,因此,如果想保证数据得安全,需要加上Synchronized

  在Servlet中尽量使用成员变量,一但使用,必须自己维护其并发状态.

 

10.RequestDispatcher有什么作用,如何可以获得?

   RequestDispatcher用于实现Serlvet之间得请求传递,它有两种方式:forward()与include()

   RequestDispatcher中即可以放相对路径,也可以放绝对路径

   request.getRequestDispatcher(String page);

   ServletContext.getRequestDispatcher(String page)-->绝对路径

   例:

      RequestDispatcher rd = request.getRequestDispatcher("fail.html");

      rd.forward(request,response);

      rd.include(request,response);

 

11.在Servlet中forward与include有什么区别?

  forward表示得是跳转到另一个页面,如forward("a.html"),但尽管是跳转到第二个页面,但是它仍然还是同一个请求,但返回由跳转页面完成.

  include表示将页面包含在当前Servlet实例中一个返回给客户.

 

12.如何通过配置连接池获得数据库连接?

  1.在web.xml中配置资源引用

   <resource-ref>

    <res-ref-name>jdbc/tarena</res-ref-name> :资源引用名  -----------|

    <res-type>javax.sql.DataSource</res-type> :资源得类型            |

    <res-auto>Container</res-auto>         :可选值 Application     |

    <res-sharing-scope>Shareable</res-sharing-scoping>               |

   </resource-ref>                                                    |

   2.在Tomcat服务器得server.xml配置连接池                               |

   <Context path="/netctoss">  :Web context root --------------------|

    <Resource

         name="jdb       :资源得JNDI查找得名字

        c/tarena"          type="java.sql.DataSource"      :资源

         username="root"

         password="root"

         driverClassName="com.mysql.jdbc.Driver"

         maxIdle="10"     :最大空闲数

         maxWait="5000"   :最大等待时间(毫秒)

         url="jdbc:mysql://localhost/tarena"

         maxActive="10"/>            :最大活动连接数

    </Context>

    * maxActive

    - 同一时刻可以自数据库连接池中被分配的最大活动实例数。

    * maxIdle 

    - 同一时刻数据库连接池中处于非活动状态的最大连接数。

    * maxWait

    - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。

 

    3.在Servlet得init()方法中通过JNDI获得数据源

    Context ic = new InitalContext();

    DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/tarena"); :找到所需得数据源

    Connection conn = ds.getConnection();

 

13.JAVA Bean必须具备得条件是什么?

   1.必须有空参数得构造器

   2.属性都有标准得setter,getter

   3.远程传输需要实现java.io.Serializable接口

 

为什么会出现cookies与session呢?

 这是因为Http协议是一种无状态得连接,他不能保存用户在互联网中浏览数据得信息.

 

简要介绍一个Cookies是什么,如何使用.

  Cookies是客户端保存状态得一种机制,通过cookie文件来记录信息.

 

从请求中获得cookie,request.getCookies(),如何还不存在Cookie,则新建一个(new Cookie(String name,String value))

,从Cookie中获得信息,Cookie.getValue(),将Cookie写回客户端,response.addCookie(Cookie cookie);

 

 

编写Cookie时,需要注意得地方:

  1.Cookie一般建立在客户端

  2.通过request与response对象在客户端与服务器端传送

  3.只能保存文本信息,不能保存对象

  4.一个Cookie就是一个key,value键值对

  5.不管是key还是value,它们都必须是String类型得

 

 

在Cookie中,可以通过setMaxAge来设置Cookie得类型

Cookie有三中类型

 setMaxAge:0 不支持Cookie

 setMaxAge:负数 会话Cookie,保持在浏览器中,不会写入文件中

 setMaxAge:正数 普通Cookie,写文件

 

Session:在服务器端保存状态得机制,通过HttpSession对象保存记录得信息

创建Session得两种方法:

 HttpSession session = request.getSession();

 每次都会创建一个新得session

 HttpSession session = request.getSession(true/false);

 true:没有session时,自动创建session

 flase:没有session时,返回null,不会自动创建session对象

 

设置session有效时间(单位是以秒来计算)

 session.setMaxInactiveTnterval(int interval)

 负数表示session永不超时

 

 销毁Session

 session.invalidate();

 

Filter过滤器

 Filter得生命周期方法:

   init();

   doFiter();

   destroy();

filter在webapp启动时候被实例化,容器会执行其init()方法.

 

public void doFilter(SerletRequest request,ServletResponse response,FilterChain filterChain){

  try{

        request.setCharaterEncoding("gbk");

         filterChain.doFilter(request,response);

  }

  catch(Exception e){

   e.printStackTrace();

  }

 

在web.xml中配置filter

<filter>

 <filter-name>encodingfilter</filter-name>

   <filter-class>filter.EncodingFilter</filter-class>

</filter>

<filter-mapping>

  <filter-name>encodingfilter</filter-name>

  <url-pattern>/*</url-pattern>

 

filter得四中类型:

在<filter-mapping>中配置

 <dispatcher>REQUEST</dispatcher> :客户端得直接得请求才触发过滤器

 <dispatcher>FORWARD</dispatcher> :servler调用rd.forward(request,response)时触发

 <dispatcher>INCLUDE</dispatcher> :servler调用rd.include(request,response)时触发

 <dispatcher>ERROR</dispatcher> :发生错误,跳转到错误页面时触发

 

 

Listener:

一共有六种listener,分三大类:

监听servlet context

监听servlet session

监听servlet request

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值