jsp/servlet学习笔记(核心编程)servlet部分

功用:
1.读取客户端显示数据
2.赌气浏览器隐式请求数据
3.生成结果
4.向客户发送显示数据(文档)
5.发送隐式HTTP相应数据

1.效率:传统CGI对每一个请求都会启动一个进程
servlet使用轻量级的java线程处理
2.便利 3.强大 4.廉价 5.可移植 6.安全

jsp作用
某种程度上,servlet看作是含有html的java程序
将jsp看作是含有java代码的html页面
jsp会翻译成servlet,servlet会被编译,在请求期间运行的就是servlet

Web目录
html以及jsp文档放在顶级目录中
web.xml文件放在WEB-INF子目录中
servlet和其他类要么放在WEB-INF/Classes中,要么放在WEB-INF/Classes对应的包里面
CLASSPATH需要包含.class文件顶级目录,需要把webAppDir/WEB-INF/Classes加入到CLASSPATH中去

为每个servlet指定一个地址,web.xml
<web-app>

</web-app>
必须要将所有servlet元素放在servlet-mapping之前,不能相互混合

第三章servlet基础
METHOD:Get、Post请求
servlet一般拓展为HttpServlet,并根据数据发送方式覆盖不同的方法doGet或doPost方法
HttpServletRequest所有的请求信息
HttpServletRequest指定输出信息,可以获得printWrite,用它可以将文档内容发送到客户。对于简单的servlet,大部分工作花在了println生成上
两种一场ServletException和IOException

输出html,(response方法)设置相应报头 setHead()也可以
常用setContentType设置输出文档类型为text/html,会缓冲报头数据,缓冲区大小 set/getBufferSize

类文件虽好放在包中

1.servlet生命周期
构造器 init 调用servive方法。servlet规定任何时间只允许单个线程运行。多个并发请求一般会导致多个线程同时调用service方法

get正常的url请求,post需要特殊列为method的html表单中

直接覆盖service不是个好思想。doPost和doGet相互调用

doXxx是service的主体

2.init
初始化参数非常依赖于web.xml,调用getServletConfig,获取ServletConfig对象的引用

3.destroy方法
服务器移除该servlet时调用该方法,应当主动将某些操作数据保存起来,防止意外(断电等)发生

servlet实现了SingleThreadModel接口,防止多线程访问,但并不是好的选择。最好多线程不要同时对servlet访问。这里涉及到多线程编程。

调试:
打印输出
IDE自带调试
日志跟踪
Apache Log4J
重启服务器等

第四章 处理表单数据
使用action属性指定处理数据的jsp或servlet地址
<form action="url"> 省略action将提交到自身页面
submit按钮

读取 reques,大小写敏感
读取单个值;getParameter(),返回string
读取多个值 getPatameterValues() 返回数组
参数名查找 ①getPatameterNames()返回一个Enumeration hasMoreElement和nextElement迭代读取在读取时可以调用getParameter()、getPatameterValues()方法

②getPatameterMap()

读取原始数据 getReader和getInputStream
多字符集数据读取
1.单个参数转码
String first = request.getParamter("first");
String first = new String(first.getBytes(),"GBK");
2.setCharaterEncoding()

//多次拼接字符串,需要使用StringBuffer提高效率

javaBean自动填充表单java对象,自动转换数据类型
bean:普通类,拥有私有字段,并拥有get/set方法
(jsp:setProperty)以后讲

第五章:处理Http请求报头(reqert)
首先判断是否为空
报头:
GET/servlet/Search?keyword=servlets+jsp HTTP/1.1

Accept:image/gif,image/jpq,*/* 指定处理的类型

Accept-Encoding:gzip 浏览器可用的字符集

Accept-Language 列出客户的首选语言(中文)

Connection:Keep-Alive 能否处理可储蓄链接http请求

Content-Length 适用于post数据大小

Authorization 访问密码保护的页面需要表示身份(第二卷)

Cookie:userID=id4545(第八章)

Host:www.books.com
Refere:http://www.books.com/findbooks.html

User-Agent:Mozilla/4.0 浏览器信息或其他客户程序

读取报头 getHeader(connection); 大小写不敏感
getCookie(第八章)
getAuthType和getRemoteUser拆分Authorization读取
getContentLenget
getContentType
getDateHeader和getIntHeader读取指定报头并转换为Date或Int类型
getHeaderNames 返回一个Enumeration

getMethod
getRequestURL
getQueryString
getProTocol 返回前三部分一般为 HTTP/1.1

压缩页面信息
定制浏览器
根据客户的到达方式定制页面
Refere指出,用户通过链接到达指定页面才会发送Refere,如果直接输入网址则不会发送Refere

第六章 :服务器相应的生成 respond
setStatus(int) 状态代码 302 404
sendRedirct(String url)
sendError(int code, String message)

html状态代码
100 继续 200 OK,一切正常 202已接受 204没有文档
205重置内容 301永久移动 302找到 303 检查其他文档

304 未发生更改 307临时重定向 400错误请求 401未授权 403资源不可用 404未找到 405方法不允许
415 不支持的媒体类型 417 期望不能满足 500服务器内部错误 503 服务器不可用 505不支持的http版本

第七章 服务器相应生成 http相应报头
重点:输出图像,表格

第八章 cookie管理
用处:标识用户 记住密码 定制站定 定制广告

使用Cookie构造函数cookie,用指定名称和值创立cookie
cookiesetCookie设置属性 cookie.getCookie读取
使用response.addCookie将cookie插入到HTTP相应报头中

读取采用 request.getCookie() 返回数组 大多数需要遍历调用每个cookie中getName方法取出对象,用getValue取出对应的值

Cookie c = new Cookie("UserID","a123");

设置最大时效 c.setMaxAge();

插入到相应报头 response.addCookie(c);

使用cookie属性。
属性时服务器发送客户端报头的一部分。不属于浏览器返回给服务端的报头。每次都要在请求流中获取。
set/getComment() 注释
set/getDomain() cookie使用的域(域名)
set/getMaxAge(int) 毫秒
set/getPath() 获取适用的路径 如果没有指定,只发送或返回cookie页面所在目录极其子目录下的(servlet)url ("/")适用于所有网站
set/getSecure()能否加密链接
set/getValue
set/getName
set/getVersion

区分会话cookie与持续性cookie
设置时效的,在超过时效后过期
没有设置时效的,只在当前窗体和子窗体中有效

静态类CookieUtilities类方法单纯的提取某个值
getCookieValue(request,"Name","Parame")

第九章 会话跟踪
因为http时无状态的不会维护上下文的信息
典型的解决方法:cookie url重写(url加请求字符串)以及隐藏表单域

适用HttpSession Api
1.访问与当前请求相关联的绘画对象
requset.getSession获取httpSession对象,这是一个简单的散列表 HttpSession session = requset.getSession
2.查找与会话相关联的信息
HttpSession.getAttribute()
3.存储信息 setAttribute()
4.废弃会话数据 removeAttribute() 废弃指定会话
invalidate() 废弃整个会话
logout退出服务器销毁该用户相关联的所有会话

5.getAttributeNames() 返回所有属性的名称,返回值是Enumeration

6.boolean isNew() 是否新会话
7.long getCreateionTime()
8.long getLastAccessedTime()最后被客户访问的时间
9.set/getMaxIncativeInterval() 自动废弃时间
存在服务器端
setAttribute会替换掉任何值

默认会话跟踪session是基于浏览器内存中的cookie

时间: 2024-10-22 09:59:19

jsp/servlet学习笔记(核心编程)servlet部分的相关文章

jsp/servlet学习笔记(核心编程)jsp部分

jspjsp最终需要转换成servelt,并进行编译,在请求期间实际上是编译的servlet jsp擅长生成大量组织有序的结构化HTML或其他字符数据组成的页面.servlet擅长生成为进制数据,构建数据多样的页面,以及执行输出很少或者没有输出的任务(重定向) 1.jsp仅在修改后第一次访问时才会转换成servlet并进行编译:2.载入到内存中初始化和执行遵循servlet的一般规则 基本语法:第十一章<%...%> jsp调用动态代码策略1.直接调用(使用及少量代码)2.简介调用java代码

jsp/servlet学习笔记(核心编程)mysql部分

第十七章 访问JDBC(1)载入JDBC驱动程序需要在Class.forName方法中指定数据库驱动程序的类型try{ Class.forName("connect.jdbc.driver.OracleDriver");}catch(ClassNotFountException){ System.err.println("");} (2)定义链接URL(指定协议,主机名.端口和数据库名)String host="dbhost.yourcompany.com

Hibernate学习笔记--核心编程

参考资料:Java Web核心框架 http://blog.csdn.net/lsh6688/article/details/7611950 Part 1.hibernate核心接口层次架构关系 图:hibernate核心接口层次架构关系 上图中,Hibernate的接口大致可以分为以下几种类型: 1. 基本操作类:一些被用户的应用程序调用的,用来完成基本的创建.读取.更新.删除操作以及查询操作的接口.这些接口是Hibernate实现用户程序的商业逻辑的主要接口,它们包括Session.Tran

SERVLET 学习笔记

SERVLET 学习笔记 一.Servlet基本定义 Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类.通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容. 二.Tomcat容器等级 Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器.其中,CONTEXT容器,一个CONTEX

JavaWeb 后端 &lt;二&gt; 之 Servlet 学习笔记

JavaWeb 后端 <二> 之 Servlet 学习笔记 一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException ServletRequest req:代表着请

Servlet学习笔记(七)—— JSP概述

1.Servlet两个缺陷: ①所有HTML标签必须包在Java字符串中,使得发送HTTP响应十分繁琐: ②所有文本和HTML标签都必须进行硬编码,即使对表示层做极其微小的修改,也需要重新编译. 2.注释: (1)JSP备注:<% %>,不会发送到浏览器,不能嵌套 (2)HTML备注:<!-- -->,不被容器处理,直接发送到浏览器,用途之一是标识JSP页面.在处理带有许多JSP片段的应用程序时,开发者通过查看HTML源代码,可以轻松查出某个HTML代码部分生成了那个JSP页面.

Servlet学习笔记(八)—— 自定义过滤器的编写改进:自定义实现FilterChain

笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,但是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤,最后response过滤,并且中间几项过滤的顺序不能动态改变.所以这里做个改进,实现一个过滤顺序的FilterChain. 多个Filter的执行顺序在这篇博文中得到很仔细的讲解,总结一点,多个过滤器的执行顺序是根据web.xml中不同<filter-mapping>的顺序来先后执行的,比如: <?xml version="1.0"

Servlet学习(三)Servlet编程实例-网站登录(修改版-增加数据库-附源码)

我们为刚才的那个示例Servlet学习(二)Servlet编程实例-网站登录添加上数据库,组成一个较为完整的登录功能. 在开始之前我们得首先了解下一些常用的java术语: PO(persistant object) 持久对象 在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了. 通常对应数据模型(数据库),本身还有部分业务逻辑的处理. 可以看成是与数据库中的表相映射的java对象. 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合. PO中应该不包含

测试servlet学习笔记

操作方法: 1.新建工程: File-->new-->Java Project-->TestServlet(工程名称)-->Finish. 2.加载servlet-api.jar类包: TestServlet(右键)-->Build Path-->Configure Build Path-->Library -->Add External JAR Selection-->(浏览在tomcat的lib目录下找到servlet-api.jar选中后点击打开