web重点2

第六章

作用域对象

属性操作方法

作用域范围说明

ServletContext(上下文)

void setAttribute(String, Object)

Object getAttribute(Sting)

void removeAttribute(String)

Enumeration getAttributeNames()

整个Web应用程序

HttpSession(会话)

一个会话交互过程

ServletRequest(请求)

一次请求过程

监听器概述

1、监听sessionrequestservletContext这三个对象里存取数据的变化

2、监听器对象可以在事情发生前、发生后可以做一些必要的处理

3Servlet监听器主要目的是给Web应用增加事件处理机制,以便更好地监视和控制Web应用的状态变化

 

监听器实现步骤:

1、 确定事件源。事件源:servletContextsessionrequest

2、 确定监听者。监听器必须实现监听器接口,并在监听器接口中实现逻辑方法

3、 注册

监听器只有注册之后,才能被容器所识别。

<listener>

   <listener-class>

        com.lovobook.MyServletContextListener

  </listener-class>

</listener>

Servlet3标准中可以使用@WebListener注册

 

监听器类型

1ServletContextListener:用于监听ServletContext对象创建和销毁的事件。

  void contextInitialized(ServletContextEvent sce) ——上下文对象创建时,触发

  void contextDestroyed(ServletContextEvent sce) ——上下文对象销毁时触发

 

2HttpSessionListener接口:监听HttpSession的创建和销毁。

sessionCreated(HttpSessionEvent se)方法——创建HttpSession触发。

sessionDestroyed (HttpSessionEvent se)——销毁HttpSession触发

 

3HttpSessionBindingListener :唯一不需要注册的接口

   当一个类实现了HttpSessionBindingListener接口后,只要对象加入Session范围(即调用HttpSession对象的setAttribute方法的时候)或从Session范围中移出(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)时,容器分别会自动调用下列两个方法:

    valueBound(HttpSessionBindingEvent event)——绑定到session时触发

    valueUnbound(HttpSessionBindingEvent event)——移除session时触发

 


第七章

过滤器概念

过滤器是一个中间组件,用于拦截源数据和目的数据之间的消息

过滤二者之间传递的数据

过滤器实现步骤:

1、书写过滤器类

过滤器类都必须实现javax.servlet.Filter接口

public class HelloWorldFilter implements Filter {

   private FilterConfig filterConfig;

   public void init(FilterConfig filterConfig)    {//初始化方法

      this.filterConfig = filterConfig;

   }

   public void doFilter(

 ServletRequest request, ServletResponse response,//请求和响应均不是基于Http协议的

           FilterChain filterChain //将请求继续向后面的过滤器或目标资源发送

                 ) throws ServletException, IOException   {//业务方法书写过滤内容

      PrintWriter pw = response.getWriter();

      ……

         filterChain.doFilter(request,response);

 

   }

   public void destroy()   {//销毁方法

   }

}

在调用filterChain.doFilter方法后,将请求继续向目标资源发送。这时,也不能再做重定向和内部转发,否则抛出异常

 

2、完成过滤器在容器中的注册

<filter>

            <filter-name>HelloWorldFilter</filter-name>

            <filter-class>com.lovobook.HelloWorldFilter</filter-class>

         </filter>

         <!-- 将过滤器与URL模式关联,表示对什么资源进行过滤-->

         <filter-mapping>

            <filter-name>HelloWorldFilter</filter-name>

            <url-pattern>/filter/*</url-pattern>//对请求URL对应的资源过滤

<servlet-name>testServlet</servlet-name>//servlet过滤

         </filter-mapping>

    在Servlet3标准中,可以使用@webFilter(urlpattern="/test")注册

    

 

 

 

 

 

过滤器类型

     <filter-mapping>

         <filter-name>ValidatorFilter</filter-name>

         <url-pattern>/filter/*</url-pattern>

         <dispatcher></dispatcher>——如果为REQUEST表示以请求URL过滤(默认),如果为FORWARD则对内部转发过滤

</filter-mapping>

 

 

 

过滤器链

用多个过滤器处理在同一个请求

l 使用多个<filter-mapping>元素配置过滤器链

l 首先调用匹配请求URI的过滤器 <url-pattern>

l 再查找用Servlet名匹配请求URI的所有过滤器<servlet-name>  

l 过滤器的执行顺序按照它们在部署描述文件中出现的顺序排序  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


第八章

Servlet的缺陷

– Servlet的编码、部署和调试任务繁琐

– 生成动态网页繁琐,不利于项目分工

JSP是为了解决servlet缺陷而产生的。让我们编写输出内容时,可以象普通网页一样编写。

 

JSP生命周期

1Web容器第一次接收到对某个JSP页面的请求后,首先自动将该JSP页面翻译为java代码 。

Tomcat将翻译后的代码放在Tomcat安装目录的/work子目录下

Tomcat/conf子目录下 有以下描述

<servlet>

    <servlet-name>jsp</servlet-name>

    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>//JSP引擎,由它完成翻译工作

</servlet>

. . . . . .

<servlet-mapping>

    <servlet-name>jsp</servlet-name>

<url-pattern>*.jsp</url-pattern>

</servlet-mapping>

 

2Web容器负责将Servlet代码编译为字节码。与源文件放在同一个目录下,在JSP生命周期中,整个翻译和编译步骤只发生一次

3Web容器装载新生成的servlet

4、第一次请求到达时,Web容器创建servlet实例对象。整个生命中,只有一个对象

5Web容器调用Servlet示例的jspInit()方法,JSP页面装载资源

6、每次请求到达都执行_jspService()方法,输出内容

7、容器调用生成的servlet对象的jspDestroy()方法,销毁装载的资源

 

JSP规范所有JSP类都必须实现HttpJspPage接口,而这个接口是servlet子接口,所以JSP本质是servlet

JSPservlet类,所以可以在JSP中书写JAVA代码,但不要嵌入过多的JAVA代码,增加阅读和维护难度。JSP重在显示,而Servlet重在逻辑实现。

 

JSP隐式对象

在翻译好的类中,在_jspService()中有九个局部变量,并都做了初始化。由于我们在JSP中书写的内容都是丰富_jspService()方法,所以可以直接使用这些局部变量,这就是隐式对象

四个作用域:

    pageContext:作用于页面

    request:作用于请求

    session:作用于会话

application:作用于全局(类型是ServletContext

二个输出:

   response:响应对象

   out:打印字符流,类型为JspWriter

一个配置对象

   config:类型为ServletConfig

一个当前对象

  page:指当前翻译好的类的对象

一个异常对象

exception:类型为Throwable

 

JSP脚本元素

 

脚本元素

脚本语法

声明

<%! 声明 %>用于JSP翻译好的类中,定义成员变量、静态变量和方法

Scriplet

<% 代码 %>丰富_jspService方法,是普通JAVA代码

脚本表达式

<%= 脚本表达式 %>相当于out.print但是注意后面不能加分号

 

指令

JSP中,有三种类型的指令

page指令为当前页面提供处理指令

contentType 设置向客户端输出的MIME类型和字符编码

import 在当前JSP类中导入包

 

include指令用于把另一个文件包含在JSP

格式:<%@ include file="relativeURL" %>

             静态包含,编译时发生。将被包含文件的内容拷贝在包含文件中。所以两个页面不能有相同的变量。包含的是内容,只能包含文件

 

taglib指令指定如何包含和访问自定义标签库   

<%@taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>

 

   动作

<jsp:include>动作是一种动态的包含

    语法格式为:

<jsp:include page="localURL"  />

page:表示一个相对路径

 

动态包含,包含的是结果,在请求时发生,所以两页面可以有相同的变量,可包含文件也可包含servlet输出的结果,并可传递参数。但效率比指令包含低

<jsp:include  page=”loclaURL”>

     <jsp:param  name=”abc” value=”fff” >

</jsp :include>

被包含页面可以通过request.getParameter(“abc”)将值取出来

 

<jsp:forward>动作,相当于request.getRequestDispatcher().forward()内部转发

语法格式为:

<jsp:forward page="relativeURL" />

 

 

 

Jsp注释:

<%--    --%>jsp注释,容器不会翻译,只在源代码可见,服务器和客户端均不可见。最为安全。

<!--    -->html注释,容器会将html注释输出到客户端,服务器和客户端均可见。不能注释动态脚本代码。

//  /*   */  java代码注释。只在服务器可见。

 

javaBean规范:

JavaBean 类必须是一个公共类,并将其访问属性设置为 publicJavaBean 类必须有一个空的构造函数一个JavaBean类不应有公共实例变量,类变量都为private。要访问这些类变量,应该通过一组存取方法(getXxx setXxx)来访问,不能以大写字母开始命名成员变量,前两个字母都不能是大写

 JavaBean应该是可序列化(serializable)的,即实现java.io.Serializable 接口  

 

三层架构:

持久层(dao模式):创建实体类和数据库表进行映射。也就是哪个表对应哪个类,哪个属性对应哪个列,而持久层的作用是就是完成对象数据和关系数据的转换。

 

业务层(事务脚本):将客户端请求的数据封装成一个方法。该方法中根据业务需要可能会调用多次数据更新操作。必须保证这些操作同时成功,同时失败。不允许部分成功部分失败而导致的数据混乱。

 

 

表现层(MVC)

   M:模型,也就是实体bean。用于封装、传输数据

   V:视图,也就是htmljsp。用于数据的展示

   C:控制,也就是Servlet。用于调用业务类的业务方法,并控制操作的流程。


第十章

 

EL表达式:

我的狗的名字是:${person.dog.name},需要注意,通过EL表达式取属性值时,调用的是get方法,所以如果没有该属性,但是有get方法,同样可以通过EL表达式取出数据。

 

pageContextrequestsessionServletContext中查找属性值,从小作用域向大作用域查找,找到之后不再查找。

 

可以采用EL表达式隐式对象减少搜索范围${requestScope.name}

 

EL隐式对象作用域

 

pageScope 与page作用域属性的名称和值相关联的 Map 

requestScope 与request作用域属性的名称和值相关联的 Map 

sessionScope 与session作用域属性的名称和值相关联的 Map 

applicationScope 与application作用域属性的名称和值相关联的 Map 

 

 

EL表达式也可支持运算。${1+2}在页面上显示3  ${3>2}在页面上显示true

 

JSTL标准标签库(重点)

需要两个JAR文件。第一个文件是jstl.jar,它为JSTL标记库提供API类。第二个文件是standard.jar,它提供了标记库的实现类 。

JSTL分为五种:核心库CoreXML库,SQL库,I18N库,函数库。核心库最为常用

 

JSP页面上导入标准标签库

通过<%@ taglib uri=http://java.sun.com/jsp/jstl/coreprefix=c%>引入到JSP

 

判断标签:条件为真,执行标签体中的内容

<c:if test="${x == '9'}">  ${x}</c:if>

 

循环标签

遍历Collection集合

<c:forEach var="man" items="${numArray}">  ${man .id}   ${man .name}

</c:forEach>

 

遍历Map集合

<c:forEach var="bean" items="${numArray}">  键对象:${bean .key}   值:${bean.value .name}

</c:forEach>


AJAX

 

AJAX涉及到7项技术, JavascriptXMLHttpRequestDomXMLCSS,XHTML,及服务器相关的API

 

这章内容以操作为主

 

XMLHttpRequest对象的创建

var xmlHttp = null;

 function setXmlHttp(){

       if (window.ActiveXObject) {//IE

                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

            }

            else if (window.XMLHttpRequest) {//firefox

                xmlHttp = new XMLHttpRequest();                

            }

       }

 

xmlHttpRequest常用属性和方法

//当准备状态发生变化时,调用press方法,以便监控对象,得到响应信息

   xmlHttp.onreadystatechange = press;

Get方式发送请求

//第一个参数为提交方式,第二个参数表示请求URL,第三个参数为true表示异步传输,同时表示当响应信息未到达客户端不向下执行代码

   //这一步是设置请求行

   //xmlHttp.open("GET","checkServlet?name="+userName,true);

   //这一步设置消息体,同时向服务器发送请求

   //xmlHttp.send(null);

 

POST方式发送请求

xmlHttp.open("POST","checkServlet",true);

  //设置请求头为普通表单格式提交

   xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

   //POST方式,消息体内容为请求参数

   xmlHttp.send("name="+userName);

 

//回调函数

   function press(){

  //xmlHttpreadyState属性为4的时候,表示XmlHttpRequest对象将响应信息返回

   if(xmlHttp.readyState == 4){

   //xmlHttp.status表示获得响应信息的状态码

   if(xmlHttp.status == 200){

       //调用服务器返回消息体的信息

  var info = xmlHttp.responseText;

}

}

}

 

使用jquery发送AJAX请求

get请求

$.get("test", { name: "John", time: "2pm" },

   function(data){

     alert("Data Loaded: " + data);

   },"json");

post请求

$.post("cutPage",{pageNO:2},

function(content){

   $("#dataDiv").html(content);

   },"json");

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值