Servlet课上笔记

                          Servlet课上笔记html

    这两天在学习servlet,课上本身动手记了了一些笔记,内容不是很详细,有些地方可能作的不是很明了,毕竟在课堂生仍是以听和练为主,因此你们要是看就对付看吧。java

   Servlet:
  一、什么是Servlet?
      是一个java类,要按照servlet规范来编写,而且要部署在符合servlet规范的容器当中运行。其
      做用是扩展web服务器的功能(生成动态资源,与CGI程序相似)。
                      请求a.html
                ——————————>                |—— 动态————>CGI程序
      browser        返回a.html                apche        
               <——————————非动态————|             
  二、Servlet的优势:
      (1)能够访问数据库
      (2)方便地处理业务逻辑
      (3)一个请求只会启动一个线程(CGI程序是一个请求启动一个进程),消耗的资源相对少
      (4)多个请求能够共享同一个Servlet实例
      (5)servlet能够在任何符合servlet规范的容器(tomcat/was/...)上运行,方便维护。
  三、如何去写一个servlet?
       step1:
          写一个java类实并现Servlet接口或者继承HttpServlet。
       step2:
          编译(依赖servlet-api.jar)
       step3:
          打包
   appName(应用名)
      WEB-INF
          classes(放servlet字节码)
          lib(好比数据库驱动)
          web.xml(部署描述文件:好比配置servlet-url)
       step4:
          部署   将第三步目录结构copy to 服务器特定的目录。
       step5:
          启动服务器
       step6:
          访问
http://ip:port/appName/servlet-urlmysql

  四、安装服务器
      (1)解压tomcat

      (2)配置环境变量
         JAVA_HOME
         CATALINA_HOME:tomcat解压到的目录
         PATH:CATALINA_HOME/bin
      (3)启动tomcat
         cd CATALINA_HOME/bin
         linux:sh startup.sh
         windows:startup.bat
      (4)http://localhost:8080
  五、服务端写servlet不用考虑网络问题
  六、web服务器=servlet容器(符合servlet规范的web服务器)
    
linux

     1)、Servlet的运行的基本过程:

         http协议是应用层协议                               将请求中的数据先解析而后生成对象
          
web

              (1)请求(经过http协议)       servlet        (2)
         
——————————————>             ————————>HttpServletRequest(对象)
  browser                                        引      (3)
                                                    ————————>HttpServletResponse(对象) 
                   (7)响应                                (4)而后
           <——————————————         ————————>  Servlet
                                                                  调用service (5)处理请求
                                                       (6)引擎读取HttpServletResponse  
sql

   第五步时能够从request中获取数据(方便),
   也能够将处理的结果放到response  
              第四步先看要调用的servlet是否有对应
                                                 的实例,若无,则建立实例,如有再也不建立新的实例
        
数据库

  第二步为何引擎要将请求中的数据转化成一个request对象?
  由于servlet再也不须要考虑http协议。
windows

step1 浏览器会将表单中的数据打包(http数据包)
step2 发送
       (地址 http:ip:port/appName/pricing(action的值)
step3 服务器将请求地址去掉应用名以前的内容(包括应用名),保留应用名以后的地址
       再将该地址与web.xml中的url-pattern做比较,找不到的话显示404
step4 找到
step5 若是servlet没有相应的实例则建立实例
step6 调service方法
api

   2)、Http协议浏览器

什么是http协议?
 超文本传输协议,用于制订浏览器与web服务器之间数据交互的方式与数据自己的格式。
 A.数据交互的方式
     浏览器发送链接请求
     服务器接受
     浏览器将数据打包,发送
     服务器处理完毕,数据打包,发送
  , 发送完毕,关闭链接。
 B. 数据包的格式
    请求数据包(请求消息)
       请求行:
           请求方式(get/post)
           要访问的资源路径(若是是get,包含请求数据)
           协议的版本号(1.0,1.1)
       若干消息头(浏览器与服务器之间的一些约定):
           好比在消息头中,能够携带cookie。
           又好比,在消息头中,能够告诉服务器,
           当前浏览器支持的语言。
       实体内容
           若是请求方式是post,则表单中的数据会存放到这儿。
           若是请求方式是get,则数据会放到请求行(资源路径以后)
   响应数据包(响应消息)
       状态行:
           协议的版本号
           状态码 
               404:找不到资源
               500:系统内部错误
               200:正常
           状态码的描述
       若干消息头:
           好比,告诉浏览器,以什么样的编码来显示返回的内容。
       实体内容:
           返回的处理结果。
 
 练习:
   计价
    规则  产品的最终价格 = 原始价格 * (1 + 税率)。
   界面:
    pricing2.html
    表单 
     原始价格 basePrice
     销售城市 city     先依据城市,找到对应的税率(if...else)。
 

  3 )、get/post方式:

   get方式:
       A. 表单默认提交的方式,浏览器地址栏直接输入一个地址,使用连接访问。
       B. 表单中的数据会添加到请求行,放置的数据有限,并且数据会直接在浏览器的地址栏显示,不安全。
       C. get方式,通常不适合用于浏览器向服务器提交数据。适用于请求某个资源。
   post方式:
       A.对表单,设置了method="post"。
       B.表单中的数据会添加到实体内容里,能够存放大量数据。相对于get方式,会安全一些。(无论哪一种方式,都不是绝对安全的,由于浏览器不会对数据进行加密)
       C.通常若是有大量的数据须要提交给服务器。
 
   练习:
      写一个ListEmpServlet,会返回一个
      表格,表格中的内容是:
      id   name salary
      1  zs  2000

   4)、表单的处理


 

 (1)若是得到表单中的数据
  String request.getParameter(paramName);
  //有多个同名的paramName
  //好比 interest=fishing&interest=sleep
  String[] request.getParameterValues(paramName);
 (2)表单中的中文问题
 step1:
   对于html文件,添加<meta http-equiv="content-Type" 
                      content="text/html;charset=utf-8">
   要注意:该文件保存时所使用的编码必定也是utf-8
   做用是:要求浏览器按照指定的编码来显示该文档。
 step2:
   在servlet中,使用request.setCharacterEncoding("utf-8");
   要注意:此处的编码应该与meta中设置的一致
   做用:设置request对象的解码所采用的编码。
   默认状况下,request采用iso-8859-1编码来解码。
   此外,还要使用response.setContentType("text/html;charset=utf-8");
   做用有两个:
       1、response中写入数据时,所使用的编码
       2、生成一个消息头,要求浏览器按指定的编码来显示返回的数据。
  (3) 数据库的中文问题(mysql)
   对于某些版本的mysql jdbc驱动,须要告诉它,
   数据库当前存放数据采用的编码是什么(把URL设置以下)
   String url = "jdbc:mysql://localhost:3306/sd1005db2?" +
    "useUnicode=true&characterEncoding=utf8";

   create database name default character set utf8 指定数据库的编码 统一设定成utf8

    5)、重定向


  服务器向浏览器发送一个状态码302以及一个地址。
  浏览器收到该状态码以后,会当即向这个地址发送请求。
  特色:
   重定向的地址是任意的(既能够是当前服务器上的某个地址,也能够是其它服务器上的某个地址)
   浏览器的地址栏的地址会发生变化。
 

练习   按照servlet02工程的要求实现   学生信息的维护   id name age classname      create table t_student(   id bigint primary key auto_increment   name varchar(50),   age int(3),   classname varchar(50));      注意,中文问题

相关文章
相关标签/搜索