javaweb基础知识整理(3)

2019-08-31 23:10

器。例如,http://www.it315.org/dealregister.html?name=中国&password=123

如果URL串中的特殊字符可能会产生岐义或冲突,则必须对这些特殊字符进行URL编码。例如,服务器会将不编码的“中+国”当作“中国”处理。还例如,当name参数值为“中&国”时,如果不对其中的“&”编码,URL字符串将有如下形式:http://www.it315.org/dealregister.html?name=中&国&password=123,应编码为:http://www.it315.org/dealregister.html?name=中&国&password=123

http://www.it315.org/example/index.html#section2可改写成http://www.it315.org/example/index.html#section2 在java中进行URL编码和解码 URLencoder.encode(\URLDecoder.decode(str,\

六、Cookie&Session

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

1.Cookie

1.1cookie api

javax.servlet.http.Cookie可以直接利用此类的构造方法创建一个Cookie,创建出来的Cookie需要设置一个名称和值。 response身上具有addCookie的方法,可以将创建出来的组织成响应消息中的set-cookie头,通知浏览器保存该cookie。

request身上具有getCookies方法,可以获取浏览器带过来的所有Cookie。

Cookie方法:注意,浏览器是根据cookie的名称加上cookie的path来区分是否是同一个cookie的,如果需要覆盖之前的cookie,除了保证名称相同外还要保证path也相同。

1.2cookie细节

public Cookie(String name,String value):利用构造方法创建一个Cookie对象,在创建的时候就要指定该Cookie的名和值。

setValue与getValue方法:设置或者获取Cookie的值。

setMaxAge与getMaxAge方法:如果不设置cookie的MaxAge(或将其值设置为负值),则默认情况下浏览器会将cookie保存在浏览器的内存中,会随着浏览器关闭而消失。如果设置为一个正值,则代表该Cookie要保存的以秒为单位的时间值,如此,该cookie将会被浏览器保存到硬盘中去。如果将MaxAge设置为0,则是通知浏览器去删除该Cookie。

setPath与getPath方法:用来指定访问哪个ULR及其子URL时带上此cookie,如果不设置此值,则浏览器默认会将发送该cookie的servlet所在的路径作为path使用。例如:setPath(\则/Day06/.../...的路径都会带上该Cookie。如果发送该Cookie的Servlet是 /Day06/servlet/Demo1Servlet,并且未设置setPat,则浏览器在访问/Day06/servlet/..时会带上该cookie。 setDomain与getDomain方法:设置cookie对应的域名,此方法一旦调用,则浏览器会认为该cookie是一个第三方cookie而拒收。 getName方法:获取该cookie的名字,注意没有setName方法,一个Cookie一旦创建出来就不能修改名字了。

setDomain与getDomain方法:用来通知浏览器在访问哪个域名的时候带着当前的cookie信息.但是要注意,现代的浏览器一旦发现cookie设置过domain信息则会拒绝接受这个Cookie.我们平常不要设置这个方法 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

2.Session

HttpSession在服务器中,为浏览器创建独一无二的内存空间,在其中保存会话相关的信息。session作为域使用:他是j2ee中四大域对象之一,作用范围为整个会话。

2.1session的生命周期

在第一次调用reqeust.getSession()方法的时候,服务器会检查是已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用,一般为30分钟(此值可以在web.xml中配置来配置,也可以使用TomcatManager进行配置),则服务器会销毁该session。当服务器强行关闭时,没有到期的session也会跟

着销毁。如果调用session提供的invalidate(),可以立即销毁session。

2.2session的原理

在服务器第一次调用request.getSession()方法的时候,会在内存中创建一个session对象,此对象具有一个独一无二的id值,此id值将会以cookie(JSESSIONID)的形式发送给浏览器,浏览器以后每次访问都会带着此cookie,服务器就利用此cookie区分浏览器找到对应的session空间。

2.3同一电脑内的不同浏览器使用同一session

在简单购物案例中,由于一个浏览器对应一个Session,所以当我们重新开一个浏览器时,是无法找到在上一个浏览器中购买的商品的,这在电子商务中是无法接受的,其实我们可以利用session的原理巧妙的使同一台机器内的多个浏览器共用一个session。

由于服务器识别浏览器是通过Jsessionid这个特殊的cookie进行的,我们可以手动设置该cookie的setMaxAge,使这个cookie被保存在硬盘中被多个浏览器公用,从而使同一台机器上的多个浏览器公用一个session。(注意设置cookie值时path也要相同)。

2.4IE禁用Cookie后的session处理

由于session是基于cookie运行的,如果禁用了cookie则会导致session不可用,我们可以将提供给这种浏览器的所有的URL进行重写,在所有的URL后跟上JSEESIONID,从而保证即使禁用了Cookie也能以URL的形式带回JSESSIONID,从而可以使用session。要重写所有的URL是一项成本很高的工作,一般我们不会这么做。

response. encodeRedirectURL(java.lang.String?url)如果此url是作为重定向操作的地址时使用此方法 response. encodeURL(java.lang.String?url)如果此url是普通连接则使用此方法

2.5防止表单重复提交

表单页面由servlet程序生成,servlet为每次产生的表单页面分配一个唯一的随机标识号,并在FORM表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号。

当用户提交FORM表单时,负责处理表单提交的serlvet得到表单提交的标识号,并与session中存储的标识号比较,如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。

2.6其他

request.getSession()和request.getSession(false)的不同之处:前面的方法一调用,就会去检查是否有对应的session,没有就创建,有就取回。后面的方法只会去检查,如果有就取回,如果没有也不创建。

2.7ServeltContext 、reqeust、session域的比较

servletContext 的作用域是整个web应用,随着服务器启动而创建,如果应用被移除出主机或服务器关闭则销毁。 request 的作用域是整个请求链,每一次请求都会创建一个request,当请求结束时request销毁。

session 的作用于是整个会话,第一次调用reqeust.getSession时创建,当一段时间没有使用或服务器关闭或调用session.invalidate方法时销毁。

如果一个数据只是用来显示的话就用request域。

如果一个数据除了用来显示以外我一会还要用,这时候用session。

如果一个数据除了用来显示以外还要给别人用,这时候用ServletContext域。

七、jsp基础

1.JSP概念

Servlet是j2ee提供的动态资源开发技术,是以java的程序的形式进行开发,在java中书写HTML标签是一件十分头疼的事情,所以人们开发出了JSP,看起来像是HTML一样,但是通过服务器的编译最终可以生成Servlet。

jsp页面在第一次被访问到时会被jsp翻译引擎翻译成一个Servlet,从此对这个jsp页面的访问都是由这个Servlet执行后进行输出。

2.JSP的组成部分

2.1模版元素

直接书写在JSP中的HTML内容,看起来就像写HTML一样的方便,但是最终会在被翻译成Servlet的过程中 out.write()直接输出。

2.2脚本表达式

<%= 表达式%> 接受的是一段java表达式,在JSP翻译到Servlet的过程中,将会计算表达式的值,利用out.print ()输出出去。

2.3脚本片段

<% %>直接可以在脚本片段中书写java源代码,其中的源代码将会直接拷贝到翻译过来的servlet中的响应位置上。

2.4JSP声明

<%! %>在其中可以写java代码,其中的源代码会被拷贝到servlet中的service方法之外,可以利用它来为servlet增加成员方法、成员变量、静态代码块。

2.5JSP注释

<%-- --%>被jsp注释包围起来的内容将不会被服务器翻译到servlet之中,要注意区分html注释和java注释的区别。 jsp注释不会被翻译到servlet中,会在翻译时遗弃。 java注释不会被编译到class文件中,会在编译时遗弃。

html注释将会当作模版元素,直接输出到浏览器中,浏览器将不会显示html注释中的内容。

2.6JSP指令

2.6.1page指令

用来通知翻译引擎,如何翻译当前的JSP。 [ language=\当前JSP使用的开发语言。 [ extends=\当前jsp翻译成servlet后要继承的类,注意此值必须是一个servlet的子类,一般情况下不要改。 [ import=\| package.*}, ...\] 导入需要使用到的包 java.lang.*;javax.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*; [ session=\| false\] 用来指定当前页面是否使用session,如果设置为true,则翻译过来的servlet中将会有对session对象的引用,于是可以直接在jsp中使用session隐式对象。但是这将导致一旦访问jsp就会调用request.getSession()方法,可能导致不必要的空间浪费。如果确定jsp中不需要session可以设为false。 [ buffer=\隐式对象所使用的缓冲区的大小。 [ autoFlush=\隐式对象是否自动刷新缓冲区,默认为true,不需要更改。 [ isThreadSafe=\翻译过来的servlet是否实现SingleThreadModel。 [ errorPage=\如果页面出错,将要跳转到的页面,除了在jsp中使用此属性指定错误页面外也可以在web.xml中配置整个web应用的错误页面,如果两个都设置则jsp中的此属性起作用。 [ isErrorPage=\如果设置此属性为true,翻译过来的servlet中将含有Exception隐式对象,其中封装的就是上一个页面中抛出的异常对象。 [ contentType=\和jsp乱码相关的指令,用来指定jsp输出时,设置的Content-Type响应头用来指定浏览器打开的编码。 [ pageEncoding=\服务器翻译jsp时使用的编码集.如果向防止jsp乱码,应该保证文件的保存编码和jsp翻译成servlet用的编码以及输出到浏览器后浏览器打开的编码一致.此属性一旦设置好,翻译引擎会间接帮我们设置content-type属性。 [ isELIgnored=\当前页面是否使用el表达式,设置为false时表示启用el,j2ee4.0开始默认支持,j2ee4.0一下做开发时,如果要使用el表达式,需将此属性设置为false。

2.6.2include指令

<%@ incluede file=\静态引入其他页面的内容,其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。 *静态引入:在源文件级别进行合并,多个jsp生成一个servlet,最终由这一个servlet生成响应。推荐使用。 *动态引入:在运行时将多个输出进行合并,多个jsp分别生成多个servlet,最终由这多个servlet生成响应,组成一个输出流,提供响应。执行效率没有静态引入高。

被引入的文件必须遵循JSP语法。

被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的

内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。

由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。

2.6.3taglib指令

<%@ taglib uri=\用来引入标签库。 uri指定被引入.tl文件的名称空间。 prefix 对该名称空间的一个缩写x。

2.7九大隐式对象

Jsp Servlet application ServletContext session HttpServletSession request HttpServletRequest pageContext pageContext HttpResponse PrintWriter ServletConfig response out config page this Exception 2.7.1out对象

out隐式对象用于向客户端发送文本数据。out对象是通过调用pageContext对象的getOut方法返回的,可以将他理解成response.getWriter()获得的PrintWriter。

JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。

只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中: ? 设置page指令的buffer属性关闭了out对象的缓存功能 ? out对象的缓冲区已满 ? 整个JSP页面结束 它自带一个缓冲区,其大小受page指令中的buffer的设定限制。当缓冲区满或缓冲区被关闭或当前jsp页面结束,则此缓冲区中的内容将被刷新到response.getWriter()的缓冲区中。

2.7.2PageContext对象

(1)获取其它八大隐式对象,可以认为是一个入口对象。pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。

(2)通过pageContext获得其他对象

getException方法返回exception隐式对象 getPage方法返回page隐式对象

getRequest方法返回request隐式对象 getResponse方法返回response隐式对象 getServletConfig方法返回config隐式对象

getServletContext方法返回application隐式对象 getSession方法返回session隐式对象 getOut方法返回out隐式对象 (3) pageContext作为域对象获取其所有域中的数据

pageContext对象的方法

public void setAttribute(java.lang.String name,java.lang.Object value) public java.lang.Object getAttribute(java.lang.String name) public void removeAttribute(java.lang.String name) pageContext对象中还封装了访问其它域的方法

public java.lang.Object getAttribute(java.lang.String name,int scope)

public void setAttribute(java.lang.String name, java.lang.Object value,int scope) public void removeAttribute(java.lang.String name,int scope)

代表各个域的常量

PageContext.APPLICATION_SCOPE PageContext.SESSION_SCOPE PageContext.REQUEST_SCOPE PageContext.PAGE_SCOPE

findAttribute方法,在四大域中搜寻属性,搜寻的顺序是page域、request域、session域、application域,从小域到大域开始搜索,如果搜索到就直接获取该值,如果所有域中都找不到,返回一个null。(与el表达式不同,此处返回null,对网页是不友好的)

(4)作为域对象使用 作用的范围:真个jsp页面,是四大作用域中最小的一个。 声明周期:当对jsp的请求开始时生成,当响应结束时销毁。 (5)跳转到其他资源 PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。

方法接收的资源如果以“/”开头, “/”代表当前web应用。 其身上提供了forward和include方法,简化重定向和转发的操作。

2.7.3JSP运行原理

? 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。

? 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。

? JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

八、标签

JSP既可以用来生成HTML页面,也可以直接书写java源码处理逻辑,这就导致了很多开发者在JSP出现初期,只用JSP做开发,这个JSP页面十分庞大、充满了java源码和HTML标签、许多百分号,逻辑结构混乱,不宜调试程序和页面美化。于是人们希望将java源码从JSP页面中尽量抽离,但是把所有java源码都抽走是不现实的,最基本的获取属性、简单的页面逻辑还是需要的,于是,sun公司就提供了JSP中的标签开发技术,以一个标签代表一种功能的java代码,是整个jsp看起来更像一个HTML,并且不丢失JSP进行逻辑处理的功能。

1.JSP标签:

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。由sun公司提供,属于jsp规范中的内容,不需要引入第三方标签库。 (1)用来替代request.getRequestDispatcher().include()。此标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。

语法:

page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。

flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。 (2)用来替代request.getRequestDispatcher().forward()。此标签用于把请求转发给另外一个资源。

语法:

page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。 (3)配合前两个标签使用,可以在包含或转发时,带一些请求参数过去。

语法1:

语法2:

标签的name属性用于指定参数名,value属性用于指定参数值。在标签中可以使用多个标签来传递多个参数。


javaweb基础知识整理(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中建四局第三建筑工程有限公司四川分公司施工方案管理规定0831

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: