动态脚本语言,运行在web服务器上
首先JSP页面会被转成JAVA文件,并编译马class,再运行
1,JSP基本部分
<%! %> 定义段,常在其中定义方法和属性
注意:1,尽量不在其中定义属性,因为牵涉到线程数据同步问题
2,里面的方法一般都定义成private的
3,如果一定要定义属性,那么对这个属性的访问方法就要加上synchronized关键字
<% %>
JSP脚本,在一个页面中,不管分成多少个部分的脚本,这些脚本最终都会被生成在JAVA文件的同一个方法中,这个方法和在定义段中定义的那些方法是并列的
在这些脚本中,可以访问一系列内置对象,但在定义段中不可以
<%= %>
JSP表达式,这个表达式等同于out.println()方法,这个表达式是独立的,不能镶在<% %>
<%-- --%>
JSp注释 ,不会生成到客户端,请和html的注释比较
-----------------------
2.JSP指令
<%@ page %> 用于设置当前页面一系列基本信息
import:用于引入在当前页面中需要的Java包,不同包之间用','隔开
唯一可以重复出现多次的page属性
pageEcoding:指定当前页面编码,请参照中文问题
language java
isErrorPage:在当前页面中,是否可以使用exception内置对象
errorPage:当前页面如果产生错误后,转往哪个页面
autoFlush:是否自动刷出缓存
<%@ include %> file属性指定要引入的文件
这个文件是被引入后,再和当前页面一起去生成java文件,而不是先单独运行后把页面
结果返回.
请注意和<jsp:include>之间的区别
<%@ taglib uri= prefix %> 为了引入标签库
uri部分指明了标签库或者标签文件tld所在位置
prefix是标签的前缀,使用上采用<c:out>
--------------------
3.JSP的动作
3.1 <jsp:include page="" >把page的页面先执行后,再把最后返回的结果引入当前页面,对于需要动态的部分,往往采用这样的方式.
<jsp:include page="" ></jsp:include>如果这样写,意味着当中一定要有<jsp:param>来传递参数
<jsp:include page=>
<jsp:param name= value= />
</jsp:include>这是正传递参数的方式
3.2 <jsp:forward page=>跳转到page所在的页面
跳转是服务器内部的跳转,或者叫转发,不是重定向
地址栏地址不会变化
request会一直被保留
也可以结合<jsp:param>
注意和response.sendRedirect进行比较
这个动作等同于request.getRequestDispatcher("xx").forward(request,response)
3.3 <jsp:useBean><jsp:setProperty><jsp:getProperty>操作javabean的
<jsp:useBean id= class= scope= />
可以定义任何类
class必须是带包名的类名,哪怕已经引入过了
这个操作相当于做了两样事情,一个是在scope所对应的attribute中set了一个名字为id="xx"的属性,另一个是定义了一个jsp中的变量,可以在小脚本直接访问
<jsp:setProperty name= property="*|xxx" param= value= />填充一个由<jsp:useBean>所定义的javabean对象.填充的方式就是调用setter方法
name和<jsp:useBean>的id相同
四种填充方式:
name= property="*" 把所有提交来的表单中的内容填充到对应bean的同名属性中,并做类型转换
name= property="xx"把表单中和xxx 相同的部分,填充到xx属性
name="xx" property="bb" param="aa" 把表单中的aa和bean中的bb属性相对应
name="x" property="xx" value="zxxx" 把value中的值填充到xxx属性,value中的值可以是一个单纯的字串,也支持jsp表达式和el
param和value不能见面
<jsp:getProperty> 根据bean的name来调用对应的getter方法
-------------------
4. jsp的内置对象
4.1 jsp中的内置对象有作用域,分别为page,request,session,application
jsp的内置对象一共有9个,分别是
1, pageContext(page),request(request),session(session),application(application)
都可以setAttribute和getAttribute
2,剩余的5个,作用域都是page
response,out,cookie,page,config最后两个是和servlet相关的
4.2 作用域
作用域的应用很广泛,EL,JSP动作都有作用域,但说到底,都是attribute的存活范围
page:当前页面
include指令
request:
forward跳转
include动作
不包括重定向
最常见的,从一个表单提交到当前页面的信息
session:
在当前页面打开的时间内都有效
包括重定向
但是页面关闭就失效,还可能在时间到期和手动调用invalidate方法后失效
application:
在整个应用存在期间都有效,包括重新打开窗口
但不等同于把tomcat启动起来
把应用重新部署,application就失败了
4.3 内置对象分别说
request:获得表单提交的内容
getParameter(); // string
getParamterValues(); // string[]长用于获取多选的内容
获得表单内容时候,记得先判断是不是null
为了规避nullProinterException我们常操作的时候把常量放前面肯定不会是null的放前面
操作attribute,setAttribute,getAttribute,removeAttribute();
获得http的信息:getHeaders("user-Agent");getProtocol()
获得当前应用的一些信息:getContextPath获得RootURL,常用于拼接绝对路径
getServletPath RootURL如果面的那些访问路径
getRemoteAddress
gethost();
setCharacterEncoding(),设置字符集转换
和cookie交互
getCookie :返回Cookie[], 需要遍历这个数组,才能取得需要的cookie内容
替代方案是使用EL表达式${cookie.xxx}
response对象:不能操作属性
然后有一些set方法
setContentType:指定产生的页面的一些类型和编码
sendRedirect();//重定向,见后面的重定向和转发的比较
encodeURL : 在cookie失效的情况下,通过此方法来使得session仍然可用
addCookie : 在本地生成一个cookie文件,并保存对应cookie对象
session : 会话信息,常用于保存用户登录,购物车等等.
setAttribute等操作属性的方法
invalidate方法来使得当前session失效
cookie : 其实是通过上面的response和request来操作的.
Cookie cookie = new Cookie("键", "值");
cookie.setMaxAge();//用于指明cookie的生存时间,如果不指定的话,则窗口关闭cookie
session的实现,默认是使用cookie机制
必须要在response.addCookie()前调用
cookie和session的比较见后
application: 常用的就是操作attribute,ServletContext
out : 是PrintWriter的子类,JspWriter
println(0, newLine()
pageContext : 操作是页面里的属性,不要和page搞混了
setAttribute等操作属性的方法
可以获得其他内置对象
getOut
getSession()
4.5 内置对象的几个特别说明
4.5.1
forward和sendRedirect的区别
前者是服务器内部跳转,后者是重定向
前者地址栏里不会改变,后者会
前者带着request跑,后者不带
前者只能访问当前应用,其绝对路径写法不带RootURL
后者可以访问当前web服务器上的其他应用,其绝对路径比较要带上rootURL
前者跳转的时候,并不改变其相对路径的起始目录,所以在写路径时,尽量优先考虑欢乐能几朝路径
4.5.2 cookie和 session的区别
前者是文件,保存在磁盘,后者是数据,存在内存
前者的生存周期,由setMaxAge决定,不随应用的关闭而消失
后者生存周期只在当前窗口内,窗口关闭则over
前者保存在客户端,后者保存在服务端
前者不安全,后者相对安全,所以牵涉隐私信息,不要放cookie里
4.5.3 中文问题的处理
要区分是post还是get
对于post方式,我们需要调用request.setCharacterEncoding()转码
对于get方式,需要通过getBytes()逐个来转码
对于sendRedirect的时候,要特别记得要多转一次或者使用URLEncoding类来转一下
所有页面要使用统一的pageEncoding设置,推荐GBK或者UTF-8
对于tomcat,我们有一些特别的设置,可以简化中文问题
conf/server.xml中的<connector>里增加URIEncoding="xx"或者useBodyEncodingForURI="true"
增加完毕后,只需要在每个页面上统一使用request.setCharacterEncoding设置.
分享到:
相关推荐
JSP实验环境组建、简单JSP应用、JSP内置对象的应用、Servlet的应用、JSP访问数据库的应用
项目01_JSP+JDBC留言管理程序(代码+笔记) 项目02_使用JSP完成简单的登陆程序(代码+笔记) 项目03_JSP+DAO留言管理程序(代码+笔记) 项目04_使用JSP基于数据库完成用户登陆(代码+笔记) 项目05_MVC+DAO_...
3.4通过JDBC对数据库进行访问 13 4系统需求分析 15 4.1系统需求 15 4.2系统功能 16 5系统设计 17 5.1模块功能设计 17 5.1.1在线购物流程图显示: 18 5.1.2用户注册流程 18 5.1.3用户登陆流程 19 5.1.4购物车流程 20 ...
2.1. 另一个简单jsp 2.2. 中文乱码 2.2.1. 先解决响应中的乱码 2.2.2. POST乱码 2.2.3. GET乱码 3. 请求的跳转与转发 3.1. 范例 3.2. 如果用forward 3.3. 如果用redirect 3.4. forward和redirect的问题 ...
这是一道面试题,要做一个简单的分页显示,要求查询数据库,将数据查出来显示到jsp页面,听起来简单,但纯手写也麻烦所以总结了一下。
以下总结了课程中学习的四种JavaWeb数据库应用开发方式,其中第前两种适合业务逻辑和功能简单的系统;后两种则是经典的MVC开发模式,推荐大家主要采用这种方式。此外,在有一定基础后可以学习使用主流开发框架,如...
第六章为结束语,为此次毕业设计做一个总结,总结所获得的经验和体会。 第二章 图书借阅管理需求分析 2.1 可行性分析 采用现代化统一的计算机信息网站系统,能够有效优化图书馆管理系统,使其高效的发挥最大作用,...
内容总结 13 独立实践 14 第二章: 面向对象概述 15 学习目标 15 面向对象(Object Oriented) 16 面向对象的主要特性 18 抽象(Abstraction) 18 封装(Encapsulation): 19 多态(Polymorphism) 20 面向对象的优点 22 ...
22、JSP中动态INCLUDE与静态INCLUDE的区别? 动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态...
它的属性比较简单,只有 id 和 queryName 两个,而且比较容易理解。 4.4. clickable 该标签的作用是给一个 dimension 或一个 level 里的所有的 members 加上超链,使得它们变的可以进行点击操作。生成的 URL 中...
Java Web实验报告 Java Web Experiment Report 学生所在学院: 学院 学生所在班级: 学 生 姓 名 : 学 号 : 指 导 教 师 : 月 一、客户端开发设计:系统设计 一、实验目的 掌握Html的语法和用法,能制作简单的...
abstract (关键字) 抽象 ['æbstrækt] access vt.访问,存取 ['ækses]'(n.入口,使用权) algorithm n....Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv....
14. JSP中动态INCLUDE与静态INCLUDE的区别? 89 15、两种跳转方式分别是什么?有什么区别? 89 16、页面间对象传递的方法 89 17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 90 18、MVC的各个部分都有...
Java中的异常处理机制的简单原理和应用。 java socket java序列化 JVM加载class文件的原理 双亲委派模型 为什么要自定义类加载器 如何自定义类加载器 什么是GC 内存泄漏和内存溢出 Java的内存模型(JVM的内存划分) ...
Hibernate 可以应用在任何使用JDBC 的场合, 既可以在Java 的客户端程序使用, 也可以在Servlet/JSP 的Web 应用中使用。 AJAX是Asynchronout JavaScript and XML的缩写,它并不是一门新的语言或技术,实际上是几项...
10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...
10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...
图书馆管理系统(Java) 优秀毕业设计论文+软件设计源码 摘 要 随着科学技术的进步,计算机行业的迅速发展,大大提高人们的工作效率。...第六章为结束语,为此次毕业设计做一个总结,总结所获得的经验和体会。
在对由三部分组成的 Spring 系列 的第 1 部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC 容器注入应用程序的依赖关系(而不是将它们构建进来)。 我用开启在线信用帐户的用例作为起点。对于该实现,...
文献综述 摘 要 Web开发技术和Web开发框架整合实践研究是这个时代的一个热点,本文在参阅国内 外Web开发技术和Web开发框架及主要几个框架相关文献的基础上,对Web开发框架研究作 了较为全面的总结和梳理,并结合Web...