`

servlet知识点回顾

阅读更多
1.Servlet规范
  1.1 规范了应用服务器  tomcat(Servlet容器,没有ejb容器)    jboss weblogic(有Servlet容器,也有EJB容器)
  1.2 规范了java web项目的一个结构.
  1.3 规范了我们程序员所写的Servlet,    其实就是现实了一个Servlet接口

2.Servlet接口
   init(ServletConfig);
	1. 如果没有配置load-on-startup的时候在第一次访问的时候执行
        2. 如果配置的load-on-startup是在服务器启动的时候执行	   	

   service(ServletRequest,ServletResponse)
	任何一次请求都执行
   destroy();
        服务器正常关闭的时候执行.

3.Servlet的生命周期
  1.在浏览器上面访问. http://www.itcast.cn:8080/bbs/myServlet
  
  2.浏览器会根据www.itcast.cn,先到本机的host文件中找对应的IP地址,没有找到则到DNS服务器上面来解析出IP.

  3.根据解析出来的IP和端口8080连接到服务器

  4.浏览器要向服务器发送一个请求头:
  
      GET /bbs/myServlet  HTTP/1.1
      Host: www.itcast.cn
   
  5. 根据Host找Server.xml中找对应的虚拟主机

  6. 找到虚拟主机后,   根据Context path="/bbs" 去掉path的值得到具体请求的资源 /MyServlet.  

  7. 根据具体请求的资源  /MyServlet到  Context  docBase="" 中具体的资源.
 
  8. 根据资源路径/MyServlet到web.xml匹配 url-pattern.
     8.1 如果没有匹配上资源路径.  返回404,文件找不到..
     8.2 找到了..匹配到url-pattern

  9. 根据url-pattern找到servlet-name.   根据servlet-name的值到Servlet缓存中找Servlet对象
              Servlet缓存:Map<String,Servlet> map = new HashMap<String,Servlet>();
                           servlet-name作为map键
                           Servlet对象作为map值
      9.1  从缓存中找到 ...   直接执行..service....
      9.2  从缓存中没有找到

  10.  如果没有找到servlet对象..  根据servlet-name找Servlet标签从而找到servlet-class
  
  11. 根据servlet-class通过反射创建Servlet对象
              Class  clazz =  Class.forName(servlet-class)
               Servlet  serlvet = (Servlet)clazz.newInstance();  //默认的无参的构造函数
        同时要把该对象存入Servlet缓存中

  12. Servlet容器创建一个ServletConfig对象,传递一个Servlet对象的init方法...
  
  13. Servlet容器创建一个ServletRequest和一个ServletResponse,传递给service方法...


4. Servlet相关的API
  4.1 ServletConfig
	  getInitParameter(String name);
          getInitParameterNames(); 
          getServletCoantext();
	  getServletName(); //web.xml中配置的servlet-name节点的值

  4.2 HttpServletRequest //获取请求客户端的信息
           getCookies(); 
           getParameter(String name); 
 	   getParameterValues(String name);
           getParameterMap(); //得到请求参数名字和值的键值对...   String的键  String[]的值
	   getRequestURI();  得到Host后面的资源路径,但是不带参数
	   getRequestURL(); 得到全路径
           getRemoteAddr(); 得到IP
           getHeader(String name) 得到请求头信息
           getSession() 得到session
           request.setCharacterEncoding("UTF-8")

  4.2 HttpServletResponse  //发送内容给客户端
          setContentType("text/html;charset=utf-8")            
	  setHeader(String name,String value) 设置响应头
          sendRedirect(String location)
          
          getWriter();  
          getOutputStream();  

4. Servlet的继承体系:
       Servlet 接口
   
       GenericServlet实现Servlet接口,并且实现了ServletConfig.
          就是让我们少写了一步获取ServletConfig对象
  
       HttpServlet  extends  GenericServlet{   

        service(ServletRequest   ,ServletResponse){
         转成一个WEB相关的对象
         HttpServletRequest  request
         HttpServletResponse response
 
         String  method = request.getMethod();
         if(method.equ...get..){
	    doGET
           }  

          if(method.equ...post..){
	    doPost
           }           
      

         }
	 doGET{}
       	 doPost{}

        }


5.  处理请求的参数:
           getParameter(String name); 
 	   getParameterValues(String name);
           getParameterMap(); //得到请求参数名字和值的键值对...   String的键  String[]的值


      处理中文乱码的问题
      5.1 GET请求
              new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");
      5.2 POST请求
             request.setCharacterEncoding("UTF-8")

     如果说响应中出现了乱码的话.
              setContentType("text/html;charset=utf-8")

6. Cookie..
   为什么要使用cookie.  因为HTTP协议是一个无状态的...

   其实就是在浏览器上面保留一个【键和值】得文本内容.  如果保留了的话,再后面的请求中,浏览器都会主动的将这个信息发送给服务

器..
  
   6.1 Cookie添加
       Cookie cookie = new Cookie(String name,String value);
	//默认的状态下是一个临时的cookie,该cookie保持中浏览器的内存中.. 如果浏览器关闭的话,cookie就消失 
        
        cookie.setMaxAge(); //秒..    //设置了时间的话就是持久的cookie,保持在硬盘上的..       

        response.addCookie(cookie);    //响应头的set-cookie

   6.2. cookie的查找
         Cookie[] cookies = request.getCookies();
	 if(cookes!=null){
		  for(Cookie cookie: cookies){
 			 if(cookie.getName().equals("指定的名字")){
				cookie.getValue();		
                            break;
			 }
                   }
           }
       
   6.3. 删除指定的一个cookie
	//创建一个名字样的cookie从而覆盖原来的cookie. 并且需要设置改cookie的保留时间为0
		 Cookie cookie = new Cookie(String sameName,null);
                   cookie.setMaxAge(0);
		  response.addCooke(cookie);

   6.4 更新指定的一个cookie
             //创建一个名字样的cookie从而覆盖原来的cookie.
		 Cookie cookie = new Cookie(String sameName,String newValue);
		  response.addCooke(cookie);

   6.5. cookie中文问题
       因为cookie的传递是通过请求头和响应头来传递的.. 而在请求头和响应头中时不能够采用中文的, 所以说存储中文之前将其编码..
	
          //添加之前编码        
          Cookie  cookie = new  Cookie(String name,URLEncoder.encode("中文","UTF-8"))
          response.addCookie(cookie);
 
          //接收到的时候,在对其进行解码 
   	 Cookie[] cookies = request.getCookies();
	  if(cookes!=null){
		  for(Cookie cookie: cookies){
 			 if(cookie.getName().equlas("指定的名字")){
				String value = URLDecoder.decode(cookie.getValue(),"UTF-8");		
                            break;
			 }
                   }
           }

    
7. Session...
    cookie有一定的缺陷... cookie是放在客户浏览器端的,不安全..  并且存储的数量和大小都限制. 所以使用Session

    7.1 Session创建
          //1.  根据请求上面看看有没有指定的jsessionid的cookie,根据jsessionid找对应的session,如果没有找到就会重新创建一个

session,从而将session生成一个编码以临时cookie的方式发送给浏览器....  
              HttpSession session = request.getSession();  Map<String,Object>
              request.getSession(boolean create) ;///create如果为true的话和上面是一样的.. 如果为false的话,根据jsessionid找

不到对应的session,那么也不创建对象.
     
   7.2  向session中设置内容
         session.setAttribute(String name,Object object);
   7.3  获取session中的内容
         session.getAttribute(String name);
         返回名字对应的值,如果没有对应值的话,返回null
   7.4  session的特点
         session的值保持在服务器上的..
         
         如果浏览器不接受cookie的话,   url重写的形式方法请求,然后再请求地址上面加上jsessionid
           
	http://localhost:8080/myservlet;jsessionid=asdfasdflas8d9f7a9sf
	
         response.encodeURL("");
	 response.encodeRedirectURL("");
         这两个方法可以传入的字符串加上jsessionid

   7.5.  session的超期管理
          为什么要使用session的超期管理. 
          因为session在服务器端保持,如果没有再使用的情况下需要释放占用的内存.如果不释放的话将会越来越多. 可能导致服务器内存

溢出..
	
         7.1  session.invalidate();//直接释放掉
         7.2  session.setMaxInactiveInterval(秒) //设置最大的活动时间间隔..
         7.3  在当前项目的web.xml中配置session-config 中的session-timeout   分钟
         7.4  如果当前项目的web.xml中没有配置. 那么默认的使用Tomcat/conf/web.xml中配置的session-config 中的session-timeout  

 分钟

              优先级的顺序为:7.1>7.2>7.3>7.4 


    7.6 session的API  
          getId();
          isNew(); 
          getServletContext();

8. 共享控制
   8.1 forward
         强调的是将请求转发给下一个Servlet或者是资源

      RequestDispacher  rd = request.getRequestDispacher(/当前项目的资源路径)  
       rd.forward(request,response);
	
 	最后的目标资源决定发送给浏览器的内容.

         转向的Servlet和当前Servlet使用的是内容一样的Request..
   

   8.2 url重定向
        浏览器看到响应码是302并且有一个响应头是Location. 那么浏览器就会自己来发送一个到Location

         response.sendRedirect(String location)
   8.3 include
	  强调的是将被包含的资源(Servlet,html) 的输出合并到当前Servlet中.一起输出给客户端..
	  RequestDispacher  rd = request.getRequestDispacher("/当前项目的资源路径")  
          rd.include(requst,response)
	  
	  被包含的资源和当前资源使用的是内容一样的Request和response

    url重定向和forward的区别:
    1>.   浏览器的地址是否发生改变:
          forward不改变.   因为只发送了一次请求. 那么具体的转发是在服务器端进行的.
          url重定向是改变的. 因为发送的下次请求的有浏览器发出的..

    2>. 是否可以发送外部的资源
           forward不可以
           url重定向是可以的

    3>. 是否可以访问WEB-INF下面的资源
           forward是可以的
           url重定向是不可以

    4>. /的区别:
         forward  : 代表当前应用的根目录
         url重定向: 代表当前服务器默认的项目的根路径.

   在上面情况下使用 url重定向 和 forward的呢?
      如果Servlet1 转到 Servlet2.  那么Servlet1 的一个运算结果需要Servlet2来处理. 那么必须使用forward的.
         在Servlet1中将运算结果放在request.setAttribute(String name,Object object),然后在Servlet2里面可以

request.getAttribute(String name);获取到

      其他的两种都可以...

8. 共享信息.
      pageContext: jsp
      Request(一次请求)
      Session(一次会话)
      ServletContext(整个WEB应用).  在线用户.

      ServletContext在服务器启动的时候创建. 服务关闭的时候销毁,在这个web项目中只有一个对象. 存放在该对象中的属性值是被所有

用户和Servlet所共享.
	
    在上面的对象中都相同的方法:
     setAttribute(String name,Object object);
     getAttribute(String name):Object
     getAttributeNames()
     removeAttribute(String name)

     ServletContext中有重要的几个方法:
        getRealPath("/") 得到当前应用的跟目录的绝对路径
        getRealPath("/WEB-INF/web.xml")
        getResourceAsStream("/web项目的相对路径") // 返回一个inputStream    

        getInitParameter(String name)根据名字获取在web.xml中配置的初始化参数
	 <context-param>
	 	<param-name>configPath</param-name>
	 	<param-value>/WEB-INF/db.properties</param-value>
	 </context-param>

        getContextPath() ;//得到当前应用的虚拟路径,在server.xml中配置的Context的path的值..
分享到:
评论

相关推荐

    servlet经典案例回顾增删改查

    以下将详细介绍这个经典案例中的关键知识点。 首先,增删改查是数据库管理中最基本的操作,它们分别代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)。在Servlet中,这些操作通常通过HTTP请求与...

    servlet复习代码

    在这个"Servlet复习代码"压缩包中,可能包含了一些示例代码,用于演示如何实现上述知识点。通过分析和运行这些代码,你可以更深入地理解Servlet的工作原理和使用方式。如果你遇到具体的问题或者想要深入了解某个部分...

    韩顺平Servlet笔记(全)

    ### 韩顺平Servlet笔记知识点总结 #### 第1章 B/S与C/S结构 - **1.1 背景知识介绍** - **J2EE的13种技术**:这部分介绍了J2EE(Java Platform, Enterprise Edition)中的核心技术和组件,包括EJB、JSP、Servlet等...

    java servlet+mysql+jsp开发的幼儿园管理系统(mysql数据库+截图).zip

    本文将详细讲解基于Java Servlet、MySQL和JSP技术开发的幼儿园管理系统的核心知识点,以及系统的主要功能模块。 首先,Java Servlet是Java服务器端编程的核心技术,它允许开发者在服务器上处理HTTP请求并返回响应。...

    第七单元 Servlet.pdf

    ### 第七单元 Servlet.pdf 相关知识点解析 #### 一、Servlet概述 Servlet 是 Java Web 开发中的一个重要组件,主要用于处理客户端发送到服务器端的 HTTP 请求,并生成相应的 HTTP 响应返回给客户端。Servlet 本质上...

    Servlet与JSP核心编程第二版(源码)

    以下是一些关键知识点: 1. **Servlet生命周期**:Servlet的生命周期包括加载、实例化、初始化、服务、销毁五个阶段。开发者可以通过覆盖`init()`、`service()`和`destroy()`方法来实现自定义的行为。 2. **...

    Apache+Servlet+jsp

    Apache、Servlet和JSP是构建Web应用程序的三个关键组件,它们在Java服务器端开发中扮演着重要角色。这篇教程将深入探讨这三个技术及其相互关系。...对于有经验的开发者,这将提供一个回顾和巩固基础知识的机会。

    Servlet与JSP核心编程(第2版).pdf

    ### Servlet与JSP核心编程(第2版).pdf 知识点解析 #### 一、Servlet基础 ##### 1.1 Servlet概述 - **定义**:Servlet是一种Java技术,用于扩展应用程序服务器的功能,可以创建动态Web内容。 - **工作原理**:...

    韩顺平servlet笔记

    ### 韩顺平servlet笔记知识点概览 #### 一、J2EE技术发展脉络及背景知识 - **Java技术的演进路径**:从基础Java到Servlet再到JSP,这一路径体现了Web开发技术从简单到复杂的发展历程。 - **Zip文件处理**:在文档...

    [课堂课件讲解]Java微服务实践-Spring Boot Web篇(下).pptx

    知识点: 1. 什么是 Servlet? Servlet 是一种基于 Java 技术的 Web 组件,用于生成动态内容,由容器管理。类似于其他 Java 技术组件,Servlet 是平台无关的 Java 类组成,并且由 Java Web 服务器加载执行。 2. ...

    韩顺平2011最细servlet笔记1.doc

    根据给定的文件信息,以下是对“韩顺平2011最细servlet笔记1.doc”中的关键知识点的详细解读: ### J2EE技术演进 文档首先介绍了J2EE技术的演变过程,从Java基础发展至Servlet,再至JSP。这反映了企业级Java开发的...

    struts2基本知识点

    在了解Struts2的基本知识点之前,我们先来回顾一下MVC模式的不同架构: 1) Model1架构模式:在这个模式中,JSP页面既是视图又是控制器,导致代码混乱且不易维护。 2) Model2架构模式(即MVC模式):在这种模式下,...

    JAVA笔试面试资料JDBC HTTP、JSP、Servlet、Struts面试题汇总资料.zip

    JAVA面试基础知识点总结.docx Java面试笔记.docx 写出正则表达式,从一个字符串中提取链接地址.docx 出现几率最高和覆盖范围最广的一套经典Java面试题.docx 最新Java编程面试题全集(共50道题+答案).docx 遇到的...

    JavaWeb每日总结思维导图

    本资源免费下载供大家阅读使用,全程知识点,使用思维导图的方式对知识进行梳理,包含各技术名词的概念及代码,内容清晰有序,适合初学者学习使用——每日一个 ,亦可以作为开发老鸟回顾知识的笔记。选择下载该内容...

    JSP Java Beans Servlet系统开放设计.doc

    根据提供的文档信息,本文将对“JSP JavaBeans Servlet系统开放设计”进行深入解析,提炼出其中的关键知识点。 ### 一、系统概述 #### 1.1 前言 本章节简要介绍了项目的背景和发展历程,强调了采用JSP、JavaBeans...

    JSP-Servlet中的汉字编码问题-JSP教程

    本文将围绕“JSP-Servlet中的汉字编码问题”这一主题展开讨论,通过对相关知识点的深入剖析,帮助读者理解JSP/Servlet环境中汉字编码可能出现的问题及解决方案。 #### 二、基础知识回顾 1. **字符编码**:字符编码...

    简单聊天室 J2EE课程实验 用servlet实现简单的聊天室

    【知识点详解】: 1. **J2EE平台**: Java 2 Enterprise Edition (J2EE) 是一个用于开发和部署企业级应用的Java平台。它提供了服务器端的框架和服务,如Servlet、JSP、EJB等,用于构建分布式、多层的应用系统。 2....

    前端实习总结范文.docx

    知识点一:实习项目简介 * 实习项目名称:简易记事本 * 项目目的:实现一个基于 JSP+Servlet+JavaBean 技术框架的应用系统,掌握 JavaWEB 开发技术 知识点二:实训目的和要求 * 实训目的:对前面学过的所有面向...

    java思维导图

    了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板。 思维导图不仅仅只有简单明了这个好处,它还能加深人对主题的印象和理解,能达到快速阅读...

Global site tag (gtag.js) - Google Analytics