六、Java web基础知识
1.会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
1).隐藏表单域:<input type="hidden">,非常适合不需要大量数据存储的会话应用。
2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
在客户端计算机重启后它仍可以保留其值
4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
2. 页面请求的工作流程
(1)用户输入网址
(2)把用户请求发送给服务器
(3)服务器查询所请求的页面
(4)找到用户请求的页面
(5)服务器发送相应消息
(6)浏览器返回显示的结果
3. filter(过滤器)作用
filetr 使得用户可以更改一个request或者更改一个response。 filter不是一个Servlet,不能产生response。但是他能在request到达Servlet之前预处理request,也可以在response离开Servlet时处理response。 filter其实是一个 Servlet Chaining(Servlet链)。
在 web开发中可以放置多个过滤器,对request处理是按先后顺序进行,对response的处理则是相反顺序。
Filter是一个接口,类似于Servlet接口。声明了3个基本方法(init、doFilter、destroy)。开发者定义一个filter对象时,需要实现此接口。
FilterChain接口,由容器进行实现。用于将上一个过滤器处理的请求或者响应传递给下一个过滤器对象。
FilterConfig接口,由容器实现。用于获取过滤器出啊实话器件的参数信息。
创建一个过滤器后,需要进行配置才能使用。在web.xml中
(1).声明过滤器对象
<filter>
<filter-name> </filter-name>
<filter-class> </filter-class>
</filter>
(2).映射过滤器
<filter-mapping>
<filter-name> </filter-name> (一定要与(1)中的那么相同)
<url-pattern> </url-pattern>
</filter-mapping>
4.JSP内置对象
request、response、session、application、out、page、pageContext、exception、config
5.cookie和session有什么区别
(1)cookie(文件)存在客户端,session(存储结构)存在服务器
(2)cookie由于存在客户端其他人能够方便得到,安全性不如session
(3)使用cookie,服务器性能高,session会根据访问量增加,进而降低服务器性能。
(4)cookie容量小,一般不超过4kb
6.XML(可扩展标记语言)
优点:实用性强、访问速度快、可扩展性好、跨平台性号
XML解析方式:(1)DOM(2)SAX(Simple API for XML)
DOM会根据XML在内存创建一个树形结构,占用内存较大。适合对XML内容随机访问与频繁修改 的情况。
SAX是时间驱动型XML解析方式,不会在内存中存储XML文件,把每次对数据的请求当做一个事件,通过遍历获得用户所需数据。适合对XML顺序访问、XML文件庞大的情况。
7.pageEncoding是jsp文件本身的编码;contentType的charset是指服务器发送给客户端时的内容编码。例如:pageEncoding="GBK"。这句话的意思是,告诉JVM 这个jsp本身采用的"GBK"编码,在JSP编译成Servlet传给JVM的时候,就用“GBK”的编码方式将Jsp网页源文件翻译成统一的UTF-8形式的Java字节码。如果不加设定,则JVM默认的用ISO-8859-1这种编码方式。contentType里的charset=gbk,指的是此网页文件输出到浏览器的输出方式为gbk。在这个过程中,一个JSP的源文件需要经过三个阶段,两次编码,才能完成一次完整的输出。
第一阶段:将jsp编译成Servlet(.java)文件。用到的指令是pageEncoding,根据pageEncoding=“XXX”的指示,找到编码的规则为“XXX”,服务器在将JSP文件编译成.java文件时会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8编码的JAVA源码(即.java)。
第二阶段:从Servlet文件(.java)到Java字节码文件(.class),从UTF-8到UTF-8。在这一阶段中,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。JAVAC用UTF-8的encoding读取java源码,编译成UTF-8编码的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。这一过程是由JVM的内在规范决定的,不受外界控制。
第三阶段:从服务器到浏览器,这在一过程中用到的指令是contentType。服务器载入和执行由第二阶段生成出来JAVA二进制码,输出的结果,也就是在客户端可见到的结果,在这次输出过程中,由contentType属性中的charset来指定,将UTF8形式的二进制码以charset的编码形式来输出。如果没有人为设定,则默认的是ISO-8859-1的形式。
8. include指令标签 :可以在JSP页面转换成Servlet之前,将JSP代码插入其中。用法<%@ include file="Relative Url"%>
jsp:include动作标签 所包含的是次级页面的输出,而非次级页面的实际代码。 用法 <jsp:include page="URL" >9. jsp页面中 嵌入代码片段,要用<% %>
声明 <%! %>
JSP表达式 <%= %>
10. pageContext对象, 可以取得任何范围的参数,如 out、request、response、session、application、page等等对象。pageContext对象的创建和初始化都由容器来完成。在JSP对象中可以直接使用该对象
11. Servlet 容器即是指 Web容器,比如tomcat
Web容器如何知道哪一个请求调用哪一个Servlet对象来处理?
配置web.xml,对servlet起到一个注册作用。
(1).声明Servlet对象
<servet>
<servlet-name> </servlet-name>
<servlet-class> </servlet-class>
</servlet>
(2).映射Servlet
<servet-mapping>
<servlet-name> </servlet-name> (一定要与(1)中的那么相同)
<url-pattern> </url-pattern>
</servlet-mapping>
Servlet的四个阶段(Servlet的生命周期)
(1)web容器或客户端第一次请求服务,容器将加载servlet类并将其放入servlet实例池;
(2)实例化后,容器调用servlet对象的init()方法完成初始化servlet,
(3)容器通过servlet的service方法处理客户端请求
(4)web容器关闭,容器调用servelt的destroy方法对资源进行释放。。调用完毕后,servlet将被垃圾回收器回收
12. Servlet中需要调用servlet API 接口处理HTTP请求,JSP页面,直接使用内置对象处理。