`

Web小结---Servlet,JSP

阅读更多

http://www.jspcn.net/htmlnews/1150100454437189.html



一 Servlet
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

分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    jsp实验报告4-servlet.zip

    在本实验中,我们主要探讨了JavaServer Pages (JSP) 和Servlet技术在Web开发中的应用,特别是如何通过它们实现数据处理和展示。JSP和Servlet是Java Web开发中的两个重要组件,它们协同工作,提供了动态网页的生成...

    JSP与Servlet实验报告

    【JSP与Servlet技术实验报告】的实验主要围绕图书馆管理系统展开,该系统涵盖了登录...这个系统为读者提供了方便的图书查询和个人信息管理,同时赋予管理员管理图书的能力,展示了JSP和Servlet在Web应用中的强大功能。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web图书管理架构设计该系统

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web架构设计该系统,进一步了解并掌握如何对数据库进行操作,以及如何分析、设计一个应用系统。 需求要求: 该系统的基本需求是,系统要实现如下的基本管理功能: (1)用户分为...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JavaWeb-Servlet学习与总结

    #### 四、小结 通过上述步骤,我们可以成功创建并部署一个简单的Servlet应用。了解Servlet的基本工作原理对于掌握Java Web开发至关重要。随着技术的发展,虽然现代Web框架(如Spring MVC)已经取代了许多传统的...

    JSP应用开发技术---JSP入门教材

    - **本章小结**:每章节最后都会有一个小结部分,总结该章的重点内容和知识点。 - **思考题**:为了检验读者的学习效果,每章末尾还配备了一系列思考题,帮助读者巩固所学知识,并引导他们进行更深层次的思考。 ...

    servlet的url-pattern匹配规则详细描述(小结)

    Servlet的URL-Pattern匹配规则是Web应用程序中Servlet和Filter配置的核心部分,它决定了Servlet或Filter如何响应特定的HTTP请求。以下是对这些匹配规则的详细解释: 1. **精确匹配** - 在`&lt;url-pattern&gt;`中指定的...

    UAP63-Web平台培训-Web开发

    扩展开发小结部分则强调了UAP平台的灵活性和扩展性,以及如何通过可配置框架实现快速开发和提高开发效率。 通过上述内容,UAP63-Web平台培训为开发者提供了一套全面的Web开发解决方案,不仅包含了工具使用方法,还...

    JSP 程序设计从入门到精通 PDF 教程

    ##### 1.5 本章小结 - 对本章介绍的JSP基础知识进行了总结,为后续章节的学习打下了基础。 #### 第2章 JSP基础学习 ##### 2.1 JSP基本语法 - **2.1.1 JSP语法之声明**:这部分详细介绍了如何在JSP页面中进行变量...

    JSP学习经验小结分享

    在介绍JSP学习经验的小结分享中,文中首先提出了JSP应用的两种基本组合模式:对于简单的应用,建议采用JSP+BAEN的组合方式;而对于复杂的系统,则应考虑使用JSP+EJB的组合。这种组合方式的建议说明了在不同复杂度的...

    Servlet过滤器的使用.doc

    #### 五、小结 通过以上步骤,我们可以成功地在Servlet中使用过滤器。过滤器是一种非常强大的工具,能够帮助开发者轻松实现各种需求,同时保持代码的整洁和模块化。掌握过滤器的使用对于任何Java Web开发者来说都是...

    《Java Web应用开发》电子教案

    ### 五、课堂小结 - **知识点回顾**:回顾本次课程所学的主要知识点,如Java Web的概念、软件体系结构、Tomcat安装配置、JSP页面开发等。 - **常见问题解答**:解答学生提出的关于开发环境配置、JSP页面编写等方面的...

    jsp结课大作业

    【jsp结课大作业】是基于Java服务器页面(JSP)技术完成的一项编程项目,它是一个打字母的小游戏。这个项目旨在让学生掌握JSP的基本概念、语法和应用,以及Java后端开发的一些基础技能。通过这个大作业,学生能够...

    ssh集成文档代码

    #### 小结 SSH集成涉及多个配置层面,正确的配置对于系统的正常运行至关重要。理解并合理设置`web.xml`中的各个元素,以及确保Spring和Struts配置正确无误,是解决类似JSP文件位置问题的关键。同时,对于调试信息的...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax+》讲解了JSP/S rvlet技术的基础知识,并提供了一个综合案例展示其具体应用,它们是Java Web服务端技术的基石,也是学习Java Web开发所要必须掌握...

    JSP程序设计从入门到精通

    #### 本章小结 对本章的内容进行总结,巩固所学的JSP基础和数据库操作的相关知识。 通过以上内容,可以系统性地掌握JSP程序设计的核心概念和技术要点。在实际开发过程中,需要不断实践和积累经验,以达到精通JSP的...

    web.xml文件的作用及基本配置.pdf

    ### 小结 web.xml文件是Web应用程序中用于配置Servlet、过滤器、监听器、会话超时以及错误处理等的重要配置文件。它遵循特定的XML Schema,并提供了一种声明式的方式来配置Web应用程序的行为。正确配置web.xml文件...

Global site tag (gtag.js) - Google Analytics