MyEclipse企業版平臺為開發者提供seamlessly部署、執行并在幾十個不同應用程序服務器中測試MyEclipse JEE應用程序的能力。其中這些應用程序服務器包括:
雖然MyEclipse中提供了許多現成的服務連接器,但是您還必須下載并安裝第三方服務連接器來完成您的項目工作,就如同它包含在MyEclipse IDE中一樣。
為了快速部署和測試,MyEclipse中包括了一個特殊安裝的Tomcat 7和MyEclipse Derby數據庫來作為集成沙盒的一部分。
MyEclipse和 一個本地應用程序服務器實例的交互是通過使用一個應用服務連接器的Web Tools Project (WTP) 框架來實現的。MyEclipse在其工作臺工具欄和上下文菜單中提供了一個服務器管理的中央服務器操作和集成控件,允許您:
服務器視圖中顯示部署的應用程序
當您指示連接器啟動其應用程序服務器時,連接器使用服務器配置信息來創建啟動配置,然后在應用程序服務器執行時使用該連接器來啟動一個外部的JVM 。下圖描繪了連接器和應用服務器之間的交互。
注意:連接器能夠啟動并只和安裝在本地訪問的文件系統進行交互。在MyEclipse中給WebSphere服務器提供WebSphere支持。
Connector-server交互圖
根據您的需求可以配置盡可能多的被支持的服務器實例;然而典型環境僅需要一小部分的連接器被激活。如果需要測試各種配置,您可以配置多個服務器實例。
配置連接器從服務器視圖或運行的服務器窗口中進入,同時會使用新的服務器向導。配置的過程是直線前進的,但您必須熟悉服務器的安裝和啟動的詳細信息。
注意:在配置過程中的一個常見的錯誤是當啟動一個完整的JDK JVM時,服務器將啟動Java JRE來代替。問題是,JEE應用服務器需要訪問JDK編譯器來支持動態處理的JSP和EJB代理。 JDK包含所需的編譯器;而JRE則不包含。
新服務器向導
對MyEclipse應用服務器支持的要求是:
只有MyEclipse JEE項目類型(企業,EJB,Web)可以部署MyEclipse部署服務。 MyEclipse不支持直接部署基本的Java項目。更多有關基于Java項目的MyEclipse Web項目及其部署的相關信息請參閱Web Project Tutorial。
如果您的應用程序服務器不是受MyEclipse控制(即你啟動和停止服務器使用外部工具或服務器的快捷方式),那么您部署hot sync資源時可使用自定義部署服務器配置。
在定義一個新的服務器窗口時,展開Basic,選擇自定義部署服務器。您可以像其他連接器一樣設置,但除此之外,您必須指定MyEclipse資源的部署位置。
配置自定義部署服務器
本站文章除注明轉載外,均為本站原創或翻譯
用JSP文件上傳,下載的一些方法,Java實現文件分片上傳、大文件秒傳,大文件如何做斷點續傳?JAVAWEB 文件上傳及下載,JAVA大文件上傳,大文件下載解決方案,JAVA實現文件分片上傳并且斷點續傳,JAVA大文件分片上傳/多線程上傳功能,超大文件上傳和斷點續傳的控件,JAVA實現瀏覽器端大文件分片上傳,JAVA實現大文件上傳,JAVA WEB 實現文件上傳和下載接口功能,
百度webuploader上傳文件到服務器指定文件夾問題,webuploader上傳文件到服務器指定文件夾問題,JSP上傳文件到服務器指定文件夾問題,JAVA上傳大文件實現源代碼,JAVA上傳大文件實現源碼,JAVA上傳大文件實現代碼,JAVA上傳大文件實現技巧,JAVA上傳大文件實現技術,JAVA上傳大文件實現思路,JAVA上傳大文件實現解決方案,
前端上傳大文件實現方案,js上傳大文件實現方法,JavaScript上傳大文件實現方法,vue上傳大文件實現方法,前端上傳大文件實現方法,html上傳大文件實現方法,html5上傳大文件實現方法,百度webuploader上傳大文件實現方法,webuploader上傳大文件實現方法,JAVA上傳大文件實現方法,
網上也搜過相關的解決方案,論壇里面也有網友交流,但是都不太令人滿意,與實際的需求需求也相差太遠。可以說是完全不能滿足公司這邊的項目需求。公司項目這塊實際上是需要一個成熟的商業解決方案。
大文件上傳的話基本上都是分片來傳,網上很多文章講的不能說亂七八糟只能說完全沒用。
JAVA的話主要是負責后端的接口,業務邏輯,功能的實現,比如文件初始化,文件分塊,文件塊合并,文件信息的查詢等。
客戶這個項目跟了很長時間了,大概有2年了。實際上客戶并不在意使用哪種技術,只在乎兩點。
文件比較大,有50G左右,用戶希望能夠在網頁里面直接上傳,一期的時候我們是直接用的HTML5的API,也就是chrome提供的API來做的,但是上線后用戶反饋不是特別的好用,用戶那邊有些電腦用的是WIN7+IE9,chrome的API在ie9里面不支持。但是用戶系統是支持的,這就把人整的有點不會了。二期的時候我們還是定制開發了,
前端用了JSP,VUE2,VUE3,后端用了JSP,SpringBoot,IDE用了Eclipse,MyEclipse,因為新項目和老項目都用了兩種IDE。
用戶要求能夠在網頁上面上傳文件夾,文件夾里面大約有1萬多個文件,有大有小,大的有1G~10G,小的有幾MB,文件夾上傳的時候需要保存層級結構,同時能夠將層級結構信息保存到數據庫中,同時還需要支持文件夾下載,下載下來的文件夾要和上傳的文件夾層級結構一模一樣。客戶每天都會傳輸一些資料,功能這塊使用頻率非常高。
要求支持斷點續傳,支持進度信息離線存儲,用戶可能傳一半沒有傳完,下班了,明天上班后繼續上傳,電腦晚上到點需要關機,支持加密傳輸,支持國密加密算法SM4,要求支持下載,支持非打包方式下載,瀏覽器要求支持包含IE在內的所有瀏覽器,
系統環境要求支持信創國產化,比如銀河麒麟,中標麒麟,統信UOS,龍芯,數據庫支持MySQL,Oracle,達夢數據庫,人大金倉,需要提供前端源碼,后端源碼,控件源碼,公司自己的項目,也有自己的產品,后續需要集成使用,
要求提供7*24小時技術支持服務,提供文檔教程,視頻教程,遠程技術指導,1對1技術支持服務,提供手機,微信,QQ,郵箱,企業微信等聯系方式。導入項目:
導入到Eclipse:http://www.ncmem.com/doc/view.aspx?id=9da9c7c2b91b40b7b09768eeb282e647
導入到IDEA:http://www.ncmem.com/doc/view.aspx?id=9fee385dfc0742448b56679420f22162
springboot統一配置:http://www.ncmem.com/doc/view.aspx?id=7768eec9284b48e3abe08f032f554ea2
下載示例:
https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/
工程
NOSQL
NOSQL示例不需要任何配置,可以直接訪問測試
創建數據表
選擇對應的數據表腳本,這里以SQL為例
修改數據庫連接信息
訪問頁面進行測試
文件存儲路徑
up6/upload/年/月/日/guid/filename
相關問題:
1.javax.servlet.http.HttpServlet錯誤
2.項目無法發布到tomcat
3.md5計算完畢后卡住
4.服務器找不到config.json文件
相關參考:
文件保存位置
源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
1. jsp回顧
jsp作用
jsp全稱java server pages(java服務器頁面),本質是一個servlet.它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,后綴名為(*.jsp).
jsp作用:將內容的生成和顯示進行分離
用JSP技術,Web頁面開發人員可以使用HTML或者XML標識來設計和格式化最終頁面,并使用JSP標識或者小腳本來生成頁面上的動態內容
jsp原理
jsp腳本
有三個基本的腳本元素,作用是使JAVA代碼可以直接插入到HTML代碼中
聲明標簽
格式:<%! int a=1; %>
作用:聲明的變量在類的成員位置上
腳本片斷
格式:<% int a=1; out.println(a); %>
作用:內容會生成在_jspService()方法中
腳本表達式
格式:<%="hello " + a %>
作用:它就相當于是out.println()將內容直接輸出到頁面中,注意表達式不能以分號結尾
jsp注釋
在jsp頁面中可以使用三種注釋
可以使用html中注釋
<!-- html的注釋 -->
可以對jsp腳本內容使用java注釋
//單行注釋 /* 多行注釋 */ /**文檔注釋*/
可以使用jsp注釋(推薦)
<%-- jsp注釋 --%>
2. jsp指令簡單介紹
jsp指令介紹
當我們創建一個jsp頁面時,在頁面第一行有一段代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
這個就是指令,對于指令它有以下作用
a. 用于指示JSP執行某些步驟
b. 用于指示JSP表現特定行為
jsp指令格式
格式:
<%@指令名 attr1=”” attr2=””%>
注意:
其中attr1和attr2表示指令中的屬性,通常我們將JSP指令寫在JSP文件的的最上方,但是這不是必須的。
jsp指令分類
JSP中有三大指令,分別是以下三個:
page
include
taglib
其中這三個指令中,page是最復雜的,我們會詳細講解(導入類,編碼的設置等等);include指令表示靜態包含,我們之前學習的請求包含屬于動態包含;taglib指令是用來導入標簽庫,后面會學習一些標簽庫,在這里只做簡單介紹。
3. jsp指令-page
重點屬性:
import
作用:在jsp頁面上導包操作.
這個屬性可以有多個.
pageEncoding
作用:指定當前jsp頁面的編碼。這個編碼是給服務器看的,服務器需要知道當前頁面的編碼,否則服務器無法正確的把jsp翻譯成Java文件。
contentType
在jsp文件中有如下指令:
<%@page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
其中contentType屬性的作用等同于response.setContentType(“text/html;charset=utf-8”)的作用。response的setContentType()方法這里我們就不再多說,當我們在jsp文件中提供了contentType屬性,那么jsp對應的java文件中就會存在response.setContentType(“text/html;charset=utf-8”)這句代碼。contentType屬性的默認值是“text/html; charset=ISO-8859-1”,但是我們知道iso-8859-1并不支持中文,所以我們需要將charset的值修改為“utf-8“。
pageEncoding與contentType的區別與聯系
pageEncoding與contentType都是page指令的屬性,它們都是用來設置編碼,有如下聯系:
如果這兩個屬性只提供了其中一個,那么沒有提供的那個屬性的編碼值就是提供的這個屬性的編碼值,例如:在jsp頁面中設置了contentType=”text/html;charset=utf-8”,那么沒有設置的pageEncoding的值就為utf-8,反之亦然;
如果兩個屬性都沒有提供,那么兩者的默認編碼就是ISO-8859-1。
根據對這兩個屬性的講解,它們有如下區別:
pageEncoding是設置當前頁面的編碼,該編碼是給服務器看的,可以讓服務器正確的將jsp文件翻譯成Java文件;
contentType有兩個作用:一是設置響應字符流的編碼,二是設置Content-Type響應頭,即通知瀏覽器使用什么編碼方式解碼響應信息。
了解屬性:
language
代表在jsp腳本中可以寫的語言, 只有一個值 java
extends
它用于設置jsp翻譯后的java類的父類. 要求必須是HttpServlet或其子類.
session
面上是否禁用session。可取值為true/false 如果值為false,在頁面上不能使用session。
isELIgnored
用是否忽略el表達式.可取值為true/false 如果值為true,那么頁面上的el表達式就不會被解析.
autoFlush與buffer
用于設置jsp中out流的默認緩沖區大小以及是否自動刷新.
errorPage
設置錯誤頁面,當jsp中如果出現了異常,會自動跳轉到指定的錯誤頁面
isErrorPage
指示當前頁面是一個錯誤頁面,這時就可以使用一個內置對象 exception,
通過這個內置對象就可以獲取異常信息.
4. jsp指令-include和taglib
include
include指令作用
include指令的作用是在JSP頁面中靜態包含一個文件,同時由JSP解析包含的文件內容
include指令格式
<%@ include file=“filename” %>
include指令功能分析
包含的是目標文件的源碼;包含過來,一起翻譯
main.jsp中的代碼
<%
String s=“abc”;
%>
<%include file=“part.jsp” %>
part.jsp中的代碼
<%=s %> 沒有定義變量s
盡管part.jsp本身會有錯誤但是運行main.jsp就可以正確引入part.jsp
taglib
taglib指令作用
作用:是用于導入標簽庫.
taglib指令格式
<%@taglib prefix="" uri="" %>
uri 標簽文件的URI地址
prefix 標簽組的命名空間前綴
5. jsp內置對象
jsp九個內置對象及其類型
內置對象 | 類型 |
request | HttpServletRequest |
response | HttpServletResponse |
session | HttpSession |
application | ServletContext |
config | ServletConfig |
page | this(Servlet) |
pageContext | PageContext |
exception | Throwable |
out | JspWriter |
jsp九個內置對象的創建過程
我們可以創建一個demo1.jsp頁面,啟動服務器,在瀏覽器中訪問 demo1.jsp頁面,在tomcat下的work目錄中查找到它翻譯后的demo1_jsp.java文件,在java文件中我們可以查找到每一個內置對象的創建。
request,response這兩個對象是_jspService的參數
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session=null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out=null;
final java.lang.Object page=this;
java.lang.Throwable exception=org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception !=null) {
response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
注意:exception對象只有在jsp頁面上設置了page指令的isErrorPage才會有exception對象。
jsp中的四個域對象
jsp有四個域對象,分別是:
application:域范圍是整個應用;
session:域范圍是整個會話,注意一個會話中只有一個用戶,如果要統計站點的訪問次數,使用的域是ServletContext,因為這個時候統計的是多個用戶,而非一個用戶;
request:域范圍是整個請求鏈;
pageContext:域范圍是一個jsp頁面,在一個頁面中存數據再取數據沒有任何意義,所以這里所說的域指的是在當前jsp頁面和當前jsp頁面中使用的標簽之間共享數據。
6. jsp內置對象-pageContext的作用
獲取其他內置對象
可以通過pageContext對象獲取jsp中其他的內置對象. PageContext類中定義了如下八個方法:getPage()、getRequest()、getResponse()、getServletConfig()、getServletContext()、getException()、getSession()等方法,其中getOut()放是在其父類中定義的,有了這些方法,pageContext對象自然能夠獲取其他八個內置對象了。
操作四個域對象
pageContext也是一個域對象,所以他有以下方法:
void setAttribute(String name,Object value)
Object getAttribute(String name);
Void removeAttribute(String name);
我們還可以利用以下方法操作其他域中的對象:
Object getAttribute(String name, int scope):
該方法的第一個參數是域屬性的名稱,第二個參數指定是從那個域中取出域屬性;
在PageContext中已經定義了如下幾個靜態常量作為scope的可選值:
int APPLICATION_SCOPE:表示從application域中獲取數據;
int PAGE_SCOPE:表示從pageContext域中獲取數據;
int REQUEST_SCOPE:表示從request域中獲取數據;
int SESSION_SCOPE:表示從session域中獲取數據。
void setAttribute(String name,Object value,int scope):
該方法的第一個參數指的是域屬性的名稱,第二參數指的是域屬性的值,第三個參數指定域屬性保存的域,scope的取值同上;
void removeAttribute(String name,int scope):
該方法的第一個參數指的是域屬性的名稱,第二個參數指的是將指定域屬性從哪個域中移出,scope的取值同上;
便捷查詢域中數據
PageContext類的父類中定義了如下方法:
Object findAttribute(String name):該方法是從jsp的四個域pageContext、request、session、application依次查找指定名稱的域屬性,如果找到就停止,這說明如果這四個域中存在同名的屬性,那么返回的數據是從page范圍中獲取的。即表示誰的域范圍越小,誰的優先級越高。
7. jsp動作標簽
jsp標簽介紹
JSP標簽也稱之為Jsp Action(JSP動作)元素,它用于在Jsp頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java代碼,造成jsp頁面難以維護。
常用的jsp標簽
jsp:forward
<jsp:forward>標簽是用來做請求轉發,它與RequestDispatcher接口的forward()方法一樣,唯一不同的是它是在jsp頁面中使用。
jsp:include
<jsp:include>標簽的作用使用來包含其他jsp頁面,之前學習的include指令屬于靜態包含,而include動作標簽是動態包含,它和RequestDispatcher接口的include()方法一樣,是運行級別的包含
jsp:param
<jsp:param>標簽作為<jsp:forward>標簽和<jsp:include>標簽的子標簽,用來給轉發或包含的頁面傳遞數據。
靜態包含與動態包含的區別
include標簽與inclue指令區別:
1.include指令是靜態包含,包含文件中包含了被包含文件的內容.
include標簽是動態包含,它包含的是被包含文件執行后的結果.
2.include指令不能帶參數
include標簽是可以帶參數的
1. EL表達式介紹
EL表達式的介紹
EL是Expression Language的縮寫,它是jsp內置的表達式語言,從jsp2.0開始,就不讓再使用java腳本,而是使用el表達式或動態標簽來代替java腳本。EL表達式的格式如下:
${表達式}
EL表達式代替的是java腳本中的<%=…%>,也就是說EL表達式也是向瀏覽器端輸出數據。例如${1+2}會向瀏覽器端輸出3。
EL表達式的作用
為了使JSP寫起來更加簡單,更加安全,可以通過EL表達式來替換我們jsp頁面上的腳本
EL主要作用:
u獲取數據:
EL表達式主要用于替換JSP頁面中的腳本表達式,以從各種類型的web域 中檢索java對象、獲取數據。(某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組)
u執行運算:
利用EL表達式可以在JSP頁面中執行一些基本的關系運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}
u獲取web開發常用對象
EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕松獲得對web常用對象的引用,從而獲得這些對象中的數據。
u調用Java方法
EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。
EL表達式使用時注意事項
EL表達式是JSP 2.0(JavaEE1.4)規范中的一門技術 。因此,若想正確解析EL表達式,需使用支持Servlet2.4/JSP2.0技術的WEB服務器。
注意:有些Tomcat服務器如不能使用EL表達式
(1)升級成tomcat6
(2)在JSP中加入<%@ page isELIgnored="false" %>
以下為jsp,servlet,javaee,jdk版本之間的對應關系
jsp | javaee | servlet | tomcat | jdk |
Jsp2.0 | javaee1.4 | servlet2.4 | tomcat5.x | jdk1.4 |
Jsp.2.0/2.1 | javaee5.0 | servlet2.5 | tomcat6.0 | jdk1.5 |
Jsp2.1 | javaee6.0 | servlet3.0 | tomcat7.x | jdk1.6 |
2. EL表達式獲取數據
EL表達式之域查找
1.pageContext--------------------${pageScope.xxx}
2.request--------------------------${requestScope.xxx}
3.session--------------------------${sessionScope.xxx}
4.application---------------------${applicationScope.xxx}
通過el獲取時,如果沒有查找到,會返回"".除了上面的獲取方式外還有一種,例如
${requestScope[“xxx”]}
關于.與[]區別
[]與.在使用方式上是一樣的.但是如果名稱中包含了"."等特殊字符,就必須使用[]來獲取. 例如
request.setAttribute("login.message", "登錄失敗");
${requestScope.login.message}<br>錯誤的
${requestScope["login.message"] }正確的
如果沒有寫范圍,會默認從page,request,session.application依次查找
EL表達式獲取復雜數據
?獲取數組中數據
例如:${數組名稱[索引] }
?獲取List中數據
例如:${集合名稱[索引]}
獲取Map中數據
例如:${集合名稱.key名稱}
EL表達式之javabean導航
如果在域中保存的是javaBean對象,那么也可以使用EL表達式來訪問javaBean的屬性,因為EL表達式只做讀操作,所以javaBean一定要為屬性提供get方法,而對set方法沒有要求。使用EL表達式獲取javaBean屬性就是javaBean導航。
3. EL表達式執行運算
常見的運算符
empty我們在開發中檢查對象是否為null或“空”或判斷容器size是否為0
注意事項:
EL表達式支持三元運算符
EL表達式不可以嵌套
${a+${b}}這種是不允許的。
EL中的加號問題
EL表達式中加號兩邊必須是數字或者字符串形式的數字
4. EL表達式內置對象
EL表達式的11個內置對象介紹
EL表達式的11個內置對象。11個內置對象如下所示:
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
initParam
cookie
pageContext
其中,pageScope,requestScope,sessionScope,applicationScope是域相關的內置對象,這里我們就不再多說。這11個內置對象中,有10個內置對象的類型是Map類型,只有pageContext的類型不是Map類型,它的類型是PageContext。
關于pageContext內置對象的介紹
EL表達式的11個內置對象中,有10個內置對象的類型是Map類型,只有pageContext的類型是PageContext。它的使用類似于我們jsp的內置對象pageContext,. 通過pageContext對象可以獲取其他內置對象的任意的屬性值。
常用操作:${pageContext.request.contextPath}
關于請求參數相關內置對象的介紹
請求參數相關的內置對象是:
param:該內置對象的類型是Map<String,String>,可以用來獲取值為單值的請求參數,其中key指的是請求參數的名稱,value指的是請求參數的值,使用param獲取請求參數與request.getParameter()方法一樣。
paramValues:該內置對象的類型是Map<String,String[]>,可以用來獲取值為多值的請求參數,其中key是參數名,value是多個參數值組成的字符串數組。
注意,在使用EL獲取參數時,如果參數不存在,返回的是空字符串,而不是null。這一點與使用request.getParameter()方法是不同的。
關于請求頭相關內置對象的介紹
與請求頭相關的內置對象是:
header:該內置對象的類型是Map<String,String>,用來獲取值為單值的請求頭信息,其中key代表的是請求頭名稱,value代表的是請求頭的值;
headerValues:該內置對象的類型是Map<String,String[]>,用來獲取值為多值的請求頭信息,key代表的是請求頭名稱,value代表的是請求頭的多個值。
關于全局初始化參數的內置對象的介紹
我們再學習Servlet時,講過在web.xml文件中配置全局初始化參數,并且全局初始化參數可以使用ServletContext對象獲取,現在在EL表達式中內置了一個與初始化參數相關的對象:
initParam:該內置對象的類型是Map<String,String>,用來獲取web.xml文件中<context-param>標簽的參數值,其中key代表的是參數名,value代表的是參數值。
關于cookie相關內置對象的介紹
EL表達式也內置一個名為cookie的對象,該內置對象與cookie相關,如下:
cookie:該內置對象的類型為Map<String,Cookie>,其中key是Cookie的名字,value是Cookie對象本身。
5. EL函數使用
EL函數庫介紹
EL函數庫是由第三方對EL的擴展,我們現在學習的EL函數庫是有JSTL提供的,JSTL我們會在后面的課程中詳解。EL函數庫就是定義了一些有返回值的靜態方法,然后通過EL表達式來調用它們
在jsp頁面中使用taglib指令導入EL函數庫,就可以在頁面中使用函數庫中的方法。另外,導入的函數庫可以使用的前提是,我們的項目中有相關的jar包
EL函數庫使用
要使用EL函數庫,首先要在jsp文件的上面使用taglib指令導入函數庫:
l <%@ taglib prefix=”fn” uri=”http://java.sun.com/jsp/jstl/functions”%>
其中,uri的值并不是一個網絡路徑,只是在定義函數庫時,擬定的一個位置。
下面我們來了解EL函數庫中的相關方法,具體如下:
String toUpperCase(String input):把字符串參數轉換成大寫,并返回;
String toLowerCase(String input):把字符串參數轉換成小寫,并返回;
int indexOf(String input, String substring):返回input中substring出現的索引位置;
boolean contains(String input, String substring):查看input中是否包含substring,包 含返回true,否則返回false;
boolean containsIgnoreCase(String input, String substring):在忽略大小寫的情況下,查看input中是否包含substring,包含返回true,否則返回false;
boolean startsWith(String input, String substring):判斷input是否是以substring為前綴,如果是就返回true,否則就返回false;
boolean endsWith(String input, String substring):判斷input是否是以substring為后綴,如果是就返回true,否則就返回false;
String substring(String input, int beginIndex, int endIndex):以beginIndex為開始值,endIndex為結束值,在input上截取子串;
String substringAfter(String input, String substring):獲取input中,substring所在位置后面的字符串;
substringBefore(String input, String substring):獲取input中,substring所在位置前面的字符串;
String escapeXml(String input):把input中“<”、“>“、”&“、”'“、“"”進行轉義;
String trim(String input):去除input中的前后空格;
String replace(String input, String substringBefore, String substringAfter):將input中的substringBefore替換成substringAfter;
String[] split(String input, String delimiters):以delimiters為標識分割input,返回一個字符串數組;
int length(Object obj):可以獲取字符串、數組、各種集合的長度!
String join(String array[], String separator):將array數組中的元素以separator連接起來,返回一個字符串。
示例代碼
<!-- 導入函數庫 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- 以下為body內容,頭部自行添加 -->
<body>
<%
String[] strs={"a", "b","c"};//定義一個字符數組
List list=new ArrayList();//定義一個list集合
list.add("a");//向集合中添加一個字符
pageContext.setAttribute("arr", strs);//將字符數據以arr的名字保存在page域中
pageContext.setAttribute("list", list);//將list集合以list的名字保存在page域中
%>
${fn:length(arr) }<br/><!--返回arr的長度-->
${fn:length(list) }<br/><!--返回list的長度-->
${fn:toLowerCase("Hello") }<br/> <!-- 將Hello變成小寫 -->
${fn:toUpperCase("Hello") }<br/> <!-- 將Hello變成大寫 -->
${fn:contains("abc", "a")}<br/><!-- 判斷abc中是否包含a -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- 在忽略大小寫的情況下,判斷abc中是否包含Ab -->
${fn:contains(arr, "a")}<br/><!-- 判斷arr數組中是否包含a -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- 在忽略大小寫的情況下,判斷list集合中是否包含A -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- 判斷Hello.java是否以.java結束 -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- 判斷Hello.java是否以Hell開始 -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 返回“-”在Hello-World中出現的位置 -->
${fn:join(arr, "-")}<br/><!-- 將arr數組中的元素以“-”連接,并返回 -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- 將Hello-World中的“-”替換成“+” -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!--最終是將數組的元素以“-”連接,并返回 -->
${fn:substring("0123456789", 6, 9)}<br/><!-- 返回0123456789中索引值為6到索引值為9之間的元素 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 返回0123456789中索引值為6到結束的元素 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- 返回Hello-World中“-”后面的字符串 -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- 返回Hello-World中“-”前面的字符串 -->
${fn:trim(" a b c ")}<br/><!-- 去掉 a b c 前后的空格 -->
${fn:escapeXml("<html></html>")}<br/> <!-- 將“<html></html>”中的“<”,“>”轉義,即原樣輸出 -->
</body>
1. JSTL標簽介紹
jstl標簽庫介紹
JSTL(JSP Standard Tag Library,jsp標準標簽庫)是Apache對EL表達式的擴展,也就是說JSTL依賴EL表達式。JSTL是標簽語言,使用起來非常方便。但是它不是jsp內置的標簽,所以用的時候需要我們自己導包,以及指定標簽庫。
如果你使用Myeclipse開發javaweb,那么把項目發布到Tomcat時,你會發現,Myeclipse會在當前工程的lib目錄下存放jstl的jar包,如果沒有使用Myeclipse開發,那么就需要自己導入這個jstl的jar包:jstl-1.2.jar。
jstl標簽庫功能介紹
Jstl標簽庫一共包含了四大標簽庫:
lcore:核心標簽庫,這是我們學習的重點;
lfmt:格式化標簽庫,用的很少;
lsql:數據庫標簽庫,這個標簽庫已經過時,本文檔不再對其進行介紹;
lxml:xml標簽庫,這個標簽庫已經過時,本文檔不再對其進行介紹。
另外Jstl標簽庫中還包含了jstl函數。
如何使用jstl標簽庫
除了jsp動作標簽外,使用其他第三方的標簽都需要做以下兩件事:
導入jar包;
在使用標簽的jsp頁面中使用taglib指令導入標簽庫。
例如:
在jsp頁面導入jstl的核心標簽庫:
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>
其中:
l prefix="c":指定標簽庫的前綴,這個前綴可以賦任意的值,但大家都會在使用core標簽庫時指定前綴為c;
l uri="http://java.sun.com/jsp/jstl/core":指定標簽庫的uri,它不一定是真實存在的網址,但它可以讓JSP找到標簽庫的描述文件。
jstl核心標簽庫標簽介紹
JSTL core標簽庫中 12個標簽
1、c:out 輸出內容到瀏覽器端
2、c:set 設置值到四種數據范圍,設置四個范圍中java對象的一個屬性值
3、c:remove 用來刪除四個數據范圍的數據
4、c:catch 捕獲程序異常
5、c:if 取代頁面中if條件語句,記住沒有c:else
<c:if test="${m>5}" > </c:if>
6、c:choose c:when c:otherwise 一起使用 ,取代if elseif else 結構 、switch-case 結構
7、c:forEach 取代頁面中for循環
8、c:forTokens 切割字符串
9、c:import 效果和include類似
10、c:url 完成URL重寫 (禁用cookie的session追蹤 ) ---- 結合c:param完成 中文URL編碼
11、c:redirect 完成請求重定向
12、c:param 設置參數 一般和c:url,c:redirect或者c:import一起使用.
重點: c:if c:foreach c:set
2. JSTL核心標簽
c:set
格式1:設置域中屬性的值
<c:set var=’域中屬性名稱’ value=’屬性的值’ [scope=’page(默認)|request|session|application’]></c:set>
例如:
<c:set var="password" value="tom" scope="request"></c:set>
格式2:設置域中對象屬性的值
<c:set property=’對象的屬性’ value=’屬性的值’ target=’域中對象’></c:set>
例如:
<c:set property="id" value="10" target="${user }"></c:set>
c:if
作用:頁面上的邏輯判斷
格式:
<c:if test="判斷的內容(一般是el表達式)" var="給前面表達式的結果起個名稱" [scope="page|request|session|application"] />
注意:
scope 用來表達式結果存放的域
若指定了標簽的scope屬性,則必須指定var屬性
例如:
<c:if test="${3>4 }" var="flag">
三大于四
</c:if>
<c:if test="${3<=4}" var='flag1'>
三不大于四
</c:if>
c:choose與c:when c:otherwise
作用:用于指定多個條件選擇的組合邊界,它必須與<c:when>和<c:otherwise>標簽一起使用。使用<c:choose>,<c:when>和<c:otherwise>三個標簽,可以構造類似 “if-else if-else” 的復雜條件判斷結構。
格式:
<c:choose>
<c:when test=”el表達式”>
語句
</c:when>
<c:otherwise>
語句
</c:otherwise>
</c:choose>
例如:
<c:set var="day" value="17"/>
<c:choose>
<c:when test="${day==1 }">
周1
</c:when>
<c:when test="${day==2 }">
周2
</c:when>
<c:when test="${day==3 }">
周3
</c:when>
<c:when test="${day==4 }">
周4
</c:when>
<c:when test="${day==5 }">
周5
</c:when>
<c:when test="${day==6 }">
周6
</c:when>
<c:when test="${day==7 }">
周7
</c:when>
<c:otherwise>
你估計來自火星
</c:otherwise>
</c:choose>
c:forEach
begin屬性
設置循環變量從幾開始
end屬性
設置循環變量到幾結束;
step屬性
設置循環變量的步長
var屬性
定義一個變量,用于接收循環或把數組或集合中遍歷的每一個元素賦值給var指定的變量
varStatus屬性
varStatus屬性就是用來記錄循環狀態的,它可以創建一個循環變量vs,該循環變量有如下屬性:
lcount:用來記錄循環元素的個數;
lindex:用來記錄所循環元素的下標;
lfirst:判斷當前循環的元素是否是第一個元素;
llast:判斷當前循環的元素是否是最后一個元素;
lcurrent:代表當前循環的元素。
items:屬性
指定要循環的變量,可以是一個數組也可以是一個集合,默認是支持EL表達式
c:out
格式:
<c:out value=’要輸出的值’ default=’默認值’ escapeXml=’是否不解析為xml’></c:out>
例如:
在域中有 username=”<a href='#'>jack</a>”
<c:out value="${username }" default="ok" escapeXml="false" ></c:out>
顯示的效果為 超鏈接的jack
c:remove
作用:移除域中的屬性
格式:
<c:remove var=’屬性的名稱’ [scope=’page|request|session|application’]></c:remove>
例如:
<c:set var="password" value="123" scope='request'></c:set>
<c:remove var="password" scope=’request’></c:remove>
注意:
scope不寫的時候,會把所有域中的同名的屬性刪除掉.
c:catch
作用:
用于捕獲嵌套在標簽體中的內容拋出的異常
格式:
<c:catch var='異常對象名稱'>
...
</c:catch>
例如:
<c:catch var="e">
<%
int i=0;
int j=1;
double k=j/i;
%>
</c:catch>
<c:out value="${e }"></c:out> 將異常輸出
<c:out value="${e.message }"></c:out> 將異常信息輸出
c:forTokens
作用:用指定的分隔符切分指定內容
格式:
<c:forTokens items=’指定的內容或者el表達式’ delims=’分隔符[分隔符]’ var=’給分割出來的對象起個名字’>
</c:forTokens>
例如:
<c:set var="arr" value="12,23,34|45,56"></c:set>
<c:forTokens items="${arr }" delims="|," var='a'>
${a }-
</c:forTokens>
c:import
作用:用于在JSP頁面中導入一個URL地址指向的資源內容,其作用有點類似<jsp:include>這個JSP標準標簽
最基本的使用
<c:import url="if.jsp"></c:import>
c:url
作用:用于在JSP頁面中構造一個URL地址
格式:
<c:url value=’路徑’ [context=’工程名’] [var=’給當前路徑起個名稱’] [scope=’page|request|session|application’]></c:url>
例如:
<c:url value="/jstl/if.jsp" var="ifurl" context="/day11" scope="request"/>
c:redirect
作用:主要應用于重定向
例如:
<c:redirect url="/jstl/if.jsp" context='/day11'></c:redirect>
c:param
作用:在地址欄后面設置參數,一般和c:import ,c:url,c:redirect一起使用
例如:
<c:url value="/jstl/if.jsp" var="ifurl" context="/day11" scope="request">
<c:param name="username" value="sansan"></c:param>
<c:param name="password" value="123"></c:param>
</c:url>
修改jsp的默認編碼
*請認真填寫需求信息,我們會在24小時內與您取得聯系。