周记随笔10

第10周学习知识点:
1.Cookie
2.Seesion
3.Jsp

本周学习收获:
 1.保存会话数据的两种技术:
Cookie:
cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
Session:
session是服务器端技术,利用这个技术,服务器在运行时可以为每个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的sesion中,当用户再去访问服务器中的其它web资源时,其它web资源再从各自的session中取出数据为用户服务。
2.Session
在web开发中,服务器可以为每个用户浏览器创建一个会话对象,注意:一个浏览器独占一个session对象.因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其他程序时,其他程序可以从用户的session中取出该用户的数据,为用户服务。
3.session和cookie的主要区别在于:
cookie是把用户的数据写给用户的浏览器。
Session是把用户的数据写到用户独占的session中
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
3.禁用cookie后的session处理
解决方案:url重写
response.encodeRedirectURl(java.lang.string.url)
用于对sendRedirect方法后的url地址进行重写。
response.encodeURL(java.lang.String.url)
用于对表单action和超链接的url地址进行重写
4.session防表单重复提交
表单页面由servlet程序生成,servlet为每次产生的表单页面分配一个唯一的随机标识号,并在FORM表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号。 
当用户提交FORM表单时,负责处理表单提交的serlvet得到表单提交的标识号,并与session中存储的标识号比较,如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。
在下列情况下,服务器程序将拒绝用户提交的表单请求:
    存储Session域中的表单标识号与表单提交的标识号不同
    当前用户的Session中不存在表单标识号
    用户提交的表单数据中没有标识号字段
5.session一次性校验
一次性验证码的主要目的就是为了限制人们利用软件工具来暴力猜测密码
服务器程序接收到表单数据后,首先判断用户是否填写了正确的验证码,只有该验证码与服务器端保存的验证码匹配时,服务器程序才开始正常的表单流程。
密码猜测工具要逐一尝试每个密码的前提条件是先输入正确的验证码,而验证码是一次性有效的,这样基本上就阻断了密码猜测工具的自动地处理过程。
6.Jsp
JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。 
直观认识:在jsp页面中编写的java代码需要嵌套在<%%>中,嵌套在<%%>之间的java代码被称为脚本片段,没有嵌套在<%%>之间的被称为jsp模板元素
JSP中的Java代码可以使用out.println语句将其他Java程序代码产生的结果字符串输出给客户端,也可以使用System.out.println语句将它们打印到命令行窗口。
JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。
Jsp的概念
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术
7.jsp和servlet的比较:
人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。
8.jsp的运行原理:
WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。 
JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言,JSP中的脚本程序代码可以采用Java语言之外的其他脚本语言来编写,但是,JSP页面最终必须转换成Java Servlet程序。 
9.分析jsp所生成的servlet代码
HttpJspBase类是HttpServlet的一个子类,因此JSP页面翻译成的Servlet是HttpServlet的一个孙子类。HttpJspBase类实现了javax.servlet.jsp.HttpJspPage接口中的部分方法,因此,HttpJspBase类是抽象的。 
。HttpJspPage接口和JspPage接口属于JSP API,在HttpJspPage接口中只定义了一个_jspService方法,但它继承了JspPage接口,JspPage接口中定义了两个方法:jspInit()和jspDestroy()。
HttpJspBase的init方法调用了jspInit和_jspInit方法,destroy方法内部调用了jspDestroy和_jspDestroy方法,service方法内部调用了_jspService方法。在HttpJspBase中实现的init、service和destroy方法都被声明成了final类型。
10.jsp的执行过程
客户端发出请求
web容器将jsp转译成servlet源代码
web容器将产生的源代码进行编译
web容器加载编译后的代码并执行
把执行结果响应给客户端
11.jsp指令:
   Page指令
   Include指令
   Taglib指令
   JSP指令的基本语法格式:
	<%@ 指令 属性名="值" %>如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。
Page指令:用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。 
如何解决JSP引擎翻译JSP页面时的中文乱码问题 
   通过page指令的contentType属性说明JSP源文件的字符集编码
   page指令的pageEncoding属性说明JSP源文件的字符集编码
include指令:include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
语法:
	<%@ include file="relativeURL"%>其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
taglib指令
12.jsp隐式对象
JSP引擎先将JSP翻译成一个_jsp Servlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
Out隐式对象
out隐式对象用于向客户端发送文本数据。 
out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。 
只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用
ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
设置page指令的buffer属性关闭了out对象的缓存功能
out对象的缓冲区已满
整个JSP页面结束
pageContext对象

概述:pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等
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 
引入和跳转到其他资源 
PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。
方法接收的资源如果以“/”开头, “/”代表当前web应用。
13.jsp标签
JSP常用标签
<jsp:include>标签 
<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
语法:
	<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
 
page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。
flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。  
<jsp:include>与include指令的比较 :
<jsp:include>标签是动态引入, <jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。 
而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
不管是<jsp:include>标签,还是include指令,它们都会把两个JSP页面内容合并输出,所以这两个页面不要出现重复的HTML全局架构标签,否则输出给客户端的内容将会是一个格式混乱的HTML文档。
<jsp:param>标签 
当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。
语法1:
	<jsp:include page="relativeURL | <%=expression%>">
		<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
	</jsp:include>
语法2:
	<jsp:forward page="relativeURL | <%=expression%>">
		<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
	</jsp:include>
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。
web的四个域对象
pageContext(称之为page域) 
request(称之为request域)
session(称之为session域)
servletContext(称之为application域)
明确如下问题:
什么是域?
这4个对象的生命周期?
哪种情况下用哪种域对象。
14.javaBean与jsp
JavaBean的概述:
JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:
这个Java类必须具有一个无参的构造函数
属性必须私有化。
私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
在JSP中使用JavaBean 
JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:
<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
<jsp:useBean>标签 
<jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象:
如果存在则直接返回该JavaBean对象的引用。
如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中
常用语法:
	<jsp:useBean id="beanName" class="package.class" 
				scope="page|request|session|application"/>

id属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称。
class属性用于指定JavaBean的完整类名(即必须带有包名)。
scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application等四个值中的一个,其默认值是page。
<jsp:setProperty>标签
<jsp:setProperty>标签用于设置和访问JavaBean对象的属性。 
语法格式:
<jsp:setProperty name="beanName" 
{ 
	property="propertyName" value="{string | <%= expression %>}" |
	property="propertyName" [ param="parameterName" ] | 
	property= "*" 
}/>

name属性用于指定JavaBean对象的名称。 
property属性用于指定JavaBean实例对象的属性名。
value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。  
param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。 
<jsp:getProperty>标签
jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中。
语法:
	<jsp:getProperty name="beanInstanceName" property="PropertyName" />

name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。 
property属性用于指定JavaBean实例对象的属性名。
如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。
15.jsp开发模式:JSP+JavaBean和mvc
区别:JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据。
Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP、JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值