JSP总结(一)——基础(汇总)
前言:原本呢,是打算只写个JSP的内置对象总结,但是没想到这个家伙的JSP总结非常不错,我就拿来用了。
注:后缀为汇总的基本上是整理一些网上的。
借鉴地址:http://www.cnblogs.com/cyjch/archive/2012/03/28/2420798.html
杂言(了解下即可):
(一) JSP定义:
1) Java Server Page, Java EE 组件,本质上是 Servlet。
2) 运行在 Web Container.接收 Http Request,生成 Http Response(默认协议是 Http 请求和响应)
3) JSP 使得我们能够分离页面的静态 HTML 和动态部分——我们需要的技术。
4) 使页面可以混和html代码、Java代码以及JSP标签;允许访问组件。
(二) Servlet的缺陷(JSP出现的原因):
1) 写静态页面必须部署后才能看到效果,很难控制页面的外观。
2) 从技术角度来说Servlet是Java代码和HTML静态代码的混合代码。
3) 从市场竞争角度来说,微软推出了ASP产品。
(三) JSP的改进:
1) JSP是标签式的文本文件(区Servlet是Java文件)
2) JSP不需要编译(其实是由服务器监测JSP文件的变化,再将其翻译成 Servlet 代码)。服务器对其进行编译并在第一次请求时创建一个Servlet实例。所以,第一次访问JSP页面时会后延迟
3) JSP不用写配置文件
4) JSP以静态代码为主,Java代码为辅。Servlet反之。
5) 是J2EE蓝图的一部分(Servlet、JSP以及EJB是J2EE的三大组件)
6) JSP从本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补的关系。
7) JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。
8) JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应式的工作方式)往两个方向发展。
JSP基本语法:
一、 JSP的声明(statement)
用来定义在产生的类文件中的类的属性和方法(成员变量)。可声明类(即是内部类)。
由于servlet是工作在多线程环境下,所以尽量不要在service方法体外声明成员变量。
<%!.....%> //声明时要加"!",属于类成员,最先加载,可写于任何位置;不加则是脚本的局部变量,必须调用前写。
如:
<%!String hello="Hello, World!";%> //变量的声明
<%=hello%> //变量的调用
<%! private int counter=0; public int count(){ return ++counter;} %> //函数的声明
<h1><%=count()%></h1> //函数的调用
声明规则:
1) JSP中声明的变量和方法对应于Servlet中的实例方法和实例变量。这些将被同时请求该页面的所有用户所共享;
2) 在使用变量或方法前须先定义(不是说声明变量的位置在页面中要处于使用变量的前面,而是指变量不声明不能使用);
3) 声明的变量或方法的作用域为当前页面或包含的页面;
4) 语句间以分号分隔。
二、 JSP代码段(Scriptlet)
<% java代码 %>
是一段可以在处理请求时间执行的Java代码。可以产生输出,也可以是一些流程控制语句。
在代码段中定义的变量为service方法中的局部变量。
1. _jspService()中的局部代码:
<% System.out.println("Hi,I like JSP."); %> //在控制台打印出,网页上没显示 <% out.println("Hi,I like JSP."); %> //打印在网页上
<% Connection conn=DriverManager.getConnection();
Statement st=conn.createStatement();
String sql="select * from users";
ResultSet rs=st.executeQuery(sql);
//……
%>
问:能否在JSP脚本里定义方法?
答:不能! //脚本相当于方法,不能在方法里定义方法
<%!public void helloworld(){}%> //可以声明方法
<% public void helloworld(){}%> //编译出错;脚本不能定义方法
2. 比较:
<%! int i=100;%> //成员变量
<% int i=101;%> //_jspService()方法中的局部变量
<%=i%> //同一文件里,局部变量优先
3. 脚本小程序规则:
1) 你使用的脚本语言决定了脚本小程序的规则;
2) 语句间以分号分隔;
3) 可以使用默认的对象、import进的类、declaration声明的方法和对象以及useBean tag中声明的对象。
三、JSP表达式(expression)
<%=……%> // "="号
在JSP请求处理阶段计算他的值,表达式生成的代码是Service方法中的一个代码片断。
JSP对于声明的处理:1、计算表达式的值
2、将值转换成String
3、用out.println发送标签;把数据输出至页面的当前位置
<%="Hello,JSP world!"%> //out.println("Hello,JSP world");
<%=name%> //<%!String name="GiGi";%> out.println(name);
<%=new java.util.Date()%> //out.println(new java.util.Date());
表达式规则:
1) 你使用的脚本语言决定了脚本小程序的规则;
2) 执行的顺序为从左到右;
3) 分号不能用于表达式。
四、JSP指令(direction)
指令用于从JSP发送信息到容器上。用来设置全局变量,声明类,要实现的方法和输出内容等。
指令在JSP整个文件内有效。它为翻译阶段提供了全局信息。
<%@......%> // "@"符号
指令包括:page、include、taglib
1. page指令
import、session、errorPage、isThreadSafe
页面的语言、内容类型、字符集、页面编码
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
language:java唯一值,表示脚本中使用的编程语言
contentType:设置了内容的类型和静态页面的编码 (告诉浏览器以什么编码显示)
pageEncoding:页面本身的编码格式 (写页面时用的编码格式)
上面的代码等价于servlet里: response.setContentType("text/html; charset=gbk");
(1)import:导入其他的包和类; 其中,JSP默认导入的包是java.lang.*
<%@page import="java.util.Date"%> //具体的包和类
<%@page import="java.sql.*"%> //包下的所有类
<%@page import="java.util.*, java.io.*, java.net.*"%> //连写,逗号分隔
(2)Session:指示当前的jsp是否参与会话 (默认为true; 参与会话)
通过指令使当前页面与session不可会话: <%@page session="false"%>
session="true"时,可用内建对象session直接访问会话,例如:
<%
session.setAttribute("username","maxwell");
String name = (String)session.getAttribute("username");
%>
<%=name%>
(3)errorPage:
isErrorPage:Jsp页面中出现异常的处理方式
对于有可能出现异常的页面:
<%@page errorPage="error.jsp"%> //异常时会跳转到处理异常的页面;这页面自己写
在有可能异常的地方打印原因: throw new Exception("数据库连接出错");
对于处理异常的页面(error.jsp)里:
<%@page isErrorPage="true"%>,其中使用<%=exception.getMessage() %>把异常信息打印出来
(4)isThreadSafe——此属性已经不再使用(已废弃)
当前Jsp页面是否线程安全 default--->true
<%@page isThreadSafe="true"%> //普通的Servlet,可以并发处理用户请求
<%@page isThreadSafe="false"%> //相当于Servlet实现了SingleThreadModel
2. include指令
把目标页面的内容包含到当前页面,产生页面叠加以后的输出效果 //相当于将两个页面合并;编译时就包含进来
<%@include file="foot.jsp"%> //可插入任意位置
3. taglib指令
留在JSTL里讲解。
五、JSP中的注释
1. java格式注释
编译器会忽略掉此类注释中的内容(客户端的源码看不见)
<%-- JSP注释;可多行 --%>
<%// java 单行注释 %>
<%/* java multi lines comments */%>
<%/**java 特有的注释*/%>
2. html风格注释
编译器会执行此类注释中的代码(客户端的源码看得见)
<!-- html风格注释 --> //等价于out.println("<!-- html风格注释 -->")
这种注释方式不好的地方就是当页面注释信息太多的时候会增大服务器的负荷。
还有注释信息需要在网络上传输,从而降低效率;内部程序员的测试数据一般不能写在这种注释中,以免泄露。
JSP处理过程:
JSP源文件处理分成二个阶段:
1. JSP页面转换阶段:
页面被编译成一个Java类,所有的HTML标记和JSP标记都被转换创建一个Servlet。这时,脚本和表达式还没有被执行;
2. 请求处理阶段:
发生在服务器,将一个客户端请求指向JSP页面。
一个请求对象创建、解析以及提交给编译好的JSP对应的servlet。
当这个servlet处理请求的时候它执行先前在JSP中定义的处理脚本小程序和表达式。
使用脚本代码的缺点和指导方针
1. 缺点:
a. 过度使用脚本代码使用JSP页面混乱和难以维护;
b. 脚本代码降低JSP二个主要的优点:软件重用和代码分开
2. 指导方针:
只在组件功能无能为力或需要有限的脚本时使用。
JSP调用JavaBean
通过引入JavaBean,JSP才能较好的把页面展示与业务逻辑分离。
其中,业务逻辑放到后台的Java Bean中,减少JSP中的脚本代码,有利于程序的可维护性与可重用性。
(一) 定义Java Bean
形式:
<jsp:useBean id = "BeanName" class = "className" sope="范围域">
id ——声明bean对象的标识符,方便其他地方使用
class——bean对象的类型,注意要使用完全限定名
scope——java bean对象的共享范围(page、request、session、application)
page:当前页面范围(范围最小,生命周期最短)
request:同一个请求范围 (forward,include)
session:同一个会话(30分钟不使用,会自动结束)
application:同一个应用(范围最大,生命周期最长) ServletContext
例如:
SuperGirl <jsp:useBean id="girl" class="com.tarena.vo.SuperGirl" scope="session"/>
等价于:
<% SuperGirl girl=(SuperGirl)session.getAttribute("girl");
if(girl==null){
girl = new SuperGirl(); //对应 id 和 class
session.setAttribute("girl",girl); //对应 scope 的值
}
%>
可以用表达式获得bean的值:
<%=girl.getName();%>
(二) 对JavaBean的属性赋值
形式:
<jsp:setProperty name="JavaBean对象名" property="JavaBean属性名" value="属性值"/>
例子:
<jsp:setProperty name="girl" property="name" value="Lily"/>
等价于:
<% girl.setName("Lily");%>
可以嵌套JSP表达式:
<jsp:setProperty name="girl" property="name" value='<%=request.getParameter("name")%>'/>
Java Bean中的属性名与form中输入域的名字保持一致的话,可以使用通配符*,一次设置所有字段的值。
<jsp:setProperty name="" property="*"/>
(三) 获取JavaBean的属性值
形式:
<jsp:getProperty name="" property=""/>
name:标识具体的Bean对象,这与<jsp:useBean>标准动作中的id值相匹配
property:标识属性中的标识符。
JSP总结(一)——基础(汇总)的更多相关文章
- shell脚本语法基础汇总
shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...
- linux编程基础汇总贴
linux编程基础汇总贴http://newzol.cn/forum.php?mod=viewthread&tid=67&fromuid=3(出处: newzol) 1.管道 http ...
- Selenium基于Python web自动化基础一 -- 基础汇总及简单操作
Selenium是UI层WEB端的自动化测试框架,也是目前市面上比较流行的自动化测试框架. ui层自动化测试本质是什么?模拟用户的真实操作行为. 基础汇总: 导入所需要的模块 from seleniu ...
- 一、jsp和Servlet基础理论及jstl和EL表达式用法
1.题外话:使用JSP有近一年半的时间了,但是开发量不大.昨天部门突然让做个读取EXCLE文件,然后在前台页面进行展示.并通过点击查看按钮可以对每条明细记录进行跳转后进行详情查看,并按照页面原型进行页 ...
- Redis--狂神说Redis基础汇总(完结)
Redis--狂神说Redis基础汇总(完结) 2021.6.12-2021.6.14:端午学学玩玩弄完了Redis基础的汇总,越学越觉得自己知识量的匮乏. 参考链接:狂神说Java--Redis汇总 ...
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
pandas 对象拥有一些常用的数学和统计方法. 例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索 ...
- JSP网站开发基础总结《十二》
前两篇已经简单为大家介绍了一下,有关Filter接口的知识,本篇就让我们以一个登录小功能,来具体实现一下过滤器的作用,便于大家掌握.具体为大家介绍一下如何使用Filter对访问进行过滤,及如何防止中文 ...
- JSP网站开发基础总结《八》
JSP的学习总结到本篇已经八篇了,内容比较多,但都是实战,本篇最后为大家介绍一个小效果:百度分页.就是当我们遍历的数据对象较多时,这时我们就会看到了这个效果了,那他是如何实现的呢?下面我们就一起学习一 ...
- JSP网站开发基础总结《四》
经过前几篇的摸爬滚打,下面我们就开始我们真正的数据库操作了,本篇重点在于如何在网站端编写数据库操作语句,内容不多,就是我们常见的增删改查. 0.数据库对象创建: 在JAVASE基础知识总结时,就为大家 ...
随机推荐
- os模块 与 sys模块
os模块 os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工 ...
- ansible环境部署及常用模块总结 - 运维笔记
一. Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...
- mysqldump数据导出问题和客户端授权后连接失败问题
1,使用mysqldump时报错(1064),这个是因为mysqldump版本太低与当前数据库版本不一致导致的.mysqldump: Couldn't execute 'SET OPTION SQL_ ...
- MySQL针对Swap分区的运维注意点
Linux有很多很好的内存.IO调度机制,但是并不会适用于所有场景.对于运维人员来说,Linux比较让人头疼的一个地方是:它不会因为MySQL很重要就避免将分配给MySQL的地址空间映射到swap上. ...
- GCD实现同步方法
在iOS多线程中我们知道NSOperationQueue操作队列可以直接使用addDependency函数设置操作之间的依赖关系实现线程同步,还可以使用setMaxConcurrentOperatio ...
- uml 图学习记录
UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...
- ABP编译必须添加对程序集“netstandard, Version=2.0.0.0错误
当前使用ABP版本为:4.6.0 升级vs2017到15.4版本,升级framework到4.7版本 如果Core版本请升级到net core 2
- squid反向代理
反向代理的作用是就爱那个网站中的静态自原本地化.也就是将一部分本应该有原是服务器处理的请求交给 Squid 缓存服务处理 编辑 Squid 服务程序的配置文件*(正向代理与反向代理不能同时使用,) ...
- Expanded encryption and decryption signature algorithm SM2 & SM3
Expanded encryption and decryption signature algorithm supports multiple signature digest algorithms ...
- NodeJS简记
C:\Users\Administrator>node > .help .break Sometimes you get stuck, this gets you out .clear A ...