JSP(一)
一、JSP概要
一】JSP的概念
1>JSP是SUN公司开发的一个基于服务端的一种动态WEB开发技术。
2>JSP的代码结构/内容 = HTML内容+JSP特有元素内容
3>在IDE工具中开发JSP,pageEncoding有两层含义:
1》指明当前JSP中的字符采用什么方式编码
2》指明当前JSP页面保存时采用什么方式编码
4>如果再次访问同一个data.jsp文件,翻译工作依然进行,
但Servlet引擎可以去掉创建Servlet对象的工作,得到优化,
因此,这就是第二次比第一次访问迅速的原因。
二】JSP的强项
项目中,最佳实践模式:
Servlet:适合控制器
Jsp:适合显示
JavaBean:模型
三】JSP原理
1)web容器根据客户端访问的资源类别(Web容器会根据资源的第一行代码确定),
如果是JSP资源,就交给JSP引擎处理
如果是Servlet资源,就交给Servlet引擎处理
2)如果是JSP资源,JSP引擎会自动将其翻译成Servlet资源,
3)传入相关的对象,如果是静态资源,翻译成以out.write()形式输出,
如果是动态资源,翻译成以out.print()形式输出
4)此时JSP引擎在翻译正确后,输出给Servlet引擎,按照Servlet对象的处理流程进行处理。
二、JSP语法
一】JSP模版元素
------就是HTML中的静态内容,即<body>、<table>、<form>...等标签
二】JSP脚本表达式
作用:用于将程序数据输出到客户端
语法:<%= 变量或表达式 %>
注意:
1》结尾无分号
2》默认输出到客户端的浏览器
eg:
当前时间:<%= new java.util.Date() %>
三】JSP脚本片断
作用:用于在JSP页面中编写多好Java代码
语法:
<%
...
java代码;
...
%>
注意:
1》脚本片段中的注释符号与java代码一致(因为里面就是java代码)
2》JSP修改后,无需重新部署,直接刷新,Web容器会自动比较新旧两个版本的JSP
3》多个JSP脚本片断中定义的变量,都会翻译到_jspService()函数中,作为【局部变量】
4》如何再次访问同一个date.jsp文件,翻译工作依然进行,但Servlet引擎工作可以简化,这就是为什么第n次比第1次访问速度快的原因。
四】JSP注释
注意:
1》JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。
2》JSP注释不能进行嵌套使用。
与HTML注释的区别:
1》对于HTML注释来说,JSP引擎会将其翻译成Servlet内容,
2》对于JSP注释来说,JSP引擎不会进行翻译。
因此,为了减少服务器压力,优先使用JSP注释,
其实,这也是为什么在客户端能显示HTML注释,而不显示JSP注释的原因。
格式:
<%-- 需要注释的内容 -->
五】JSP声明(即翻译后将声明的东西放到Servlet对象中,作为属性或者作为方法)
1)声明变量
作用:创建一个实例变量,即翻译成的Servlet对象的全局变量(属性)。
格式:
<%!
声明变量的代码;
%>
code:
<%!
String name="哈哈";
%>
2)声明方法
作用:创建一个方法,即翻译成的Servlet对象的方法成员。
格式:
<%!
方法代码块
%>
code:
<%!
public String getName(){
return name;
}
%>
三、JSP指令
一】含义
1)指令是程序员控制JSP引擎做什么的依据
2)主要有三种:page, include, taglib
二】基本语法
一个指令可以有多个属性值。
<%@ 指令 属性名="值" 属性名="值"...%>
三】page指令
1)属性:
language="JSP里面包含的动态语言,默认为java语言, 一般可以不写" code: language="java"
*import="当前JSP页面中,需要导入的包.【会翻译成java文件的import语句。】" code: import="java.util.*, java.io.*, ..."
session="true|false" 设置翻译成java文件时会不会自动创建session对象【创建的是全局对象】。默认值为true
buffer="none | 8kb | sizekb" JSP输出时使用的缓存大小,默认8kb
autoFlush="true| false" 设置当buffer缓存满时,web容器是否自动刷新到客户端。默认为true。
如果为flase需要添加自动刷新的代码
isThreadSafe="true | false" 表示web服务器确保是否线程安全 默认为true
true:容器自动帮加锁
false:需要自己写代码加锁
info="text(JSP的信息)" 表示JSP的相关描述信息,【可以通过getServletInfo()获取该JSP的信息】
*errorPage="relative_url" 当前JSP出错后跳转到目标页面, 【底层使用的是转发】。
*isErrorPage="true | false" 默认为false。【当前页面是否是错误的页面错误后转向的处理页面】,
当JSP页面有此属性且为ture时,服务器翻译时候容器会自动创建一个全局变量exception.
因此,只有JSP页面有该属性且为true时,web容器才会自动创建exception对象
才能调用getMessage()方法获取到关于错误的信息
*【contexType和pageEncoding已经可以通用了】
*contentType="text/html;charset=UTF-8"
*pageEncoding="UTF-8"
*isELIgnored ="true | false" 在JSP引擎翻译时是否把EL表达式语言忽略掉
2)补充:
页面错误处理的方式:
优先级:
第一种方式【局部异常处理】>第二种方式【全局异常处理】
1>第一种方式:通过page指令里面的errorPage属性和isErrorPage属性
属于【局部异常处理】,只对一个JSP页面起作用。
errorPage:出错的页面,指定处理页地址
isErrorPage:处理页面,指明处理错误的方式。
2>第二种方式:修改web.xml文件
属于【全局异常处理】,对项目的所有JSP页面起作用。
加上一个<error-page>标签
格式:
<error-page>
<exception-type>错误的类型,即异常类</exception-type>
<error-code>错误状态码</error-code>
<location>错误处理页面</location>
</error-page>
code:
<error-page>
<exceptin-type>java.lang.NumberFormatException</exception-type>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/unkown.jsp</location>
</error-page>
注意:
1》当使用此种方式。当异常即符合状态码和又符合异常类型,
则会调用转发的include方法,将结果并行显示出来。
结果中:先显示error-code的处理结果,再换行显示exception-type的结果。
2》开发中,优先考虑error-code。
3>第三种方式:在页面中使用try..catch的方式来处理。但是不建议使用此方式。
3)page指定的应用-----使用page指令解决中文乱码问题
注意:JSP页面在提交数据的时候,会自动将中文字符转换成%ad的形式
原理:
1>pageEncoding的含义:即告诉浏览器用什么方式去解析服务端响应的编码。
pageEncoding="utf-8"
1》JSP页面的中文采用UTF-8方式编码
2》JSP保存时采用UTF-8方式编码
3》指示浏览器以UTF-8方式解析内容
2>request.setCharacterEncoding("UTF-8");//设置web容器以何种编码去解析客户端的数据。
//未设置则默认用ISO8859-1去解析客户端的数据
四】include指令【静态包含】————(相当于把多个jsp文件合并成在一个jsp文件之中)
作用:在一个页面中包含多个JSP文件,与转发的include()方法类似。
格式:<%@ include file="relativeURL" %>
注意:
1)include指令包含多个JSP页面,最后JSP引擎只翻译总的JSP页面,即index.jsp页面。
2)被包含的JSP页面会原封不动的导入到总的JSP页面中,造成HTML结构非常混乱,有多个HTML等标签。。。
3)多个JSP最终会整合并翻译成一个Servlet,即index_jsp.java文件。
五】taglib指令(略)
四、JSP九大内置对象
1)request <---> HttpServletRequest
2)response <--->HttpServletResponse
3)session <---> HttpSession
1》访问JSP页面时,默认web服务器创建session
2》访问servlet时,必须通过request.getSession()才能创建session
3》在转发和重定向情况下,session不会销毁.原因:服务器和客户端并没有断开连接,重定向其实是再一次的请求。
4)application <---> ServletContext
code:
<%
application.setAttribute("name", "jack");
application.removeAttribute("name");
String name = (String)application.getAttribute("name");
response.getWriter().write("用户名:" + name);
%>
5)config <---> ServletConfig
取得JSP在web.xml文件中的映射信息
6)exception:该对象只能在含有<%@ page isErrorpage="true" %>的页面中容器才会创建,并可调用getMessage()等方法进行处理。
7)out:是一个JspWriter对象。即一个带有缓冲功能的printWriter对象.
即:【out】 <===>【response.getWriter()+缓冲】
code:
out.writer("先");
response.getWriter().writer("后");
//结果: 后 先
原因:【JspWriter与printWriter的区别】
JspWriter先将数据缓冲在自己的缓冲池,再输入到web容器的公用缓冲池;
而printWriter直接将数据缓冲到web容器的公用缓冲池中。
8)PageContext对象
------表示JSP运行过程中的环境对象
1》可以通过其方法取得其它的8个隐藏内置对象;
2》具有转发和包含的功能, 但没有重定向的功能!
3》其本身也是一个域对象
重点方法:
1》获得其它8大内置对象:
【对象名】 get【对象名】()
总结:
JSP中的四大域对象:【pageContext,request,session,application】
Servlet三大域对象: 【HttpServletRequest, HttpSession, HttpServletContext】

JSP(一)的更多相关文章
- myeclipse学习总结一(在MyEclipse中设置生成jsp页面时默认编码为utf-8编码)
1.每次我们在MyEclispe中创建Jsp页面,生成的Jsp页面的默认编码是"ISO-8859-1".在这种情况下,当我们在页面中编写的内容存在中文的时候,就无法进行保存.如下图 ...
- jsp前端实现分页代码
前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...
- jsp中出现onclick函数提示Cannot return from outside a function or method
在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...
- jsp页面无法识别el表达式的解决方案
今天在写一个springmvc的小demo时,碰到一个问题,在jsp页面中书写为${user.username}的表达式语言,在浏览器页面中仍然显示为${user.username},说明jsp根本不 ...
- 浅谈JSP中include指令与include动作标识的区别
JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...
- 浅谈JSP注释
HTML注释 JSP文件是由HTML尿急和嵌入的Java程序片段组成的,所以在HTML中的注释同样可以在JSP文件中使用.注释格式:<!--注释内容--> <!-- 欢迎提示信息! ...
- JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
- Nginx服务器之Nginx与tomcat结合访问jsp
本文使用linux centos系统 本文概述: JSP是一种动态网页技术标准.使用的方式是在HTML文件中插入程序段和JSP标记,而形成JSP文件.使用JSP开发WEB应用可以跨平台开发.但jsp需 ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- JSP页面跳转的几种实现方法
使用href超链接标记 客户端跳转 使用JavaScript 客户端跳转 提交表单 客户端跳转 使用response ...
随机推荐
- 为什么都反对XML而支持使用json呢?
一个使用上的因素:JSON的结构更容易映射至一般语言的数据结构. XML和JSON的主要组成成分: XML是element.attribute和element content. JSON是object ...
- android AudioRecorder简单心得
1.如何创建一个有效的AudioRecorder实例 Android各种设备的采样频率不同,输入的声道数也不同,如果采用固定的采样频率和声道数,那么得到的AudioRecorder不一定能够正常初始化 ...
- NOI2014 D2T3 购票 简单粗暴解法(凸包维护)
之前说过这题能用点分治(详见 http://www.cnblogs.com/jasonyu/p/noi2014.html),但其实还有更粗暴的解法. 要求出一个点的答案,我们需要知道树上一段路径的点形 ...
- Linux+eclipse+gdb调试postgresql源码
pg内核源码解析课上用的vs调试pg源码, VS用起来确实方便,但是配置调试环境着实有点麻烦.首先得装个windows系统,最好是xp,win7稍微麻烦点:最好使用vs05,08和10也可以,但是比0 ...
- android开发常用组件(库)推荐
版本兼容:官方 support 全家桶 网络请求:Android-Async-Http.Retrofit.OkHttp.Volley图片加载:Glide 和 Universal-Image-Loade ...
- ios 常用字符串NSString的操作
//将NSData转化为NSString NSString* str = [[NSString alloc] initWithData:response encoding:NSUTF8S ...
- 单源最短路径(dijkstra算法)php实现
做一个医学项目,当中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路例如以下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么( ...
- [置顶] ARM指令集和常用寄存器
1) ARM指令集 32位的 ARM指令和 16位 的Thumb指令 1,寄存器寻址 MOV R1, R2 //将寄存器R2的值传给寄存器R1 2,立即寻址 MOV R0, #0XFF00 //数据 ...
- 搭建Windows下Java Web开发环境
概要 1.SSH开发相关软件及开发包下载2.软件安装及相关设置3.最简单的Web程序 1.软件下载 在D盘建一个目录JavaTools,用来存放下载的软件和开发包.(本教程将使用D盘,你也可以使用 ...
- C# 还原SQL数据库(非存储过程方式)
Winform的代码,最好是在数据所在电脑上运行代码,不然会因为权限问题导致失败. 数据库备份: SqlConnection con = new SqlConnection("Data So ...