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