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页面的相关信息,即可以使用ServletInfo()方法获取到JSP页面中的文本信息。12、isErrorPage:指定JSP文件是否进行错误异常处理。13、ErrorPage:指定错误处理页面。当JSP页面运行出错时,会自动调用所指定的错误页面。
3、taglib指令:
该命令定义一个标签库,以及自定义标签的前缀。
1、out对象:out.println();wLine();//换行BufferSize()//获取当前缓冲区大小Remaining()//当前缓冲区剩余字节数目
2、request对象:方法:void setAttribute(String name,Object value)//将指定属性的值设置为valueObject getAttribute(String name)//获取指定的属性值。String getParameter(String name)//获取请求参数名为name的参数值。Enumeration getParameterNames()//获取所有请求参数的集合名字String[] getparameterValues(String name)//获取name请求参数的参数值void setCharacterEncoding(String encoding)//设定编码格式。Method()//请求方法名RequestURI()//请求的资源Protocol()//请求使用的协议ServerName()//请求的服务器ServerPort()//请求的服务器端口RemtoeAddr()//客户端的IP地址RemoteHost()//客户端的主机名
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 Creation Time())boolean isNew()//判断是否为新的session,可用于判断是否为非法用户void invalidate()//清空sessionObject 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、页面跳转RequestDispatcher()是请求转发,前后页面共享一个request ;response.sendRedirect()是重新定向 前后页面不是一个request .2.RequestDispatcher.forward()是在服务器端运行;HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.所以RequestDispatcher.forward()对于浏览器来说是“透明的”;而HttpServletResponse.sendRedirect()则不是。RequestDispatcher(String url)中的url只能使用绝对路径;而RequestDispatcher(String url)中的url可以使用相对路径。因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
1、包含标签<jsp:include>此标签提供了一种在JSP中包含页面的方式。她既可以包含静态文件,也可以包含动态文件。eg:<jsp:include page="../register.jsp" flush="true"></jsp:include>//其中flush为清空缓冲区2、转发标签<jsp:forward>用于页面重定向的动作标签,作用为停止当前JSP页面的执行,二将客户端请求转交给另一个JSP页面。转发与重定向的区别:转发实在服务端进行的,不会引起客户端的二次请求,因此浏览器的地址栏不会发生任何变化,所以效率高于重定向。eg:<jsp:forward page="转发的URL地址"/>
3、参数标签<jsp:param>提供参数的附属动作标签,以“名一值”的形式为其他动作标签提供附加信息,一般与标签include,forward、plugin联合使用eg<jsp:param name="参数名称" value="指定给param的参数值">
注:当jsp:param与jsp:include动作标签一起使用时,jsp:param提供的参数值可以传递到jsp:include加载的文件中去
当<jsp:param>与<jsp:forward>动作标签一起使用时,可以实现在跳转页面的同时,向转向的页面传递参数的功能。
Sun公司倡导是:用HTML完成JSP页面的静态部分,用Javabeans完成动态部分,从而真正意义上的静态和动态分隔。
与JavaBean相关的动作标签包括:<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>
4、创建Bean标签jsp:useBean
用来装载一个将在JSP页面中使用的JavaBean。该功能充分发挥了Java组件重用的优势,也提高了JSP使用的方便性。
eg:<jsp:useBean id=“beanInstanceName” class=“classname” scope=“page|request|session|application”/>
其中: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:<jsp:setProperty name=“beanInstanceName” property=“propertyName” value=“value”>
其中:name:要进行设置的JavaBean的实例名property:需要设置的JavaBean实例中的属性名value:要为property中指定的属性设置其属性值
6、获取属性值标签jsp:getProperty
用来提取指定Bean属性的值,并将其转换成字符串,然后输出。
eg:<jsp:getPrpperty name=“beanInstanceName” property=“propertyName”>
其中:name:需要输出的JavaBean的实例名property:需要输出的JavaBean实例中的属性名
1、JavaBean是一种特殊的java类,即有默认构造方法----只有get和set方法的Java类对象
具有以下特点:1、JavaBean包含一个无参的构造方法。2、JavaBean的类访问权限必须是public的。3、JavaBean中属性的获取和设置需要使用getXxx()方法和setXxx()方法。对于Boolean类型的成员来说,可以使用isXxx()方法2、设置JavaBean的属性1.<jsp:setProperty name="firstBean" property="*"> 其中,property="*"表示从request对象中将所有与JavaBean属性名字相同的请求参数传递给相应属性的setter方法;2.<jsp:setProperty name="firstBean" property="id" value="123">表示向JavaBean实例firstBean的属性id中传入指定的值。其中value用来指定传入Bean中属性的值3.<jsp:setProperty name="firstBean" property="id">将request对象中的参数id传入到JavaBean实例fristBean中4.<jsp:setPorperty name="fristBean" param="personid">将request对象中的参数personid传入到JavaBean实例fristBean的属性id中。其中param用于指定使用哪个请求参数来作为Bean属性的值。
1、servlet配置与Servlet映射:(1)采用注解配置:@WebServlet("/FristServlet")(l文件中配置<--注册Servlet--><servlet>//Servlet描述信息<description>servlet学习</description>//Servlet的名称<servlet-name>fristservlet</servlet-name>//Servlet类的完整类名<servlet-class>com.study.fristservlet</servlet-class>//当web服务器启动时创建<load-on-startup>1</load-on-startup></servlet><--Servlet映射--><servlet-mapping>//Servlet名称<servlet-name>fristservlet</servlet-name>//访问URL地址<url-pattern>/haha</url-pattern></servlet-mapping>//缺省Servlet,当系统没有此网站时跳转此页面<servlet-mapping>//Servlet名称<servlet-name>fristservlet</servlet-name>//访问URL地址<url-pattern>/</url-pattern></servlet-mapping>2、egimport 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 OutputStream().write("GET请求!!".getBytes()); Writer().append("Served at: ").ContextPath());}/***处理HTTP POST请求* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated OutputStream().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对象:
用途:数据库配置,编码格式配置等在l(Servlet)配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数<init-param><param-name>data</param-name><param-value>xxx</param-value></init-param>在Servlet中获取方法://得到指定的:String valueServletConfig().getInitParameter("data");System.out.println("value")//得到所有的Enumeration eServletConfig().getInitParameterNames();while(e.hasMoreElements()){String name=(String) e.nextElement();String valueServletConfig().getInitParameter(name);System.out.print(name+"="+value);}
4、ServletContext对象:
当WEB容器启动时,他会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前WEB应用
ServletConfig对象中维护了ServletContext对象的引用可以通过ServletContext方法获得ServletContext对象获取方法:ServletContext contextServletConfig().getServletContext();由于一个WEB应用中的所有Servlet同享用一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享。ServletContext对象通常也被称之为context域对象。存取方法:context.setAttribute("data", "haha");Attribute("data");用途:聊天室页面的转发:无参:RequestDispatcher rdDispatcherServletContext().getRequestDispatcher("/index1.jsp");rdDispatcher.forward(request, response);有参数:
5、properties:资源文件
读取.properties文件内容url=jdbc:mysql://localhost:3306/testusername=rootpassword=root方法1:InputStream inputStream= ServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");Properties properties=new Properties();properties.load(inputStream);String url= Property("url");String usernameProperty("username");String passwordProperty("password");System.out.println(url+username+password);方法2:通过servletContext的getRealPath方法的得到资源的绝对路径,再通过传统流读取资源文件多用于文件下载String pathServletContext().getRealPath("/WEB-INF/classes/db.properties");FileInputStream in=new FileInputStream(path);Properties properties=new Properties();properties.load(inputStream);String url= Property("url");String usernameProperty("username");String passwordProperty("password");System.out.println(url+username+password);方法3、当读取资源文件的程序不是servlet,需要用类装载器去读取//sevlet调用其他程序,在其他程序中如何读取资源文件注意::资源文件不能太大private static Properties dbconfig=new Properties();static {InputStream in=ResourceAsStream("db.properties");try {dbconfig.load(in);} catch (IOException e) {// TODO Auto-generated catch blockthrow new ExceptionInInitializerError();}}//用静态代码块写,页面调用一次方法4、当需要每次刷新修改页面通过类装载的方式得到资源位置,再通过传统方式读取资源文件的数据,这样可以读取到更新后的数据String path2=ClassLoader().getResource("db.properties").getPath();try {FileInputStream in=new FileInputStream(path);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.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的属性值。不存在返回nullvoid setAttribute(String name,Object obj)//在请求中保存属性名为name的属性。String getContentType()//返回请求正文的MIME类型。若类型未知的话,返回nullServletInputStream 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)//向响应的头部加入一个Cookievoid setStatus(int status)//将响应状态码设定为指定值,只用于不产生错误的响应七、HTTPSession接口:由Servlet容器负责创建,可以存放客户状态信息。String getId()//获取Session的IDObject getAttribute(String name)//根据name参数返回保存在HTTPSession对象中的属性值Enumeration getAttributeNames()//返回当前HTTPSession对象中所有的属性名isNew()//判断该Session是否属于新创建。如果是新创建的返回truevoid 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(sql.jdbc.Driver");//二、定义要连接数据库的地址URLString mysqlURL="jdbc:mysql://localhost:3306/jsp_db";//三、调用DriverManage对象的getConnection()方法Connection conn=(Connection) Connection(mysqlURL,"root","root");//四、创建语句对象//(1)使用Connection接口的CreateStatement方法创建了一个Statement语句对象。//用于传递不带参数的SQL语句给DBMS数据库管理系统来执行Statement stmt=(Statement) ateStatement(); //(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 reuteQuery(sql);//(2)executeUpdate方法用于执行SQL的INSERT、UPDATE和DELETE等DML//此时返回SQL语句执行时操作的数据表中受影响的行数,返回值是一个整数//executeUpdate方法还可以用于执行SQL的CREATE TABLE、DROP TABLE等DDL(Data Definition Language)//数据库定义语言语句。此时返回值为0String sql1="DELETE FROM tbl_user WHERE id='2'";int nuteUpdate(sql1);System.out.println(n);()) {System.out.String("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(sql.jdbc.Driver");connConnection("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[] rowsuteBatch();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 blocke.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可以使用EL1.使用斜杠""符号${expression}2.使用page指令<%@ page isELIgnored="boolean"%>//是否禁用3.在l文件中配置<el-ignored>元素<jsp-config><jsp-property-group><url-pattern>*.jsp</url-pattern><el-ignored>true</el-ignored></jsp-property-group></jsp-config>3、EL保留关键字:and,eq,gt,true,instanceof,div,or,ne,le,False,empty,mod,not,It,ge,null
4、通过EL访问数据:(1)通过EL提供的"[]"和"."运算符可以访问数据。通常情况下,这两个是等价的,可以相互替换eg:<jsp:useBean id="person" class="com.EL.person.Person"></jsp:useBean><jsp:setProperty property="name" name="person" value="name"/>${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[])Attribute("book");//获取保存到request范围内的变量for(int i=0;i<arr2.length;i++){request.setAttribute("I",i);//循环变量i保存到request范围内的变量中%>${I}:${book[I]}//输出第n个元素<%}%>必须将循环变量i保存到request范围内的变量中,否则将不能正确访问数组(3)List集合元素的获取应用"[]"运算符可以获取List集合中的指定元素,但是"."运算符则不能eg:向session域中保存一个包含3个元素的List集合对象,并应用El输出该集合的全部元素<%List<String> list=new ArrayList<String>();list.add("相框");list.add("笔筒");list.add("鼠标垫");request.setAttribute("goodsList",list);%><%List<String> list1=(List<String>)Attribute("goodsList");for(int i=0;i<list1.size();i++){request.setAttribute("I", i);%>${I}:${goodsList[I]}<%} %>5、在EL中判断对象是否为空${empty user}空的话返回true6、在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对象:${quest}//获取request对象后,可以通过该对象获取与客户端相关的消息。2、访问response对象:${sponse}//获取响应相关信息3、访问out对象:${pageContext.out}//获取与输出相关的信息4、访问session对象:${pageContext.session}//获取JSP内置对象中的session对象相关的消息5、访问exception对象${ption}//获取JSP页面的异常信息6、访问page对象:${pageContext.page.class}//获取当前页面的类文件7、访问ServletContext对象:${pageContext.servletContext}//获取Servlet上下文信息二、访问作用域范围的隐含对象:1、pageScope隐含对象:用于返回包含page(页面)范围内的属性值的集合,返回值为java.util.Map对象eg:<jsp:useBean id="person" class="com.EL.person.Person"></jsp:useBean><jsp:setProperty property="name" name="person" value="name"/>用户名为:${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")%>${ssage}三、访问环境信息的隐含对象:1、param对象:用于获取请求参数的值,应用在参数值只有一个的情况下。返回的结果为字符串eg: <input name="name1" type="text">${param.name1}2、paramValues对象:请求参数名对应多个值时,用此对象获取请求参数的值。返回结果为数组eg:${paramValues.affect[0]}3、header和headerValue对象用于获取HTTP请求的一个具体的header的值,当一个header用于多个不同的值的时候用headerValues对象eg:${tion}或${headerValues["connection"]}4、initParam对象:用于获取Web应用初始化参数的值。eg:<context-param><param-value>author</param-value><param-value>mr</param-value></context-param>${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 ----&(2).输入xml ----> XML File ----> 将默认的l更改为 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=""%>用于完成JSP页面的常用功能:其中:表达式标签:<c:out>、<c:set>、<c:remove>和<c:catch>URL标签:<c:import>、<c:redirect>、<c:url>和<c:param>流程控制标签:<c:choose>、<c:when>和<c:otherwise>循环标签包括:<c:forEach>、<c:forTokens><c:out>:将表达式的值输出到JSP页面中,相当于JSP<%=表达式%><c:set>:在指定范围内定义变量,或为指定的对象设置属性值<c:remove>:从指定的JSP范围中移除指定的变量<c:catch>:捕获程序中出现的异常,相当于JAVA语言中的atch<c:import>:导入站内或其他网站的静态和动态文件到Web页面中。<c:redirect>:将客户端发出的request请求重定向到其他URL服务端<c:url>:使用正确的URl重写规则构造的一个URl<c:param>:为其他标签提供参数信息,通常与其他标签结合使用。<c:if>:根据不同的条件去处理不同的业务,和java中的if语句类似,但是没有else<c:choose><c:when><c:otherwise>:相当于switch<c:forEach>根据循环条件,遍历数组和集合类中的所有或部分数据<c:forTokens>迭代字符串中由分隔符分隔的各成员(2)格式标签库:<%@ taglib prefix="fmt" uri=""%>用于处理和解决国际化相关的问题。(3)Sql标签库<%@ taglib prefix="sql" uri=""%>提供了基本的访问关系型数据的能力,可以简化对数据库访问。(4)XML标签库<%@ taglib prefix="sql" uri=""%>可以处理和生成XML的标记,可以方便的开发基于xml的Web应用(5)函数标签库<%@ taglib prefix="sql" uri=""%>用于完成分解字符串,连接字符串,返回子串,确定字符串是否包含特点的子串等功能。2、配置JSTL:将javax.servlet.jsp.jstl-api-1.2.1.jar和javax.servlet.jsp.jstl-1.2.1.jar;复制到WEB-INFlib路径3、表达式标签:(1)<c:out>输出标签:语法1、<c:out value="expression" [escapeXml="true|false"] [default="defaultValue"]/>语法2、<c:out value="expression" [escapeXml="true|false"]>defaultValue</c:out>解释:value:用于指定将要输出的变量或表达式。为Object,可以使用ELescapeXml可选属性,用于指定是否转换特殊字符。器属性值为true或false,默认true,表示转换,即将HTML标签转换为转义字符,在页面中显示出了HTML标签;如果是false,则将其中的html、xml解析出来。---------------------------------------------------------字符 字符实体代码 | 字符 字符实体代码< < | > >, ' | " "& &default属性:用于指定当value属性值等于null时,将要显示的默认值。如果没有指定该属性,将输出空的字符串(2)<c:set>变量设置标签语法1:在scope指定的范围内将变量值储存到变量中。<c:set var="name" value="value" [scope="范围"]/>语法2:<c:set var="name" [scope="page|request|session|application"]>语法3:将变量值储存在target属性指定的目标对象的propName属性中。<c:set var="name" target="object" property="propName"/>语法4:将标签体储存到target属性指定的目标对象的propName属性中。<c:set var="name" property="propName"/>标签体</c:set>解释:----------------------------------------------------------------var:用于指定变量名。通过该标签定义的变量名,可以通过EL指定为<c:out>的value属性的值value:用于指定变量值,可以使用ELscope:用于指定变量的作用域,默认值为page。可选值包括page、request、session、applicationtarget:用于指定储存变量值或者标签体的目标对象,可以是JavaBean或Map集合对象property:用于指定目标对象储存数据的属性名eg:<c:set var="username" value="哈哈" scope="request"/><c:out value="username的值为:${username}"></c:out><jsp:useBean class="com.EL.person.Person" id="userInfo"/><c:set target="${userInfo}" property="name">wgh</c:set><c:out value="UserInfo的name属性为:${userInfo.name} }"></c:out>(3)<c:remove>变量移除标签<c:remove var="name" [scope="范围"]/>解释:var:用于指定要移除的变量名。scope属性:用于指定变量的有效范围,可选值:page、request、session、application。(4)<c:catch>捕获异常标签:<c:catch [var="exception"]>...//可能存在异常的代码<c:catch>解释:var属性:可选属性,用于指定储存异常信息的变量。(5)<c:import>导入标签语法1:<c:import url="url" [context="context"] [var="name"] [scope="范围"] [charEncoding="encoding"]>标签体</c:import>语法2:<c:import url="url" VarReader="name" [context="context"] [charEncoding="encoding"]>标签体</c:import>解释:--------------------------------------------------------------------url:用于指定被导入的文件资源的URL地址。context: 上下文路径,用于访问同一个服务器的其他Web应用,其值必须"/"开头var:用于指定变量名称。String类型scope:用于指定变量的存在范围,默认值为page,可选值为page、request、session和applicationvarReader:用于指定一个变量名,该变量用于以Reader类型储存被包含的文件内容charEncoding:用于指定被导入文件的编码格式标签体:可选,如果需要为导入的文件传递参数,则可以在标签体的位置通过<c:param>标签设置参数eg:1、<%@ taglib prefix="c" uri="" %><c:set var="typeName" value="流行金曲|经典老歌|热舞|欧美金曲"/><c:import url="navigation.jsp" charEncoding="utf-8"><c:param name="typeList" value="${typeName} }"></c:param></c:import>2、${peList}(6)<C:URL>动态生成URL标签语法1:<c:url value="url" [var="name"] [scope="范围"] [context="context"]/>语法2:<c:url value="url" [var="name"] [scope="范围"] [context="context"]><c:param/>...//可以有多个<c:param></c:url>解释:value:用于指定将要处理的URL地址,可以使用ELcontext:上下文路径,用于访问同一个服务器的其他Web工程,其值必须以"/"开头;var:属性:用于指定变量名称,该变量用于保存新生成的URL地址scope属性:用于指定变量的存在范围。(7)、<c:redirect>重定向标签语法1、该语法格式没有标签体,并且不添加传递到目标路径的参数信息。<c:redirect url="url" [context="/context"]/>语法2、该语法格式向客户请求重定向到目标路径,并且在标签体重使用<c:param>标签传递其他参数<c:redirect url="url" [context="/context"]><c:param/>...<c:redirect/>说明:url:必选属性,用于指定待定向资源的URL,可以使用EL。context属性:用于在使用相对路径访问外部context资源时,指定资源的名字(8)<c:param>传递参数标签<c:param name="paramName" value="paramValue"/>说明:url:用于指定参数名,可以引用ELvalue:用于指定参数值,可以引用EL。(9)<c:if>条件判断标签语法1、<c:if test="condition" var="name" [scope=page|request|session|application] />语法2、<c:if test="condition" var="name" [scope=page|request|session|application] />标签体</c:if>解释:test:必选属性,用于指定条件表达式,可以使用ELvar:可选属性,用于指定变量名,该变量用于保存test属性的判断结果。scope:用于指定变量的有效范围,默认为page。可选值有page、request、session和application(10)<c:choose>条件选择标签<c:choose>标签体 //由<c:when>标签和<c:otherwise>标签组成</c:choose>(11)<c:when>条件测试标签<c:when test="condition">标签体</c:when>(12)<c:otherwise>其他条件标签<c:otherwise>标签体</c:otherwise>(13)<c:forEach>循环标签语法1:集合成员迭代<c:forEach items="data" [var="name"] [begin="start"] [end="finish"] [step="step"][varStatus="statusName"]>标签体<c:forEach>语法2:数字索引迭代<c:forEach begin="start" end="finish" [var="name"] [varStatus="statusName"]>标签体<c:forEach>解释:item:用于指定被循环遍历的对象,多用于数组和集合类。该属性的属性值可以是数组、集合类、字符串和枚举类型,并且可以通过 EL进行指定var:用于指定循环体的变量名,该变量用于储存items指定的对象的成员begin:用于指定循环的其实为止,如果没有指定,则从集合的第一个值开始迭代。可以使用ELend:用于指定循环的终止位置:如果没有指定,则一直迭代到集合的最后一位。可以使用ELstep:用于指定循环的步长。可以使用ELvarStatus:用于指定循环的状态变量,该属性还有4个状态属性标签体:可以是JSP页面可以显示的任何元素-------------------------------------------------------------------- varStatas属性:index int 当前循环的索引值,从0开始count int 当前痪的循环技术,从1开始frist boolean 是否为第一次循环last boolean 是否为最后一次循环(14)<c:forTokens>迭代标签<c:forTokens items="String" delims="char" [var="name"] [begin="start"] [end="end"] [step="len"] [varStatus="statusName"]>标签体<c:forTokens>------------------------------------------------------------------------------items:用于指定要迭代的String对象,该字符串通常由指定的分隔符分隔delims:用于指定分隔字符串的分隔符,可以同时又多个分隔符var:用于指定变量名,该变量中保存了分隔后的字符串begin:用于指定迭代开始的位置,引索引从0开始end:用于值定迭代的结束位置step:用于指定迭代的步长,默认步长为1varStatus:用于指定循环的状态变量,同<c:forEach>标签一样标签体:可以是JSP页面可以显示的任何元素
本文发布于:2024-02-03 03:07:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170690083148243.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |