sevlet学习摘要

1.    Servlet
2.    什么是servlet:在web容器中运行的服务器端JAVA程序,主要用于响应HTTP请求。Servlet一般用于MVC中的控制器部分。
3.    什么是servlet容器:用来管理servlet生命周期的应用程序如(tomcat)。
4.    servlet构架:
public class servlet extendsHttpServlet{
    public void init() throws ServletException {}//初始化
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{}//doget
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{}//dopost
public void destroy() {}//销毁servlet对象
}
5.    写Hello Servlet
public class Hello extends HttpServlet {   
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Response.setContentType ("text/html");
        PrintWriter out = response.getWriter();
        out.println("<HTML>");
        out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println(" <BODY>");
        out.print("Hello");
        out.println(" </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }   
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response)       
    }
}
6.    servlet的继承关系


7.    描述servlet容器与servlet API的关系
8.    什么是JSP Page
java server page 是servlet的扩展,强调web页面表达,编译后是一个类servlet。
9.    servlet与JSP各有什么特点,如何选择这两种技术
10.    JSP构架模型
Model1:纯jsp 维护难,代码可复用性差
Model2:jsp+javabean 在jsp中使用usebean标签,代码在jsp中本质同Model1
Mvc:jsp+servlet+javabean

11.    JSP标签
动作标签:jsp:include
          jsp:forword
          jsp:usebean
          jsp:set/get Property
指令标签:<%@page……%>
<%@include…..%>
<%@taglib…..%>
12.    servlet中如何
1)    从HTML表单中获得参数
request.getParameterNames();enumer;
request.getParameter(); String
2)    如何获得请求头部的信息
Enumeration enumer=request.getHeaderNames();
While(enumer. HasMoreElements())
{
    String header= enumer.next();
    String result=request.getHeader(header);
    Out.print(result);
}
3)    如何获得客户cookie的信息
request.getCookies();array[]
4)    如何设置response的头部信息
response.setHeader();
5)    如何设置响应的content type
response.setContentType(“text/html charset=utf-8”);
6)    如何获得I/O流、text流、二进制流
7)    如何从当前的servlet重定向到其他的URL
response.sendRedirect(“url”)
RequstDispatcher rd=request.get RequstDispatcher(“url”)
Rd.forword(request,response);
8)    如何向客户端写cookie
Cookie cookie=new Cookie(“object”,”jklj”);
Cookie.setMaxAge(时间);
Response.addCookie(cookie);
13.    描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来定义的
服务器实例化一个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGet,doPost)方法,当服务器决定将实例销毁时调用其destory方法。
14.    如何创建Request Dispatcher对象,如何将请求转发给其它的web资源(包含其它的web资源),描述如何利用request来存状态,以及与其它保存状态方法有什么区别
RequstDispatcher rd=request.get RequstDispatcher(“url”)
Rd.forword(request,response);
Request.setAttribute(“object”,”内容”);
一旦产生响应request的生命周期就结束了
15.    如何在web.xml中配置servlet
定义
<servlet>
        <servlet-name>name</servlet-name>
<servlet-class>package</servlet-class>
</servlet>
映射
<servlet-mapping>
    <servlet-name>name</servlet-name>
    <url-patten>/patten</url-patten>
</servlet-mapping>
16.    获得ServletConfig对象
ServletConfig sc=getServletConfig();
17.    如何获得servletContext对象
servletContext sc=getservletContext();
18.    <html><body>
<a href=”/servlet/HelloServlet”>POST</a>
</body></html>
调用servlet时采用了doPost、doGet、doForm、doHref中的哪个方法
doGet方法
19.    doGet:
PrintWriter out = res.getWriter();
Out.println(“<html><body>Hello</body></html>”);
If(!res.isCommitted()) 判断是否response提交了
If(reg.getParameter(”name”)==null)
{
    res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
20.    说明如下的web的资源应该放在web容器中的什么目录下,静态页面JSP、servlet class、web.xml、Tag libraries、JAR File、java class以及需要保护的资源文件
tomcat容器
web.xml, Tag libraries: \webapps\工程名\WEB-INF
servlet,javaclass: \webapps\工程名\WEB-INF\classes \
jar: \webapps\工程名\WEB-INF\lib\
21.    如何打war包
将web项目压缩成rar文件然后将后缀名改为war。
22.    如何利用ServletContext对象获得初始化参数
servletContext sc=getservletContext();
String s=sc.getInitParameter(key);
23.    如何在配置文件中配置ServletContext初始化参数
<init-param>
    <param-name>name</param-name>
    <param-value>vlaue</param-value>
</init-param>
24.    写代码来将对象放入ServletContext中以及取出对象
servletContext sc=getservletContext();
sc.setAttribute(key,value);
25.    描述request session web application的区别,创建监听器类来监听每个scope的生命周期
生命周期不同request产生响应时生命周期结束,session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束。Webapplication容器重启、手动清除
26.    如何配置listener
27.    如何来写以及配置filter
28.    创建一个request或response对象的包装类
29.    写一段servlet代码,用来将对象存入session以及从session中取出该对象
HttpSession session=request.getSession();
session.setAttribute(key,value);
30.    描述用来访问session对象的API
31.    说明session对象的生命周期
session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束
32.    写一段代码来响应当对象加入session时的事件
33.    描述web容器使用了什么机制来管理session
34.    如何使session失效
session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束
35.    描述将session与客户端Birding的流程及方法
36.    当client不支持cookie时,如何使用session
37.    什么是Authentication(识别(用户)):识别用户 是谁?什么是Authorization(授权)对识别后的用户给予什么样的权限。数据的完整性:提交数据,操作数据,数据库数据。数据的机密性:加密,HTTPS
38.    JSP中指令标签的形式
JSP中声明标签的形式
JSP中代码段标签的形式
JSP中动作标签的形式
JSP中注释标签的形式
JSP中的表达式标签的形式
39.    指令标签有哪些?
40.    action标签有哪些?
41.    page的属性
42.    <%!int i;%>→成员变量
<%int j;%>→局部变量
<%=i++%><%=j++%>
43.    JSP中的内置对象
44.    <%@ include file=” ”%>与<jsp:include page=” ”/>不同
45.    jsp:useBean(id,scope,type,type,class)的使用

JSP三种页面跳转方式的比较

使用JSP大约有下列三种跳转方式:
1. response.sendRedirect();
2. response.setHeader("Location","");
3. <jsp:forward page="" />

经过试验得到下面的一些规则:

一.response.sendRedirect()

此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
...
跳转后浏览器地址栏变化
如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;
如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;
二. response.setHeader("Location","")

此语句前不允许有out.flush(),如果有,页面不会跳转。
跳转后浏览器地址栏变化
此语句后面的语句执行完成后才会跳转
三. <jsp:forward page="" />

此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed.
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836)
...
跳转后浏览器地址栏不变,但是只能跳到当前主机下
此语句后面的语句执行完成后才会跳转