`

Web小结---Servlet,JSP,过滤器和监听器,四个作用域和九个内置对象,EL表达式语言,自定义标签,JSTL,国际化与汉字的编码 收藏

阅读更多

  1、Servlet、ServletConfig:前者对应一个Servlet类,后者对应的是在web.xml中的配置信息
(1)Servlet:
init(ServletConfig):只再类加载并实例化后会被调用一次。
service(ServletRequest,ServletResponse):会被调用多次
destroy():只有一次
getServletConfig()
getServletInfo()
(2)ServletCionfig
getServletName()
getInitParameter(String):---<servlet><init-param></init-param></servlet>
getInitParameterNames():
getServletContext
注意ServletContext中也有getInitParameter(String),它对应的是:<context-param>中嵌套的元素
这个<context-param>和<servlet>标签是同级别的,初始化的是整个应用程序
2、两个类:
GenericServlet/HttpServlet:
GenericServlet实现Servlet和ServletConfig,HttpServlet继承自GenericServlet,而且它是和HTTP协议相关的。
(1)GenericServlet:具有一个无参的init方法,方便子类的覆盖。
(2)HttpServlet:具有两个service方法,并且有7个do方法。重写的时候一般重写do方法

3、Servlet配置
指的是web.xml中的信息,
<servlet>
 <servlet-name></servlet-name>
 <servlet-class></servlet-class>
 <init-param></init-param>
</servlet>
//上面的配置对应的可以说就是ServletConfig中的东西
<servlet-mapping>
 <servlet-name></servlet-name>
 <url-pattern></url-pattern>
</servlet-mapping>

4、WEB应用程序文件夹的结构
--WEB-INF
  |
  |------------web.xml
  |------------lib文件夹      JAR文件
  |------------classes       类文件
  |------------tags          TagFile标签文件
--静态资源与JSP文件

5、请求和响应:
(1)请求ServletRequest->HttpServletRequest
getParameter(String)、
getHeader()、
getParameterValues(String)、用于复选框
getParameterNames、
getRemoteAddr、得到远程地址
getLocalAddr、得到本地地址
getLocale、得到本地化信息
getSession/getCookies
getRequestDispatcher

(2)响应ServletResponse->HttpServletResponse
sendRedirect
sendError
setHeader/addHeader/setIntHeader
getWriter/getOutputStream :这两个方法绝对不可以同时被调用!!!!!
setContentType/setCharacterEncoding

6、请求的转发和响应的重定向之间的区别要搞清楚
(1)转发:
A、三种转发的方法:
RequestDispatcher.forward/include
<jsp:include>
<jsp:forward> 等价于RequestDispatcher.forward();return;
也就是说使用RequestDispatcher.forward()后,下面的代码仍然要执行,但是<jsp:forward>执行后,下面的代码就不执行了。
pageContext.forward/include
B、如何得到RequestDispatcher:
request.getRequestDispatcher
ServletContext.getRequestDispatcher

RequestDispatcher的请求转发、Jsp页面中指令元素include、以及ServletContext中的getResourceAsStream(String path)
(用来读出文件夹中的路径资源)都可以访问WEB-INF文件夹,
比如为了防止用户访问一些受保护的页面(比如控制器Servlet),把它们放到WEB-INF中去,请求转发的时候可以去访问。
有的时候需要读取WEB-INF中的一些配置资源,需要ServletContext中的getResourceAsStream方法。
而且有的网站的各个页面具有相同的头图片和尾图片,这些东东就可以放到WEB-INF文件夹中用page元素的include指令来包含进来。

注意如果使用ServletContext的RequestDispatcher,要从A应用程序转发请求到B,必须设定A的crossContext值为true!

(2)重定向
response.sendRedirect:比如在注册结束后转到下一个页面的时候,一定要使用重定向改变浏览器的URL地址!
请求的转发不可能脱离Tomcat服务器的范围,如果想要脱离本服务器的话,只能通过响应重定向的方式。重定向要生成一个临时的响应,(响应
一旦生成请求就结束了)浏览器接到这个临时的响应后不显示任何东西而是发送请求去找新的地址。


二、JSP
1、模板和元素:
对于JSP来说,它是不可执行的,必须翻译成Servlet才能执行,必须要容器特殊处理的叫做元素,
直接打印到输出流中去的是模板

元素分为以下几种:
1脚本元素
2指令元素
3动作元素

1脚本元素:
(1)脚本片断:翻译后原封不动的放到service方法里面
(2)脚本声明:放在类里面,但是是在service方法外面,
(3)脚本表达式:原封不动的放到out.print里面去,脚本表达式不可以加分号。

内置对象绝对不可以在脚本声明中去用!因为它们的作用是在service方法里面的。

2指令元素:
Page指令:
include指令<%@include file=""%>,包含的这个文件一定是按照纯文本的格式去读取,读取文件的时候就有编码的问题,这时候就是pageEncoding
的设置问题了。
taglib指令

3页面乱码:pageEncoding/contentType
前者设置jsp页面读取的形式,后者设置一个响应的报头,告诉浏览器以什么编码格式去显示
如果没有设置pageEncoding而是只设置了contentType的话,那么pageEncoding要受contentType影响,反之亦然。
也就是两者只设一者的话都会按照一个编码去显示!

无论请求还是响应,递交的时候默认都是按照iso-8859-1去解码的。一定要保证读写和显示时候的编码都是一致的

4 动作元素:
<jsp:useBean>:主要作用:开放一个脚本变量并且向作用域里面存一个属性
<jsp:setProperty>
<jsp:getProperty>
<jsp:forward>
<jsp:include>
<jsp:param>
前六个比较重要!
<jsp:invoke>
<jsp:doBody>
<jsp:plugin>
<jsp:fallback>
<jsp:params>

三、过滤器和监听器
1、Filter/FilterConfig
init(FilterConfig)
doFilter(ServletRequest,ServletResponse,FilterChain)
destroy()

<filter>
 <filter-name>
 <filter-class>
</filter>

<filter-mapping>
 <filter-name>
 <url-pattern>|<servlet-name>
</filter-mapping>

url-pattern相同的过滤器处于一个过滤器链上,执行的顺序完全按照web.xml中的先后顺序进行。

2、监听器->ServletContext/HttpSession/ServletRequest
(1)生命周期
ServletContextListener:初始化(从BBS中读取全部讨论区并存储在应用程序的作用域中或是将全部封杀的IP读出来存储)和销毁
HttpSessionListener/HttpSessionActivationListener
ServletRequestListener
(2)属性的增删改
一般是AttributeListener去作的
<listener>
 <listener-class>包名.类名</listener-class>
</listener>

四、四个作用域和九个内置对象
1、页面作用域对应的是pageContext,而不是page
2、内置对象:
pageContext/request/session/application
out->是JspWriter的实例,它有缓存,而PrintWriter没有缓存,在页面结束的时候一定会通过响应生成PrintWriter去写出缓存的内容!
  如果缓存满了的话,要看:如果<%@page autoFlush="true"%>,则会自动刷新,如果是false,会抛出异常的!response.getWriter()
  返回的是PrintWriter,不是JspWriter。
exception->isErrorPage=true的时候才有用
session:两种跟踪机制:一种是通过客户端的cookie存储,另外一种是将sessionId存在服务器端,
config->ServletConfig
page->Object->this
response:

五、EL表达式语言:
${}
1、常量、函数、变量的表达式
2、变量是存储在某一作用域中的同名的属性值
3、函数是在tld文件中声明的引用一个类的公共且静态的方法
4、11个内置对象
(1)作用域:pageScope/requestScope/sessionScope/applicationScope
(2)和页面通信:pageContext
(3)请求参数的:param/paramValues
(4)报头:header/headerValues
(5)Cookies/initParam ---<context-param>
5、点操作符和[]操作符和empty
对javaBean,是调用getter方法,
对map,是调用get(Object)方法,
对作用域,是调用getAttribute(String)
对pageContext,也是调用getter方法,可以得到所有的内置对象
对param,是去取得参数
对header,是去拿报头
对initParam,是去拿初始化参数
[]操作符主要是针对数组


六 自定义标签
1、Tag接口(传统接口系列)

JspTag
(1)Tag : doStartTag(返回值是SKIP_BODY/EVAL_BODY_INCLUDE)/doEndTag(返回SKIP_PAGE或是EVAL_PAGE)
(2)IterationTag->TagSupport
doAfterBody:EVAL_BODY_AGAIN/SKIP_BODY
(3)BodyTag->BodyTagSupport
doInitBody
doAfterBody:EVAL_BODY_BUFFERED->BodyContent:pageContext里面有一个pushBody,用来将体包起来,这时候再用getOut方法得到
的不再是JspWriter了,而是bodyContent了。BodyContent的生成是调用了pushBody方法,这里面又涉及一个getEnclosingWriter(),它
是BodyContent的一个方法,可以得到它里面包的输出流JspWriter,但是要注意要是进行了一次以上的pushBody但是没有进行popBody的话,那么
拿出来的就是里面包的BodyContent了,但是由于BodyContent是JspWriter的子类,所以也是符合方法声明的


2、SimpleTag接口(简单接口系列)
setJspContext()
setParent()
setJspBody(JspFragment) 注意JspFragment是标签体,里面绝对不可以有脚本元素的!注册的时候content元素中要么设置为empty,
要么设置为scriptless,也就是简单标签的标签体是不可以有脚本元素的!
doTag()

JspFragment.invoke(null):直接弄到输出流中去
JspFragment.invoke(StringWriter out):将输出流弄到StringWriter中去,然后调用out.toString可以将体变成字符串的形式

3、Tag File标签文件
.tag
可以放在/WEB-INF/tags里面或者/META-INF/tags里面也可以
至于标签文件的tld可以放在WEB-INF中也可以放在META-INF中去,都是没有问题的
标签文件描述的是标签处理类,jsp描述的是Servlet,二者都是不可运行的,注意标签文件中有<%@tag%>,里面可以设置不少标签的属性
还有<%@attribute %>,<%@taglib%>和<%@include%>也可以用,属性可以是JspFragment

比如:<my:first>
  <jsp:attribute>
  </jsp:attribute>
  <jsp:body>
  </jsp:body>
  </my:first>

<jsp:invoke name=var>运算结果就放在了var里面
<jsp:doBody>  处理体

七、JSTL
一共5个库,我们说了core、sql、i18n、fn标记库(就是表达式语言的函数库)
我们没有讲xml的标签库

八、国际化与汉字的编码
ResourceBundle
两种形式:
1、ListResourceBundle
2、写一个Properties文件,里面有一个nativetoacsii命令进行,参照前面的笔记转码
基名和扩展名:起名字都是要有标准的
Locale:本地化对象
getBundle方法可以通过传入基名和本地化对象来处理
<fmt:bundle>
<fmt:setBundle>
<fmt:message>
汉字编码:GB2312/GB13000(GBK)/GB18030
Unicode UCS/UTF-8
 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/faith_zerg/archive/2007/09/25/1799355.aspx

分享到:
评论

相关推荐

    jsp和servlet帮助文档

    4. **过滤器和监听器**:Servlet API还提供了过滤器(Filter)和监听器(Listener)接口,它们可以在请求到达Servlet之前或之后执行特定操作,以及监听特定事件。 结合JSP和Servlet,开发者可以构建出功能强大的Web...

    【免费】servlet和jsp学习指南-高清版

    2. **EL(Expression Language)**:这是一种轻量级的表达式语言,用于从JSP页面访问JavaBean或其他作用域内的对象。 3. **JSTL(JavaServer Pages Standard Tag Library)**:一套标准的标签库,可以简化JSP页面,...

    Servlet与JSP核心编程第二版(含书签)

    - **Servlet作用域对象**:主要有三个作用域对象:HttpServletRequest、HttpSession和ServletContext,分别代表一次HTTP请求、一个用户会话和整个Web应用的上下文环境。 #### 二、Servlet高级特性 - **过滤器...

    Head+First+Servlet+and+JSP

    《Head First Servlets and JSP》是一本深受程序员喜爱的IT技术书籍,专注于讲解Servlet和JSP(JavaServer Pages)这两个关键的Java Web开发技术。Servlet是Java编程语言中的一个接口,用于扩展服务器的功能,而JSP...

    Servlet&jsp_PPT课件 资料

    还有可能涉及Servlet过滤器和监听器,它们是Servlet容器中的重要组件,能够拦截请求、响应,执行预处理和后处理操作,或者监听特定的事件。 总的来说,这份"Servlet&jsp_PPT"资料涵盖了Java Web开发的基础,包括...

    servlet与jsp核心编程(第二版).rar

    7. **EL(Expression Language)**:EL是一种简洁的表达式语言,用于在JSP页面中访问JavaBean或其他作用域内的对象属性,简化了页面中的数据绑定。 8. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL是...

    Servlet 与JSP核心编程(第2版)(含源代码版)

    7. **EL表达式**:EL是轻量级的表达式语言,用于获取JavaBean或其他作用域内的数据。如`${user.name}`可以获取`session`作用域中`user`对象的`name`属性。 8. **Model-View-Controller(MVC)模式**:Servlet通常...

    JSP_Servlet的e文API

    在Java Web开发中,JSP(JavaServer Pages)和Servlet是两个核心的技术。它们提供了动态网页生成和处理HTTP请求的能力。本篇将详细探讨JSP和Servlet的英文API,以及它们在实际应用中的关键知识点。 **一、JSP API**...

    \JSP技术文档

    以上内容只是JSP技术的冰山一角,实际应用中还会涉及更多的概念和技术,如JSP的错误处理、过滤器、监听器、国际化、AJAX集成等。深入理解并掌握这些知识点,能够帮助开发者更高效地构建和维护基于JSP的Web应用。

    jspweb工程jspweb工程

    2. 表达式语言(EL):用于在JSP页面中简便地访问JavaBean或其他作用域内的对象。 3. JSP动作标签:如`&lt;jsp:include&gt;`, `&lt;jsp:forward&gt;`, `&lt;jsp:useBean&gt;`等,控制页面的流程和行为。 四、开发流程 1. 创建Web工程...

    JSP即时应用教程下载

    - EL是JSP 2.0引入的轻量级表达式语言,用于访问JavaBeans或其他作用域中的对象属性。 5. **JSTL(JavaServer Pages Standard Tag Library)** - JSTL提供了一系列标准标签,减少硬编码Java代码,使JSP更易读、易...

    JavaServlet学习资料汇总

    - **EL(Expression Language)**:用于简化从JSP页面访问JavaBean或其他作用域中的对象。 8. **MVC模式与Servlet** - **Model-View-Controller**:一种常见的设计模式,Servlet常用于Controller角色,负责接收...

    JSP+JavaBean+Servlet

    JSTL提供了多种标签,如`c:forEach`用于遍历集合,`fmt:formatNumber`用于格式化数字,而EL则是一种轻量级的表达式语言,用于访问和操作页面作用域中的对象。在分页示例中,JSTL和EL可以帮助我们更加优雅地处理数据...

    web开发入门jsp技术文档

    **JSP(Java Server Pages)技术是Web开发领域中一种重要的服务器端...继续深入学习JSP的高级特性,如自定义标签、EL和JSTL的高级用法、过滤器和监听器等,你将能够更好地驾驭Web开发。祝你在JSP的学习旅程中取得成功!

    JSP快速入门比较简单一些入门知识

    EL是JSP中的表达式语言,用于简化获取和设置页面作用域内的对象属性。JSTL是一组标准标签库,提供了一系列标签用于执行常见的任务,如循环、条件判断、XML处理等,旨在减少脚本的使用。 **JSP的优缺点:** 优点:易...

    jsp入门教程

    - **JSP九大默认对象**:介绍JSP提供的九个内置对象及其用途。 #### 第15章 分页 - **数据库分页**:实现数据库查询结果的分页展示。 - **使用JSTL改写分页**:利用JSTL标签库简化分页功能的实现。 #### 第16章 ...

    《Java_Web开发实战经典》总结-第三部分Web高级开发(图文并貌)[归纳].pdf

    在Java Web开发中,第三部分Web高级开发涵盖了多个关键知识点,包括Servlet程序开发、过滤器、监听器、表达式语言、Tomcat数据源、JSP标签、JSTL标准标签库以及Ajax技术。 1. **Servlet程序开发**: - Servlet是...

    学习Jsp的宠物医院管理系统源码

    宠物医院管理系统是一个基于JSP技术实现的Web应用项目,它主要展示了如何运用JSP、Servlet、表达式语言(EL)、JSTL以及过滤器(Filter)等核心技术来构建一个简单的管理信息系统。在这个系统中,用户可以进行宠物...

    JavaWeb编程技术实验指导书.pdf

    7. JSP隐含对象与作用域:该实验指导读者如何使用JSP隐含对象和作用域来编写JSP程序,了解JSP隐含对象和作用域的应用场景。 知识点:JSP隐含对象、作用域、JSP变量 8. Web组件重用与JavaBeans:该实验指导读者如何...

    《Java Web程序设计任务教程》-教材源码 第11章.rar

    6. **Web应用部署与配置**:可能涉及到web.xml文件的配置,这是Java Web应用的部署描述符,用于定义Servlet、过滤器和监听器,以及它们的映射和初始化参数。 7. **数据库连接与操作**:Java Web应用常常需要与...

Global site tag (gtag.js) - Google Analytics