Servlet笔记

来源:互联网 发布:网络暑假工招聘 编辑:程序博客网 时间:2024/04/30 20:57

web Application的概念
  1、web Application Name
    1、WEB-INF
      web.xml
        该web app的配置文件
      lib
        该web app用到的库文件
      classes
        存放编译好的servlet
    2、META-INF
      存放该web app的上下文信息,符合J2EE标准
  2、Web Application可以直接放在webapp下面
  3、也可以通过配置文件指定到其他目录 <host>里面
    <Context path=“/虚拟路径名“ docBase=”目录位置" debug="0" reloadable="true"/>

Tomcat的目录结构
  bin/             二进制可执行文件和脚本
  catalina start stop
  catalina debug run exit
  common/    Catalina本身和web应用可加载的类目录
  conf/           配置文件目录
  logs/           日志目录
  server/        服务器所需的类库目录
  shared/  Web App共享的类库
  webapps/    Web应用所存放的目录applications
  work/           Tomcat的工作目录(存放jsp产生的class文件)
  temp/  存放临时产生的文件
  
创建Servlet
  1、XXX extends HttpServlet
  2、Override doGet doPost(重写方法)
  3、copy to WEB-INF/classes
  4、web.xml
    1、<servlet><servlet-name><servlet-class></servlet>
      例子:   
        <servlet>
              <servlet-name>HelloWorldServlet</servlet-name>
              <servlet-class>HelloWorldServlet</servlet-class>
          </servlet>
    2、<servlet-mapping><url-pattern> /
        <servlet-mapping>
              <servlet-name>HelloWorldServlet</servlet-name>
              <url-pattern>/HelloWorldServlet</url-pattern>
          </servlet-mapping>
          注意:web app根路径(url)必须/开头
  5、restart server
  
Servlet的生命周期
  生命全过程:
  加载 ClassLoader
  实例化 new
  初始化 init(ServletConfig)
  处理请求 service doGet doPost
  退出服务 destroy()
  
  只有一个对象
  API中的过程:
  init()//只执行一次, 第一次初始化的时候
  public void init(ServletConfig?config) throws ServletException
  
  service()
  public void service(ServletRequest?req, ServletResponse?res)
  throws ServletException, java.io.IOException
  
  destroy()//webapp 退出的时候
  public void destroy()
  
init
  init(servletconfig config)
   this.config = config
   init();
  重写必须得super.init(config)
   不然不能使用this.getServletConfig
   当然也就不能用getInitParameter();
  我们只需要重写init();
  
Servlet编程接口
  GenericServlet是所有Servlet的鼻祖
  用于HTTP的Servlet编程都通过继承 javax.servlet.http.HttpServlet 实现
  请求处理方法:(分别对应http协议的7种请求)
  1、doGet    响应Get请求,常用
  2、doPost    响应Post请求,常用
  3、doPut    用于http1.1协议
  4、doDelete   用于http1.1协议
  5、doHead       仅响应Get请求的头部。
  6、doOptions 用于http1.1协议
  7、doTrace   用于http1.1协议
  实例的个数:  在非分布的情况下,通常一个Servlet在服务器中有一个实例
  
获取表单信息
  通过HttpServletRequest的getParameter()方法来获得客户端传递过来的数据
  getParameter()方法返回一个字符串类型的值
  getParameterNames()返回Enumeration类型的值,getParameterValues()返回一个字符串数组


Web上保持状态的手段:
  cookie session application persistence
  
处理Cookie
  Http协议的无连接性要求出现一种保存C/S间状态的机制
  Cookie:保存到客户端的一个文本文件,与特定客户相关
  Cookie以“名-值”对的形式保存数据
  创建Cookie:new Cookie(name,value)
  可以使用Cookie 的setXXX方法来设定一些相应的值
   setName(String name)/getName()
   setValue(String value)/getValue()
   setMaxAge(int age)/getMaxAge()
   利用HttpServletResponse的addCookie(Cookie)方法将它设置到客户端
   利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie,返回一个Cookie数组
  设置Cookie
   SetCookies.java
  读取Cookie
   ShowCookies.java
   
  1:服务器可以向客户端写内容
  2:只能是文本内容
  3:客户端可以阻止服务器写入
  4:只能拿自己webapp写入的东西
  5:Cookie分为两种
  属于窗口/子窗口(放在内存中的)
  属于文本(有生命周期的)
  6:一个servlet/jsp设置的cookies能够被 同一个路径下面或者子路径下面的 servlet/jsp读到
  (路径 = URL) (路径 != 真实文件路径)
  
会话跟踪(session)
  Session
   在某段时间一连串客户端与服务器端的“交易”
   在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个URL末尾,
   服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234
   可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。
   通过HttpSession来读写Session
  规则
   如果浏览器支持Cookie, 创建Session的时候会把SessionID保存在Cookie里
   如果不支持Cookie, 必须自己编程使用URL重写的方式实现Session
   response.encodeURL()
   转码
   URL后面加入SessionId
   Session不象Cookie拥有路径访问的问题
   同一个application下的servlet/jsp可以共享同一个session, 前提示同一个客户端窗口.
   
HttpServletRequest中的Session管理方法
  getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。
  getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession
  isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true
  isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true
  isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false
  HttpSession的常用方法
  getAttributeNames()/getAttribute()
  getCreateTime()
  getId()
  getMaxInactiveInterval()
  invalidate()
  isNew()
  setAttribute()
  setMaxInactivateInterval()
  
Session总结
  1、服务器的一块内存(存key-value)
  2、和客户端窗口对应(子窗口)(独一无二)
  3、客户端和服务器有对应的SessionID
  4、客户端向服务器端发送SessionID的时候两种方式:
  5、cookie(内存cookie)
  6、rewriten URL
  7、浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
  8、如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie
  
Application
  用于保存整个WebApplication的生命周期内都可以访问的数据
  在API中表现为ServletContext
  通过HttpServlet的getServletContext方法可以拿到
  通过ServletContext的 get / setAttribute方法取得/设置相关属性
  TestServletContext.java
  
servlet中的请求转发
  RequestDispatcher接口对象允许将请求转发到其他服务器资源
  通过RequestDispatcher的forward(HttpServletRequest,HttpServletResponse)方法可以将请求转发
  通过ServletContext的getRequestDispatcher(String url)方法来获得RequestDispatcher对象,并且指定转发的目标url资源
  可以通过HttpServletRequest的setAttribute(String name,String value)来设置需要传递的参数,然后在代理servlet中就可以
  使用HttpServerRequest的getAttribute(String name)来获得对应的值
  
数据库处理以及在Servlet中使用Bean 
 广义javabean = 普通java类
 狭义javabean = 符合Sun JavaBean标准的类
 在Servlet中使用Bean和在通常程序中使用Bean类似
 属性名称第一个字母必须小写,一般private, 比如:private productId
 一般具有getters and setters
 要具有一个参数为空的构造方法
 但Bean不应具有GUI表现
 一般是用来实现某一业务逻辑或取得特定结果  

原创粉丝点击