1、include指令:
该指令是文件加载指令,用于在JSP文件中插入一个文件,这个文件可以包含文本或代码。
<%@ include file="被包含文件的地址" %>
2、page指令:
用来定义JSP页面的全局属性,即用来指定所使用的脚本语言、导入指定的类及软件包等,会作用于整个JSP页面。
<%@ page 属性1=“属性值1” 属性2=“属性值2” %>
//如果为一个属性指定多个值,这些值之间用逗号分隔。(只能给import属性指定多个值)
pahe指令一共有13个属性:
1、contentType:指定JSP页面的编码方式和JSP页面相应的MIME类型。默认MIME类型为test/html,默认的字符集类型为charset=ISO-8859-1。
2、language:声明所使用脚本语言的种类。
3、pageEncodeing:指定页面编码格式。
4、isELIgnored:指定JSP文件是否支持EL表达式。
5、import:指定所导入的包。
6、extends:指定JSP页面产生的Servlet继承的父类。
7、session:指定JSP页面中使用Session对象的情况。
8、buffer:指定输出缓冲区的大小,默认值为8KB。
9、autoFlush:指定当前输出缓冲区即将溢出时,是否强制输出缓冲区内容。
10、isThreadSafe:指定JSP文件支持多线程的情况。
11、info:设置JSP页面的相关信息,即可以使用servlet.getServletInfo()方法获取到JSP页面中的文本信息。
12、isErrorPage:指定JSP文件是否进行错误异常处理。
13、ErrorPage:指定错误处理页面。当JSP页面运行出错时,会自动调用所指定的错误页面。
3、taglib指令:
该命令定义一个标签库,以及自定义标签的前缀。
1、out对象:
out.println();
out.newLine();//换行
out.getBufferSize()//获取当前缓冲区大小
out.getRemaining()//当前缓冲区剩余字节数目
2、request对象:
方法:
void setAttribute(String name,Object value)//将指定属性的值设置为value
Object getAttribute(String name)//获取指定的属性值。
String getParameter(String name)//获取请求参数名为name的参数值。
Enumeration getParameterNames()//获取所有请求参数的集合名字
String[] getparameterValues(String name)//获取name请求参数的参数值
void setCharacterEncoding(String encoding)//设定编码格式。
request.getMethod()//请求方法名
request.getRequestURI()//请求的资源
request.getProtocol()//请求使用的协议
request.getServerName()//请求的服务器IP
request.getServerPort()//请求的服务器端口
request.getRemtoeAddr()//客户端的IP地址
request.getRemoteHost()//客户端的主机名
3、response对象;
封装由JSP产生的相应,并返回客户端以响应请求。response对象包含了从JSP页面返回客户端的所有信息。
response对象经常用于添加Cookie、设置HTTP标题、发送HTTP重定向、设置响应内容的类型和状态,以及编码URL等任务
response.setHeader(String,String)//设置头信息
response.setIntHeader("Refresh",2);//刷新页面
response.sendRedirect(String URL);//跳转页面,重定向JSP文件
void addCookie(Cookie Cookie)//添加Cookie对象,用于在客户端保存特定信息。
eg:
Cookie mycoo=new Cookie("username","haha");
mycoo.setMaxAge(3600);
response.addCookie(mycoo);
void addHeader(String name,String value)//添加HTTP头信息,并且发送到客户端
void containsHeader(String name)//判断指定名字的HTTP文件头是否存在
void setContentType(String contentType)//设置MIME类型与编码方式
void sendError(int)//向客户端发送错误的状态码。
4、session对象:
用来记录每个客户端的访问状态
String getId()//返回session创建时由JSP容器所设定的唯一标识。
long getLastAccessedTime()//返回用户最后一次通过session发送请求的时间(单位毫秒)
int getMaxInactiveInterval()//返回session的实效时间。返回类型为long,常被转化为Date类型,
eg:Date ctime=new Date(session.getCreation Time())
boolean isNew()//判断是否为新的session,可用于判断是否为非法用户
void invalidate()//清空session
Object getAttribute(String name)//获取session范围内name属性的值
void setAttribute(String name,Object value)//设置session范围内name属性的值为value并储存到session中
void removeAttribute(String name)//删除session范围内name属性的值
5、application对象:
用于获取和设置Servlet的相关信息。他的生命周期是从服务器启动直到服务器关闭为止,即一旦创建了application对象,对象将会一中航存在,直到服务器关闭。
void setAttribute(String name,Object value)//将一个对象的值存放到application中,存放的方式采用键值对
Object getAttribute(String name)//根据属性名获取application中存放的值。
6、page对象:
代表JSP本身,只有在JSP页面内才是合法的,可以看做时this关键字的别名。
getClass()//返回当前Object的类
hashCode()//返回该Object的哈希代码
toString()//把该Object类转换成字符串
equals(Object o)//比较该对象和指定的对象是否相等
7、pageContext对象;
获取JSP页面的request、response、session、application、exception等对象。
forward(String url)//将页面转发到另一个页面
getAttribute(String name)//获取参数值
getAttributeNamesInScope(int scope)//获取某范围的参数名称的集合,返回职位Enumeration对象
getException()//返回exception对象
getRequest()//返回Request对象
getResponse()//返回Response对象
getSession()//返回session对象
8、config对象:
获取服务器配置信息。
getServletContext()//获取Serlet上下文
getServletName()//获取Servlet服务器名
getInitParameter(String name)//获取服务器中name参数的初始值
getInitParameterNames()//获取服务器所有初始参数名称,返回值为Enumeration对象
9、exception对象:
用于处理JSP文件执行时发生的所有错误和异常
getMessage()//返回exception对象的异常信息字符串
getLocalizedmessage()//返回本地化的异常错误
toString()//返回关于异常错误的简单信息描述
fillInStackTrace()//重写异常错误的栈的执行轨迹
10、页面跳转
1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向 前后页面不是一个request .
2.RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。
3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;
而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。
因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
1、包含标签
此标签提供了一种在JSP中包含页面的方式。她既可以包含静态文件,也可以包含动态文件。
eg:
//其中flush为清空缓冲区
2、转发标签
用于页面重定向的动作标签,作用为停止当前JSP页面的执行,二将客户端请求转交给另一个JSP页面。
转发与重定向的区别:转发实在服务端进行的,不会引起客户端的二次请求,因此浏览器的地址栏不会发生任何变化,所以效率高于重定向。
eg:
3、参数标签
提供参数的附属动作标签,以“名一值”的形式为其他动作标签提供附加信息,一般与标签include,forward、plugin联合使用
eg
注:当jsp:param与jsp:include动作标签一起使用时,jsp:param提供的参数值可以传递到jsp:include加载的文件中去
当与动作标签一起使用时,可以实现在跳转页面的同时,向转向的页面传递参数的功能。
Sun公司倡导是:用HTML完成JSP页面的静态部分,用Javabeans完成动态部分,从而真正意义上的静态和动态分隔。
与JavaBean相关的动作标签包括:、、
4、创建Bean标签jsp:useBean
用来装载一个将在JSP页面中使用的JavaBean。该功能充分发挥了Java组件重用的优势,也提高了JSP使用的方便性。
eg:
其中:
id:JavaBean的实例名。
class:JavaBean的权限定类名。
scope:引用的JavaBean实例的作用域。默认为当前页面
该属性包含4个值:page、request、page session和application。
其中:
page:JavaBean实例在当前页面有效
request:JavaBean实例在本次请求有效;
page session:javaBean实例在本次session内有效;
application:JavaBean实例在应用内一直有效。
5、设置属性值标签jsp:setProperty
获取到Bean实例后,便可以利用jsp:setProperty动作标签来设置或修改Bean中的属性值。
eg:
其中:
name:要进行设置的JavaBean的实例名
property:需要设置的JavaBean实例中的属性名
value:要为property中指定的属性设置其属性值
6、获取属性值标签jsp:getProperty
用来提取指定Bean属性的值,并将其转换成字符串,然后输出。
eg:
其中:
name:需要输出的JavaBean的实例名
property:需要输出的JavaBean实例中的属性名
1、JavaBean是一种特殊的java类,即有默认构造方法----只有get和set方法的Java类对象
具有以下特点:
1、JavaBean包含一个无参的构造方法。
2、JavaBean的类访问权限必须是public的。
3、JavaBean中属性的获取和设置需要使用getXxx()方法和setXxx()方法。对于Boolean类型的成员来说,可以使用isXxx()方法
2、设置JavaBean的属性
1.
其中,property="*"表示从request对象中将所有与JavaBean属性名字相同的请求参数传递给相应属性的setter方法;
2.
表示向JavaBean实例firstBean的属性id中传入指定的值。其中value用来指定传入Bean中属性的值
3.
将request对象中的参数id传入到JavaBean实例fristBean中
4.
将request对象中的参数personid传入到JavaBean实例fristBean的属性id中。其中param用于指定使用哪个请求参数来作为Bean属性的值。
1、servlet配置与Servlet映射:
(1)采用注解配置:
@WebServlet("/FristServlet")
(2)web.xml文件中配置
<--注册Servlet-->
//Servlet描述信息
servlet学习
//Servlet的名称
fristservlet
//Servlet类的完整类名
com.study.fristservlet
//当web服务器启动时创建
1
<--Servlet映射-->
//Servlet名称
fristservlet
//访问URL地址
/haha
//缺省Servlet,当系统没有此网站时跳转此页面
//Servlet名称
fristservlet
//访问URL地址
/
2、eg
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class fristservlet
* servlet实现类fristservlet
*/
@WebServlet("/fristservlet")
public class fristservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
* 构造方法
*/
public fristservlet() {
super();
// TODO Auto-generated constructor stub
//业务处理代码
}
/**
* @see Servlet#init(ServletConfig)
* 初始化方法
*/
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
}
/**
* @see Servlet#destroy()
* 销毁代码
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
* 处理http GET请求
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getOutputStream().write("GET请求!!".getBytes());
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
*处理HTTP POST请求
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getOutputStream().write("POST请求!!".getBytes());
doGet(request, response);
}
/**
* @see HttpServlet#doPut(HttpServletRequest, HttpServletResponse)
* 处理HTTP PUT请求
*/
protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doDelete(HttpServletRequest, HttpServletResponse)
* 处理HTTP DELETE请求
*/
protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doHead(HttpServletRequest, HttpServletResponse)
* 处理HTTP head请求
*/
protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doOptions(HttpServletRequest, HttpServletResponse)
* 处理HTTp OPTIONS请求
*/
protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doTrace(HttpServletRequest, HttpServletResponse)
* 处理HTTP TRACE请求
*/
protected void doTrace(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
[x]
3、ServletConfig对象:
用途:
数据库配置,编码格式配置等
在web.xml(Servlet)配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数
data
xxx
在Servlet中获取方法:
//得到指定的:
String value=this.getServletConfig().getInitParameter("data");
System.out.println("value")
//得到所有的
Enumeration e=this.getServletConfig().getInitParameterNames();
while(e.hasMoreElements()){
String name=(String) e.nextElement();
String value=this.getServletConfig().getInitParameter(name);
System.out.print(name+"="+value);
}
4、ServletContext对象:
当WEB容器启动时,他会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前WEB应用
ServletConfig对象中维护了ServletContext对象的引用
可以通过ServletConfig.getServletContext方法获得ServletContext对象
获取方法:
ServletContext context=this.getServletConfig().getServletContext();
由于一个WEB应用中的所有Servlet同享用一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享。
ServletContext对象通常也被称之为context域对象。
存取方法:
context.setAttribute("data", "haha");
context.getAttribute("data");
用途:聊天室
页面的转发:
无参:
RequestDispatcher rdDispatcher=this.getServletContext().getRequestDispatcher("/index1.jsp");
rdDispatcher.forward(request, response);
有参数:
5、properties:资源文件
读取.properties文件内容
url=jdbc:mysql://localhost:3306/test
username=root
password=root
方法1:
InputStream inputStream= this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties=new Properties();
properties.load(inputStream);
String url= properties.getProperty("url");
String username=properties.getProperty("username");
String password=properties.getProperty("password");
System.out.println(url+username+password);
方法2:通过servletContext的getRealPath方法的得到资源的绝对路径,再通过传统流读取资源文件
多用于文件下载
String path=this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
FileInputStream in=new FileInputStream(path);
Properties properties=new Properties();
properties.load(inputStream);
String url= properties.getProperty("url");
String username=properties.getProperty("username");
String password=properties.getProperty("password");
System.out.println(url+username+password);
方法3、当读取资源文件的程序不是servlet,需要用类装载器去读取
//sevlet调用其他程序,在其他程序中如何读取资源文件
注意::
资源文件不能太大
private static Properties dbconfig=new Properties();
static {
InputStream in=UserDao.class.getResourceAsStream("db.properties");
try {
dbconfig.load(in);
} catch (IOException e) {
// TODO Auto-generated catch block
throw new ExceptionInInitializerError();
}
}
//用静态代码块写,页面调用一次
方法4、当需要每次刷新修改页面
通过类装载的方式得到资源位置,再通过传统方式读取资源文件的数据,这样可以读取到更新后的数据
String path2=UserDao.class.getClassLoader().getResource("db.properties").getPath();
try {
FileInputStream in=new FileInputStream(path);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
6、Servlet的常用类和接口:
一、Servlet接口:
void init(ServletConfig config)//初始化Servlet
void service(ServletRequest req,ServletResponse res)//该方法用于相应客户端的请求。
void destory()//清理方法,用于释放资源
java.lang.String getServletInfo()//获取Servlet开发者定义的信息;
ServletConfig getServletConfig()//获取Servlet的相关配置信息,该方法会返回指向ServletConfig的引用
二、HttpServlet抽象类:
void doPost(HttpServletRequest request,HttpServletResponsen response)
void doGET(HttpServletRequest request,HttpServletResponsen response)
三、GenericServlet抽象类:
四、ServletRequest和ServletResponse接口
当收到客户请求时,Servlet容器会创建一个ServletRequest对象,用来封装请求数据;
创建一个ServletResponse对象,用来封装相应数据。
这两个对象被作为servic()方法的参数传递Servlet;
Servlet利用ServletRequest对象获取客户端的请求数据;
利用ServletResponse对象发送最后的相应数据。
ServletRequest和ServletResponse接口在javax.servlet包中定义;
ServletRequest包含的部分方法:
Object getAttribute(String name)//返回属性名为name的属性值。不存在返回null
void setAttribute(String name,Object obj)//在请求中保存属性名为name的属性。
String getContentType()//返回请求正文的MIME类型。若类型未知的话,返回null
ServletInputStream getIntputStream()
//返回一个输入流。使用该输入流可以以二进制的方式来读取请求正文。
String getParameter(String name)
//返回请求中name参数的值。如果name参数包含多个值,则返回第一个。
ServletResponse包含的主要方法:
ServletOutputStream getOutputStream()//返回一个ServletOutputStream对象,用来发送对客户端的响应。
void setContentLength(int length)//设置响应数据的长度
void setBufferSize(int size)//设置发送到客户端的数据缓冲区的大小。
PrintWriter getWriter()//返回PrintWriter类的对象,将字符文本发送到客户端。
五、HTTPServletRequest接口:
ServletRequest接口表示Servlet的请求,而HTTPServletRequest接口是他的子接口。
HttpServletRequest接口代表了客户端的HTTP请求。
Cookie[] getCookies()
//返回有服务器存放在客户端的Cookie数组,常常使用Cookie来区分不同的客户。
HttpSession getSession()
//获取当前的HTTP会话对象。
HTTPSession getSession(boolean create)
//获取当前的HTTP会话对象。不存在自动创建新回话
六、HttpServletResponse接口:
ServletResponse接口表示Servlet的响应,而HttpServletResponse接口是它的子接口。
HTTPServletResponse接口表示对客户端的HTTP响应,
public void addCookie (Cookie cookie)
//向响应的头部加入一个Cookie
void setStatus(int status)
//将响应状态码设定为指定值,只用于不产生错误的响应
七、HTTPSession接口:
由Servlet容器负责创建,可以存放客户状态信息。
String getId()//获取Session的ID
Object getAttribute(String name)
//根据name参数返回保存在HTTPSession对象中的属性值
Enumeration getAttributeNames()
//返回当前HTTPSession对象中所有的属性名
isNew()//判断该Session是否属于新创建。如果是新创建的返回true
void setAttribute(String name,Object value)
//将名一值属性保存在HTTPSession对象中
void invalidate()
//使当前的Session实效,同时Servlet容器会释放掉HTTPSession对象占用的资源。
六、JSP文件操作
1、获取文件信息:
File类:
File(String filename)
File(String directoryPath,String filename);
File(File f,String filename)
***filename是文件名字;
***directoryPath是文件路径
***f是指定成一个目录的文件
方法:
String getName()//获取文件的名字。
boolean canRead()//判断文件是否可读;
boolean canWrite()//判断文件是否可被写入;
boolean exits()//判断文件是否存在
long length()//获取文件的长度
2、创建、删除web服务目录
(1)创建目录
boolean file.mkdir()//创建目录
(2)列出目录下的所有文件
如果File对象是一个目录
String[] list()//用字符串形式返回目录下的全部文件
File[] listFiles()//用File对象形式返回目录下的全部文件
(3)列出指定类型的文件
String[] list(FilenameFilter obj);//字符串形式返回目录下指定类型文件
FIle[] listFiles(FilenameFilter obj)
其中,FilenameFilter是一个接口,该接口有一个方法
boolean accpt(File dir,String name)
当向list方法传递一个实现该接口的对象时,list方法在列出文件后,
将调用accept方法检查文件是否符合accept方法指定的目录和文件名字要求
3、删除文件和目录
boolean delete()//删除指定文件或目录。
1、API:
(1)Connection接口:
用于连接特定数据库的连接会话,值有获得特定数据库的连接对象,才能访问该数据库,操作其中的数据表、视图和存储过程等
(2)DriverManager类:
主要作用于用户及驱动之间。它是JDBC中的管理层
通过它可以管理数据库厂商提供的驱动程序
并建立应用程序与数据库之间的连接
(3)Statement接口:
Statement接口封装了执行SQL啊啊语句和获取查询接口的基本方法。
(4)PreparedStatement接口:
用于将程序中的变量做查询条件的参数等。继承Statement接口
(5)ResuletSet接口:
封装了数据查询的结果集。
2、 增删改eg:
try {
//一、加载Mysql驱动程序
Class.forName("com.mysql.jdbc.Driver");
//二、定义要连接数据库的地址URL
String mysqlURL="jdbc:mysql://localhost:3306/jsp_db";
//三、调用DriverManage对象的getConnection()方法
Connection conn=(Connection) DriverManager.getConnection(mysqlURL,"root","root");
//四、创建语句对象
//(1)使用Connection接口的CreateStatement方法创建了一个Statement语句对象。
//用于传递不带参数的SQL语句给DBMS数据库管理系统来执行
Statement stmt=(Statement) conn.createStatement();
//(2)使用Connection接口的PrepareStatement方法创建一个PrepareStatement对象
//该对象用于传送带有一个或多个输入参数的SQL语句
PreparedStatement psm=(PreparedStatement) conn.prepareStatement("insert into tbl_user(name,password,email) values('haha','hehe','xixi')");
//(3)使用Connection接口的PrepareCall方法创建一个CallableStatement语句对象。
//用于调用储存过程
//CallableStatement csm=(CallableStatement)conn.prepareCall("{call validate(?,?)}");
//五、执行语句
//调用Statement接口的executeQuery、executeUpdate及execute三个方法执行SQL语句。
//(1)execute方法用于执行select查询语句,返回单个结果集,保存在ResuletSet对象中
String sql="select * from tbl_user";``
ResultSet re=stmt.executeQuery(sql);
//(2)executeUpdate方法用于执行SQL的INSERT、UPDATE和DELETE等DML
//此时返回SQL语句执行时操作的数据表中受影响的行数,返回值是一个整数
//executeUpdate方法还可以用于执行SQL的CREATE TABLE、DROP TABLE等DDL(Data Definition Language)
//数据库定义语言语句。此时返回值为0
String sql1="DELETE FROM tbl_user WHERE id='2'";
int n=stmt.executeUpdate(sql1);
System.out.println(n);
while(re.next()) {
System.out.println(re.getString("name"));
}
} catch (Exception e) {
// TODO: handle exception
}finally{
re.close();
stmt.close();
conn.close();
}
3、批量操作
将批量的SQL语句一次性发送到数据库中进行执行,从而解决多次与数据库连接所产生的速度瓶颈··
eg:
java.sql.Connection conn=null;
java.sql.PreparedStatement ps=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root","root");
String sql="insert into tbl_user(id,name,password,email) value(?,?,?,?)";
ps=(PreparedStatement)conn.prepareStatement(sql);
for(int i=0;i<10;i++) {
ps.setString(1,"学生"+i);
ps.setString(2, "密码"+i);
ps.setString(3, "邮箱"+i);
ps.addBatch();
}
int[] rows=ps.executeBatch();
System.out.println(rows.length);
} catch (Exception e) {
System.out.println(e);
// TODO: handle exception
}finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
1、EL的基本语法:
"${"开头,"}"结尾,中间为合法的表达式
${expression}
expressin:用于指定要输出的内容,可以是字符串,
也可以是有EL运算符组成的表达式。
eg:
<%
session.setAttribute("name", "haha");
%>
${name}
${"haha"}
EL的特点:
(1)EL可以与JSTL结合使用,也可以与JavaScript语句结合使用。
(2)EL中会自动进行类型转换。
(3)EL不仅可以访问一定变量,而且还可以访问JavaBean中的属性以及
嵌套属性和集合对象。
(4)在EL中可以执行算数运算,逻辑运算,关系运算和条件运算等。
(5)在EL中可以获得命名空间(PageContext对象)
(6)在使用EL进行除法运算时,如果0作为除数,则返回无穷大Infinity
(7)在EL中可以访问JSP的作用域(request,session,application,page)
(8)扩展函数可以与Java类的静态方法进行映射。
2、与低版本的环境箭筒-----禁用EL
安装的web服务器能够支持Servlet2.4/JSP2.0可以使用EL
1.使用斜杠"\"符号
\${expression}
2.使用page指令
<%@ page isELIgnored="boolean"%>//是否禁用
3.在web.xml文件中配置元素
*.jsp
true
3、EL保留关键字:
and,eq,gt,true,instanceof,div,or,ne,le,False,empty,mod,not,It,ge,null
4、通过EL访问数据:
(1)通过EL提供的"[]"和"."运算符可以访问数据。通常情况下,这两个是等价的,可以相互替换
eg:
${person.name}或者${person[name]}
注意:
当对象的属性名中包括一些特殊的符号(.或者-)的时候
只能用${person[name]};
(2)数组元素的获取:
应用"[]"可以获取数组的指定元素,但是"."运算符则不能。
eg:
获取request范围中的数组arrBook中的第一个元素:
${arrBook[0]}
eg:
<%
String[] arr={"123","456","789"};
//定义一位数组
request.setAttribute("book", arr);
//将数组保存到request对象中
%>
<%
String[] arr2=(String[])request.getAttribute("book");
//获取保存到request范围内的变量
for(int i=0;i
${I}:${book[I]}
//输出第n个元素
<%
}
%>
必须将循环变量i保存到request范围内的变量中,否则将不能正确访问数组
(3)List集合元素的获取
应用"[]"运算符可以获取List集合中的指定元素,但是"."运算符则不能
eg:
向session域中保存一个包含3个元素的List集合对象,并应用El输出该集合的全部元素
<%
List list=new ArrayList();
list.add("相框");
list.add("笔筒");
list.add("鼠标垫");
request.setAttribute("goodsList",list);
%>
<%
List list1=(List)request.getAttribute("goodsList");
for(int i=0;i
${I}:${goodsList[I]}
<%} %>
5、在EL中判断对象是否为空
${empty user}
空的话返回true
6、在EL中进行逻辑关系判断
(1)、关系运算符:
==或eq; !=或ne; <或lt; >或gt; <=或le; >=或ge
(2)、逻辑运算符
&&或and; ||或and; !或not;
7、在EL中进行条件运算:
格式:
${条件表达式?表达式1:表达式2}
说明:
条件表达式:用于指定一个条件表达式,该表达式的值为Boolean型。可以由关系运算符、逻辑运算符和empty运算符组成。
表达式1:用于指定当条件表达式为true时,返回的值;
表达式2:用于指定当条件表达式的值为false时,返回的值;
8、EL的隐含对象:
为了能够获得Web应用程序中的相关数据
一、页面上下文对象:
页面上下文对象为pageContext,用于访问JSP内置对象。
1、访问request对象:
通过pageContext获取JSP内置对象中的request对象:
${pageContext.request}//获取request对象后,可以通过该对象获取与客户端相关的消息
。
2、访问response对象:
${pageContext.response}//获取响应相关信息
3、访问out对象:
${pageContext.out}//获取与输出相关的信息
4、访问session对象:
${pageContext.session}//获取JSP内置对象中的session对象相关的消息
5、访问exception对象
${pageContext.exception}//获取JSP页面的异常信息
6、访问page对象:
${pageContext.page.class}//获取当前页面的类文件
7、访问ServletContext对象:
${pageContext.servletContext}//获取Servlet上下文信息
二、访问作用域范围的隐含对象:
1、pageScope隐含对象:
用于返回包含page(页面)范围内的属性值的集合,返回值为java.util.Map对象
eg:
用户名为:${pageScope.person.name}
2、requestScope隐含对象:
返回包含request请求范围内的属性值集合,返回值为java.util.Map;
eg:
<%request.setAttribute("userName","haha")%>
${requestScope.userName}
3、sessionScope隐含对象:
返回包含session会话范围内的属性值的集合,返回值为java.util.Map;
eg:
<%session.setAttribute("userName","haha")%>
${requestScope.userName}
4、applicationScope隐含对象:
用于返回包含application范围内的属性值的集合
eg:
<%application.setAttribute("message","haha")%>
${applicationScope.message}
三、访问环境信息的隐含对象:
1、param对象:
用于获取请求参数的值,应用在参数值只有一个的情况下。返回的结果为字符串
eg:
${param.name1}
2、paramValues对象:
请求参数名对应多个值时,用此对象获取请求参数的值。返回结果为数组
eg:
${paramValues.affect[0]}
3、header和headerValue对象
用于获取HTTP请求的一个具体的header的值,
当一个header用于多个不同的值的时候用headerValues对象
eg:
${header.connection}或${headerValues["connection"]}
4、initParam对象:
用于获取Web应用初始化参数的值。
eg:
author
mr
${initParam.author}
5、cookie对象:
用来获取coolie对象,但是如果获取cookie中的值,需要使用cookie对象中value属性:
<%Cookie cookie =new Cookie("user","mrbccd");
responser.addCookie(cookie);
%>
${cookie.user.value}
9、定义和使用El的函数:
(1)编写一个Java类,并在该类中编写公用的静态方法,用于实现自定义EL函数的具体功能。
(2)编写标签库描述文件,对函数进行声明。
该文件的扩展名为.tld,被保存到Web应用的WEB-INF文件夹下;
(3)在JSP页面中引用标签库,并调用定义的EL函数,实现相应的功能
.tld文件创建方法:
(1)New ---->other........
(2).输入xml ----> XML File ----> 将默认的NewFile.xml更改为 xxx.tld---->Next
(3)Create XML file from a DTD file ----> Next
(4)Select XML Catalog entry
(5)选择-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN----->Next
1、标签库:
(1)核心标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
用于完成JSP页面的常用功能:
其中:
表达式标签:、、和
URL标签:、、和
流程控制标签:、和
循环标签包括:、
:将表达式的值输出到JSP页面中,相当于JSP<%=表达式%>
:在指定范围内定义变量,或为指定的对象设置属性值
:从指定的JSP范围中移除指定的变量
:捕获程序中出现的异常,相当于JAVA语言中的try...catch
:导入站内或其他网站的静态和动态文件到Web页面中。
:将客户端发出的request请求重定向到其他URL服务端
:使用正确的URl重写规则构造的一个URl
:为其他标签提供参数信息,通常与其他标签结合使用。
:根据不同的条件去处理不同的业务,和java中的if语句类似,但是没有else
:相当于switch
根据循环条件,遍历数组和集合类中的所有或部分数据
迭代字符串中由分隔符分隔的各成员
(2)格式标签库:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
用于处理和解决国际化相关的问题。
(3)Sql标签库
<%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql"%>
提供了基本的访问关系型数据的能力,可以简化对数据库访问。
(4)XML标签库
<%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql"%>
可以处理和生成XML的标记,可以方便的开发基于xml的Web应用
(5)函数标签库
<%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql"%>
用于完成分解字符串,连接字符串,返回子串,确定字符串是否包含特点的子串等功能。
2、配置JSTL:
将javax.servlet.jsp.jstl-api-1.2.1.jar和javax.servlet.jsp.jstl-1.2.1.jar;复制到WEB-INF\lib路径
3、表达式标签:
(1)输出标签:
语法1、
语法2、
defaultValue
解释:
value:
用于指定将要输出的变量或表达式。为Object,可以使用EL
escapeXml
可选属性,用于指定是否转换特殊字符。器属性值为true或false,
默认true,表示转换,即将HTML标签转换为转义字符,在页面中显示出了HTML标签;
如果是false,则将其中的html、xml解析出来。
---------------------------------------------------------
字符 字符实体代码 | 字符 字符实体代码
< < | > >
, ' | " "
& &
default属性:
用于指定当value属性值等于null时,将要显示的默认值。如果没有指定该属性,将输出空的字符串
(2)变量设置标签
语法1:
在scope指定的范围内将变量值储存到变量中。
语法2:
语法3:
将变量值储存在target属性指定的目标对象的propName属性中。
语法4:
将标签体储存到target属性指定的目标对象的propName属性中。
标签体
解释:
----------------------------------------------------------------
var:用于指定变量名。通过该标签定义的变量名,可以通过EL指定为的value属性的值
value:用于指定变量值,可以使用EL
scope:用于指定变量的作用域,默认值为page。可选值包括page、request、session、application
target:用于指定储存变量值或者标签体的目标对象,可以是JavaBean或Map集合对象
property:用于指定目标对象储存数据的属性名
eg:
wgh
(3)变量移除标签
解释:
var:用于指定要移除的变量名。
scope属性:用于指定变量的有效范围,可选值:page、request、session、application。
(4)捕获异常标签:
...//可能存在异常的代码
解释:
var属性:可选属性,用于指定储存异常信息的变量。
(5)导入标签
语法1:
标签体
语法2:
标签体
解释:
--------------------------------------------------------------------
url:用于指定被导入的文件资源的URL地址。
context: 上下文路径,用于访问同一个服务器的其他Web应用,其值必须"/"开头
var:用于指定变量名称。String类型
scope:用于指定变量的存在范围,默认值为page,可选值为page、request、session和application
varReader:用于指定一个变量名,该变量用于以Reader类型储存被包含的文件内容
charEncoding:用于指定被导入文件的编码格式
标签体:可选,如果需要为导入的文件传递参数,则可以在标签体的位置通过标签设置参数
eg:
1、
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2、${param.typeList}
(6)动态生成URL标签
语法1:
语法2:
...
//可以有多个
解释:
value:用于指定将要处理的URL地址,可以使用EL
context:上下文路径,用于访问同一个服务器的其他Web工程,其值必须以"/"开头;
var:属性:用于指定变量名称,该变量用于保存新生成的URL地址
scope属性:用于指定变量的存在范围。
(7)、重定向标签
语法1、该语法格式没有标签体,并且不添加传递到目标路径的参数信息。
语法2、该语法格式向客户请求重定向到目标路径,并且在标签体重使用标签传递其他参数
...
说明:
url:必选属性,用于指定待定向资源的URL,可以使用EL。
context属性:用于在使用相对路径访问外部context资源时,指定资源的名字
(8)传递参数标签
说明:
url:用于指定参数名,可以引用EL
value:用于指定参数值,可以引用EL。
(9)条件判断标签
语法1、
语法2、
标签体
解释:
test:必选属性,用于指定条件表达式,可以使用EL
var:可选属性,用于指定变量名,该变量用于保存test属性的判断结果。
scope:用于指定变量的有效范围,默认为page。可选值有page、request、session和application
(10)条件选择标签
标签体 //由标签和标签组成
(11)条件测试标签
标签体
(12)其他条件标签
标签体
(13)循环标签
语法1:集合成员迭代
标签体
语法2:数字索引迭代
标签体
解释:
item:用于指定被循环遍历的对象,多用于数组和集合类。该属性的属性值可以是数组、集合类、字符串和枚举类型,并且可以通过 EL进行指定
var:用于指定循环体的变量名,该变量用于储存items指定的对象的成员
begin:用于指定循环的其实为止,如果没有指定,则从集合的第一个值开始迭代。可以使用EL
end:用于指定循环的终止位置:如果没有指定,则一直迭代到集合的最后一位。可以使用EL
step:用于指定循环的步长。可以使用EL
varStatus:用于指定循环的状态变量,该属性还有4个状态属性
标签体:可以是JSP页面可以显示的任何元素
--------------------------------------------------------------------
varStatas属性:
index int 当前循环的索引值,从0开始
count int 当前痪的循环技术,从1开始
frist boolean 是否为第一次循环
last boolean 是否为最后一次循环
(14)迭代标签
标签体
------------------------------------------------------------------------------
items:用于指定要迭代的String对象,该字符串通常由指定的分隔符分隔
delims:用于指定分隔字符串的分隔符,可以同时又多个分隔符
var:用于指定变量名,该变量中保存了分隔后的字符串
begin:用于指定迭代开始的位置,引索引从0开始
end:用于值定迭代的结束位置
step:用于指定迭代的步长,默认步长为1
varStatus:用于指定循环的状态变量,同标签一样
标签体:可以是JSP页面可以显示的任何元素