servlet 笔记

来源:互联网 发布:数据集成工具 编辑:程序博客网 时间:2024/05/17 22:43
1. 本地 context映射
<context path="" docBase="" reloadable="true/false"/>
2.tomcat容器管理servlet的生命周期 并调用其生命周期的方法. 
3.servlet 映射的通配符只有两种方式*.扩展名和/*;
4.servletContext.getRealPath在服务器的绝对路径;
5.servletcontext.getContextPath 工程名称
6.get方法 小数据(1024字符) 公开 缓存,不安全. post方法 大数据(64k),隐秘安全.但是 请求的参数格式都是一样的,只是一个在url上面,一个在请求体
7.servlet 被实现-generalservlet被继承httpservlet被继承HttpJspBase
8.九大隐含对象:不用声明及可以使用 是代表当前jsp的
request 可以获取请求信息 response  响应的信息 是httpservletrequest 和response的对象
pagecontext获取当前页面的额所有信息; application是代表当前应用的信息 servletcontext
config 需要映射 out 向浏览器输出信息 exception是错误信息要通知指令设置iserrorPage才能使用
9.模板元素是html的骨架
10.mvc本质请求转发与重定向

{
求转发 发一次请求 对象是同一个 中途转执行完在回来?代码放哪里那里转
页面不跳转地址加/与不加都一样,不可访问外部资源
重定向是发两次 不是同一个;执行完第一 在执行第二个?不管代码在哪里?
页面跳转地址加/与不加不一样 ,可以访问外部资源,经过客户端,还有防止重载.
}
11.作用域 pageContext(当前页面) request(请转发)session(回话)application
12.include是静态加载 把所有内容加入使用标签的页面; 一个servlet文件
13.jsp:include 动态加载 在使用标签的地方实现转发,,,,,两个servlet;
14.jsp:forward 在使用标签的地方实现转发
中文乱码
1.jsp页面和请求页面(character 与pageEncoding一致)request设置编码 在获取数据之前在得到...out对象之前要 设置setcharacterEncoding(不然没用);
2.浏览器和请求页面 (自动识别)
3.post方式传递参数 request.set.....character
get方式 setservice.xml useBodyEncodingForURI="TRUE"在tomcat下改也要在项目service文件夹修改
状态码
302.短暂重定向错误(短暂的时间内访问同一个服务器却使用不同的域名例如:localhost....和127.0.0.1)
200.成功
401.
400 无法正确解析请求体
404没有找到请求的资源
405 没有service方法
500 内部错误 代码....;
15.<a>超链接前面有/是相对于站根的(localhost:8080),没有是相对于上次请求页面的

16.servlet的生命周期 客户端请求或者服务器启动创建servlet实例 然后立即调用init()初始servlet参数和应用参数 服务器进入就绪状态 接收到请求时会调用 service方法并把请求对象 和响应对象 传给service方法 ,然后判断调用doget或者dopost方法,处理的结果传递给容器 容器给客户端;
17.线程问题:容器只为每一个servlet创建一个对象 ,每一个请求时一条线程,线程安全
18.cookies 支持中文需要  urlencoder.encode 和urldecoder.decode 信息量少 只能是字符窜 保存在客户端安全性 差 通常需要加密 一般用于用户的登录信息;
19.session 默认只要在页面没有禁用自动的创建 是cookies方式发送给客户端.并 保存在服务端 信息量多 种类多,缺点 服务器内存资源浪费
http 使无状态协议 ,是指服务器无法识别同一个浏览器.

20.验证码 1.创建图片对象 2.使用图片对象创建笔画对象 3.使用笔画对象设置颜色和背景大小 和生成随机字符窜 保存字符窜到session4.画干扰线 5.禁用缓存 6.设置响应类型 7 创建响应流 使用imageio输出图片;


21.自定义 标签 1.编写一个继承simpleTag的类 2.编写 tld文件 tlib short-name uri tag name tclass content必须   3.导入使用    由于每次都要重写一些不必要的方法所以 有一个 simpleTagSupport类 继承重写自己需要的方法
标签体<标签>标签体</标签>
当有标签体是会自动的体用setJspContext 配置必须为 body-context scriptless 或者tagdependent
子标签 存在于父标签体中  如果想子标签运行 必须getJspBody.invoke();
el自定义函数 定义一个公共类 2定义一个公共静态方法 3配置function tld
el有两种存取 方法 .和[] 第二种可以使用在数组 和包含特殊字符的属性

<choose>不能单独使用 必须作为when 和 other的父标签 不能为空 至少有一个when
foreach  当没有时items是 var 变量存储的是 begin 的值  有时存在的是迭代的对象或者是数组的值
相当于 for(类型 变量名:遍历的对象) 而foreach不需要指定 类型 var="变量名" 应该是底层实现的 根据ietms
23.filter 过滤器 是一个javaweb的组件 功能是对匹配映射的资源进行请求和响应拦截 生命周期于sevlet类似  但是只有一个接口;
24.listener 监听器 监听其他对象身上发生的事或者状态并进行响应处理;servletcontext 和servletrequest httpsession 深入了解其对象的生命周期;binglistenner和actionlistenner 实现的类 当对象保存xxxx是会执行;
25.fileupfile 1,文件不能用get方法 2,不能用getparamter3 用enctype="multipart/form-data"
26.reqeust.getParameter()是从封装的一个map取值
27.在做cookies 共享时 127.0.0.1 取不到localhost域里面的cookies
28.request.setCharacterEncoding("字符集名") 对get的请求是无效的 因为
 public void handleQueryParameters() {
        if( didQueryParameters ) {
            return;
        }

        didQueryParameters=true;

        if( queryMB==null || queryMB.isNull() ) {
            return;
        }

        if(log.isDebugEnabled()) {
            log.debug("Decoding query " + decodedQuery + " " +
                    queryStringEncoding);
        }

        try {
            decodedQuery.duplicate( queryMB );
        } catch (IOException e) {
            // Can't happen, as decodedQuery can't overflow
            e.printStackTrace();
        }
        processParameters( decodedQuery, queryStringEncoding );
    }
queryMB不为空而执行 processParameters( decodedQuery, queryStringEncoding );而 queryStringEncoding 为空使用默认iso-8859-1编码, queryMB存放着请求参数
29.tomcat 默认的是iso-8859-1编码
30.get 方法得到的数据会缓存

31.request payload 需要通过流去读取,但是数据是杂乱的,特别是文件图片根本不能或者很有难度分别读出去

32.请一个servlet请求,都会创建一个新的线程执行service()方法.这也是产生线程安全问题所在.

ps:待续

原创粉丝点击