天天看点

第八天:听课笔记

1.Servlet

  GenericServlet

  HttpServlet

init 有参数和无参数的  模板方法设计模式

父类:

abstract GenericServlet{

 init(ServletConfig ){

  init();

 }

 abstract void init(); 

 abstract void service();

}

class MyGenericServlet{

 @Override

 public void init(){}

 @Override

 public void service(){}

}

模板设计模式:

父类中 有明确的方法和不明确的方法

       大的方法调用明确的方法和不明确的方法,并把不明确的方法声明为abstract

子类   实现不明确的方法

       由于初始化是被容器调用的,容器只认有参数的init方法,此时子类中

       没有 有参数的init 方法,所有会找父类 ,找父类的有参数的init方法,

       根据多态,父类中有参数的init方法会调用实际上实现无参数的init方法

2.不要硬编码,用配置文件,让扩展性非常强

3.ServletRequest ServletResponse

容器把它封装成对象 传给你了 service()

4.GenericServlet HttpServlet

req resp 向下转型

getMethod 判断method为什么 doGet doPost

5.每一个form标签中input textarea .... 都要写名字

6.getParameterMap

key:String

value:String[]  一个名字多个值

用集合存储对象:长度可变;取的方式不同,对不同的情况有不同的取方式,效率各不同

数组存在:角标,东西多了以后要地方放

7.HttpServletRequest

getContextPath()

getMethod

8.response:

setContentType 设置消息头

setCharacterEncoding 设置自动编码

request:

setCharacterEncoding 消息体 对post有用 但get是消息头的,对get无用

UTF-8 ISO8859-1

编对了,解错了 还有救:

UTF-8 中 有汉字 编对了

把字符串变成字节数组 把看的懂的变成看不懂的  编码  String.getBytes(XXX)

把字节数组变成字符串 把看不懂的变成看的懂的  解码  new String()

先编码,得到那个字符串所对应的字节数组

byte[] arr name.getBytes("ISO8859-1");

String str = new String(arr, "UTF-8");

后解码,把字节数组变成字符串

这就是底层编码的原理

封装成功能函数

GET POST

GET:地址栏显示,封装到消息头,有数量限制

POST:地址栏不显示,封装到消息体,无数量限制

HTTP 走的ISO8859-1

尽量用Post,Post一个req.setCharacterEncoding 就可以解决

但是Get,如超链接 ; 地址栏中输入  req.setCharacterEncoding

有如下两种方式:

a.编码 解码

b.server.xml中 connector URIEncoding="UTF-8" 这只能用GET,不能用POST

这种不方便 改了配置文件 对所有的 GET 都有效 麻烦 问题出来了不知道哪

9.字符乱码问题:

出现的原因;HTTP协议都是通过ISO8859-1的码表对数据解析,所以对中文会出现乱码

因为该码表中不识别中文

Post提交:

通过设置req.setCharacterEncoding("[GBK|UTF-8]");通常编写html,jsp

页面都会统一编码形式,设置字符集时,使用的都是同一的码表

Get提交方式:

先要对数据进行一次 ISO8859-1的编码,原因是为了获取到原码(变成字节数组)

将原码在使用对应的码表进行解码(变成字符)

在应答是:

通过resp.setContentType("[GBK|UTF-8]");

resp.setCharacterEncoding("GBK|UTF-8");

无论请求和应答:

当使用设置字符集是,要在该对象处理数据之前设置----血的教训

所以建立对于请求的表单提交都用post

对于超链接的提交尽量不要加中文参数,避免找麻烦

10.HttpServletRequest

getContextPath 得到配置.xml虚拟路径名称

getQueryString ?后面的name=XXX&age=YYY

getRequestURI  URI>URL URI几乎代表所有唯一的 URL只是地址

  getContextPath + getServletPath

getServletPath url-pattern

11.userName trim() null equalsIgnore

12.页面跳转

request 和 response

response.sendRedirect(XXX); 拿一个变量接收让后传递过去

request.getRequestDispacher(YYY).forward(request,response);

1.地址栏改变

2.response 两次请求 可以调到google

  request  一次请求 服务器帮你做事情,只能在服务器跳转

           将这次请求延伸到下一个页面,将req 和 resp 对象保存下来

13.text/plain  text/html

    纯文本

14.ServletContext ServletConfig

    对所有的web应用程序  只针对某一个

ServletContext:

setAttribute getAttribute getAttriubteNames   Object

域:

两个Servlet可以通过ServletContext进行信息交换

getServletContextName

getRealPath(path) /根目录 然后往下找

File f = new File(XXX); XXX要是绝对路径

15.线程安全问题:

尽量不要定义成员变量

16.url-pattern

/*   路径映射

*.do 扩展映射 不能加斜线  *.XXX

/*.do 错误

精确匹配原则,谁写的详细谁就行

/*

/*  通常执行最后一个

一个Servlet可以对应多个映射

17.学生管理系统