Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
我們在瀏覽網(wǎng)頁的時候,經(jīng)常需要向服務(wù)器提交信息,并讓后臺程序處理。瀏覽器中使用 GET 和 POST 方法向服務(wù)器提交數(shù)據(jù)。
GET 方法
GET方法將請求的編碼信息添加在網(wǎng)址后面,網(wǎng)址與編碼信息通過"?"號分隔。如下所示:
http://www.runoob.com/hello?key1=value1&key2=value2
GET方法是瀏覽器默認(rèn)傳遞參數(shù)的方法,一些敏感信息,如密碼等建議不使用GET方法。
用get時,傳輸數(shù)據(jù)的大小有限制 (注意不是參數(shù)的個數(shù)有限制),最大為1024字節(jié)。
POST 方法
一些敏感信息,如密碼等我們可以通過POST方法傳遞,POST提交數(shù)據(jù)是隱式的。
POST提交數(shù)據(jù)是不可見的,GET是通過在url里面?zhèn)鬟f的(可以看一下你瀏覽器的地址欄)。
JSP使用getParameter()來獲得傳遞的參數(shù),getInputStream()方法用來處理客戶端的二進制數(shù)據(jù)流的請求。
JSP 讀取表單數(shù)據(jù)
getParameter(): 使用 request.getParameter() 方法來獲取表單參數(shù)的值。
getParameterValues(): 獲得如checkbox類(名字相同,但值有多個)的數(shù)據(jù)。 接收數(shù)組變量 ,如checkbox類型
getParameterNames():該方法可以取得所有變量的名稱,該方法返回一個Emumeration。
getInputStream():調(diào)用此方法來讀取來自客戶端的二進制數(shù)據(jù)流。
使用URL的 GET 方法實例
以下是一個簡單的URL,并使用GET方法來傳遞URL中的參數(shù):
http://localhost:8080/testjsp/main.jsp?name=菜鳥教程&url=http://ww.runoob.com
testjsp 為項目地址。
以下是 main.jsp 文件的JSP程序用于處理客戶端提交的表單數(shù)據(jù),我們使用getParameter()方法來獲取提交的數(shù)據(jù):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<h1>使用 GET 方法讀取數(shù)據(jù)</h1>
<ul>
<li><p><b>站點名:</b>
<%= request.getParameter("name")%>
</p></li>
<li><p><b>網(wǎng)址:</b>
<%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>
接下來我們通過瀏覽器訪問 http://localhost:8080/testjsp/main.jsp?name=菜鳥教程&url=http://ww.runoob.com 輸出結(jié)果如下所示:
使用表單的 GET 方法實例
以下是一個簡單的 HTML 表單,該表單通過GET方法將客戶端數(shù)據(jù)提交 到 main.jsp 文件中:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<form action="main.jsp" method="GET">
站點名: <input type="text" name="name">
<br />
網(wǎng)址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
將以上HTML代碼保存到test.htm文件中。 將該文件放置于當(dāng)前jsp項目的 WebContent 目錄下(與 main.jsp 同一個目錄)。
通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:
在 "站點名" 與 "網(wǎng)址" 兩個表單中填入信息,并點擊 "提交" 按鈕,它將輸出結(jié)果。
使用表單的 POST 方法實例
接下來讓我們使用POST方法來傳遞表單數(shù)據(jù),修改main.jsp與Hello.htm文件代碼,如下所示:
main.jsp文件代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<h1>使用 POST 方法讀取數(shù)據(jù)</h1>
<ul>
<li><p><b>站點名:</b>
<%
// 解決中文亂碼的問題
String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8");
%>
<%=name%>
</p></li>
<li><p><b>網(wǎng)址:</b>
<%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>
代碼中我們使用 new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8")來轉(zhuǎn)換編碼,防止中文亂碼的發(fā)生。
以下是test.htm修改后的代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<form action="main.jsp" method="POST">
站點名: <input type="text" name="name">
<br />
網(wǎng)址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:
傳遞 Checkbox 數(shù)據(jù)到JSP程序
復(fù)選框 checkbox 可以傳遞一個甚至多個數(shù)據(jù)。
以下是一個簡單的HTML代碼,并將代碼保存在test.htm文件中:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<form action="main.jsp" method="POST" target="_blank">
<input type="checkbox" name="google" checked="checked" /> Google
<input type="checkbox" name="runoob" /> 菜鳥教程
<input type="checkbox" name="taobao" checked="checked" />
淘寶
<input type="submit" value="選擇網(wǎng)站" />
</form>
</body>
</html>
以上代碼在瀏覽器訪問如下所示:
以下為main.jsp文件代碼,用于處理復(fù)選框數(shù)據(jù):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<h1>從復(fù)選框中讀取數(shù)據(jù)</h1>
<ul>
<li><p><b>Google 是否選中:</b>
<%= request.getParameter("google")%>
</p></li>
<li><p><b>菜鳥教程是否選中:</b>
<%= request.getParameter("runoob")%>
</p></li>
<li><p><b>淘寶是否選中:</b>
<%= request.getParameter("taobao")%>
</p></li>
</ul>
</body>
</html>
通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:
讀取所有表單參數(shù)
以下我們將使用 HttpServletRequest 的 getParameterNames() 來讀取所有表單參數(shù),該方法可以取得所有變量的名稱,該方法返回一個枚舉。
一旦我們有了一個 Enumeration(枚舉),我們就可以調(diào)用 hasMoreElements() 方法來確定是否還有元素,以及使用nextElement()方法來獲得每個參數(shù)的名稱。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<h1>讀取所有表單參數(shù)</h1>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>參數(shù)名</th><th>參數(shù)值</th>
</tr>
<%
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getParameter(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</table>
</body>
</html>
以下是test.htm文件的內(nèi)容:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<form action="main.jsp" method="POST" target="_blank">
<input type="checkbox" name="google" checked="checked" /> Google
<input type="checkbox" name="runoob" /> 菜鳥教程
<input type="checkbox" name="taobao" checked="checked" />
淘寶
<input type="submit" value="選擇網(wǎng)站" />
</form>
</body>
</html>
現(xiàn)在我們通過瀏覽器訪問 test.htm 文件提交數(shù)據(jù),輸出結(jié)果如下:
通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:
你可以嘗試使用以上的JSP代碼讀取其它對象,如文本框,單選按鈕或下拉框等等其他形式的數(shù)據(jù)。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
用JSP文件上傳,下載的一些方法,Java實現(xiàn)文件分片上傳、大文件秒傳,大文件如何做斷點續(xù)傳?JAVAWEB 文件上傳及下載,JAVA大文件上傳,大文件下載解決方案,JAVA實現(xiàn)文件分片上傳并且斷點續(xù)傳,JAVA大文件分片上傳/多線程上傳功能,超大文件上傳和斷點續(xù)傳的控件,JAVA實現(xiàn)瀏覽器端大文件分片上傳,JAVA實現(xiàn)大文件上傳,JAVA WEB 實現(xiàn)文件上傳和下載接口功能,
百度webuploader上傳文件到服務(wù)器指定文件夾問題,webuploader上傳文件到服務(wù)器指定文件夾問題,JSP上傳文件到服務(wù)器指定文件夾問題,JAVA上傳大文件實現(xiàn)源代碼,JAVA上傳大文件實現(xiàn)源碼,JAVA上傳大文件實現(xiàn)代碼,JAVA上傳大文件實現(xiàn)技巧,JAVA上傳大文件實現(xiàn)技術(shù),JAVA上傳大文件實現(xiàn)思路,JAVA上傳大文件實現(xiàn)解決方案,
前端上傳大文件實現(xiàn)方案,js上傳大文件實現(xiàn)方法,JavaScript上傳大文件實現(xiàn)方法,vue上傳大文件實現(xiàn)方法,前端上傳大文件實現(xiàn)方法,html上傳大文件實現(xiàn)方法,html5上傳大文件實現(xiàn)方法,百度webuploader上傳大文件實現(xiàn)方法,webuploader上傳大文件實現(xiàn)方法,JAVA上傳大文件實現(xiàn)方法,
網(wǎng)上也搜過相關(guān)的解決方案,論壇里面也有網(wǎng)友交流,但是都不太令人滿意,與實際的需求需求也相差太遠(yuǎn)??梢哉f是完全不能滿足公司這邊的項目需求。公司項目這塊實際上是需要一個成熟的商業(yè)解決方案。
大文件上傳的話基本上都是分片來傳,網(wǎng)上很多文章講的不能說亂七八糟只能說完全沒用。
JAVA的話主要是負(fù)責(zé)后端的接口,業(yè)務(wù)邏輯,功能的實現(xiàn),比如文件初始化,文件分塊,文件塊合并,文件信息的查詢等。
客戶這個項目跟了很長時間了,大概有2年了。實際上客戶并不在意使用哪種技術(shù),只在乎兩點。
文件比較大,有50G左右,用戶希望能夠在網(wǎng)頁里面直接上傳,一期的時候我們是直接用的HTML5的API,也就是chrome提供的API來做的,但是上線后用戶反饋不是特別的好用,用戶那邊有些電腦用的是WIN7+IE9,chrome的API在ie9里面不支持。但是用戶系統(tǒng)是支持的,這就把人整的有點不會了。二期的時候我們還是定制開發(fā)了,
前端用了JSP,VUE2,VUE3,后端用了JSP,SpringBoot,IDE用了Eclipse,MyEclipse,因為新項目和老項目都用了兩種IDE。
用戶要求能夠在網(wǎng)頁上面上傳文件夾,文件夾里面大約有1萬多個文件,有大有小,大的有1G~10G,小的有幾MB,文件夾上傳的時候需要保存層級結(jié)構(gòu),同時能夠?qū)蛹壗Y(jié)構(gòu)信息保存到數(shù)據(jù)庫中,同時還需要支持文件夾下載,下載下來的文件夾要和上傳的文件夾層級結(jié)構(gòu)一模一樣??蛻裘刻於紩鬏斠恍┵Y料,功能這塊使用頻率非常高。
要求支持?jǐn)帱c續(xù)傳,支持進度信息離線存儲,用戶可能傳一半沒有傳完,下班了,明天上班后繼續(xù)上傳,電腦晚上到點需要關(guān)機,支持加密傳輸,支持國密加密算法SM4,要求支持下載,支持非打包方式下載,瀏覽器要求支持包含IE在內(nèi)的所有瀏覽器,
系統(tǒng)環(huán)境要求支持信創(chuàng)國產(chǎn)化,比如銀河麒麟,中標(biāo)麒麟,統(tǒng)信UOS,龍芯,數(shù)據(jù)庫支持MySQL,Oracle,達(dá)夢數(shù)據(jù)庫,人大金倉,需要提供前端源碼,后端源碼,控件源碼,公司自己的項目,也有自己的產(chǎn)品,后續(xù)需要集成使用,
要求提供7*24小時技術(shù)支持服務(wù),提供文檔教程,視頻教程,遠(yuǎn)程技術(shù)指導(dǎo),1對1技術(shù)支持服務(wù),提供手機,微信,QQ,郵箱,企業(yè)微信等聯(lián)系方式。導(dǎo)入項目:
導(dǎo)入到Eclipse:http://www.ncmem.com/doc/view.aspx?id=9da9c7c2b91b40b7b09768eeb282e647
導(dǎo)入到IDEA:http://www.ncmem.com/doc/view.aspx?id=9fee385dfc0742448b56679420f22162
springboot統(tǒng)一配置:http://www.ncmem.com/doc/view.aspx?id=7768eec9284b48e3abe08f032f554ea2
下載示例:
https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/
工程
NOSQL
NOSQL示例不需要任何配置,可以直接訪問測試
創(chuàng)建數(shù)據(jù)表
選擇對應(yīng)的數(shù)據(jù)表腳本,這里以SQL為例
修改數(shù)據(jù)庫連接信息
訪問頁面進行測試
文件存儲路徑
up6/upload/年/月/日/guid/filename
相關(guān)問題:
1.javax.servlet.http.HttpServlet錯誤
2.項目無法發(fā)布到tomcat
3.md5計算完畢后卡住
4.服務(wù)器找不到config.json文件
相關(guān)參考:
文件保存位置
源碼工程文檔: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
Servlet 通常使用字符串拼接的方式動態(tài)生成 html,大量的 html 內(nèi)容使代碼難以維護、可讀性差。
感受一下,簡單地加一個 table 得醬寫:
都快看不出來是 Java 代碼了。
后來,大佬們想,既然能在 Java 中寫 html,能不能在 html 中寫 Java 呢?
于是 JSP(JavaServer Pages) 誕生了。
JSP 是基于 Servlet API 的,所以擁有 Servlet 擁有的一系列好處,可以實現(xiàn)各種功能,同時可以很方便地編寫或修改網(wǎng)頁,不用面對大量的 println 語句,但是,什么事情都要把握一個度,在 html 中混入大量、復(fù)雜的業(yè)務(wù)邏輯也是不可取的。
一種雙劍合璧、揚長避短的方法是把 Servlet 當(dāng)成 Controller 層,用于處理瀏覽器請求,并調(diào)用核心業(yè)務(wù)邏輯(Model)。而 JSP 則用作 View 層,負(fù)責(zé)動態(tài)地把處理結(jié)果輸出到 html 中去。
Model、View、Controller,沒錯,這就是我們所說的 MVC 模式啦!這里先不贅述,以后會有一篇文章專門介紹 MVC 。
JSP 是如何實現(xiàn)這種功能的呢?
通過分析源碼,我們發(fā)現(xiàn),JSP 被服務(wù)器 “轉(zhuǎn)譯” 成了 Servlet。
我們知道,在服務(wù)器中部署 Servlet,需要先把 Servlet 編譯成 .class 文件,所以添加或修改 Servlet 需要重啟服務(wù)器才能生效。而 JSP 的轉(zhuǎn)譯與編譯均由服務(wù)完成,服務(wù)器如果設(shè)置了 JSP 監(jiān)視,則不需重啟就可以應(yīng)用新增或修改的 JSP。
下面動手來個實踐。
本部分內(nèi)容來自 How2J 的 JSP 教程
在 web 目錄下新建一個文件 test.jsp
(Tomcat 的 web 根目錄為 /webapps/ROOT)
<%@page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
hello,jsp
<br>
<%=new Date().toLocaleString()%>
12345678
訪問 localhost/test.jsp,可以看到運行結(jié)果
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
1
<%@page ... %> 是 JSP 的 Page 指令,為瀏覽器提供當(dāng)前頁面的使用說明,與 html 的頭對應(yīng)。等價的 XML 格式為
<jsp:directive.page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"/>
1
JSP 表達(dá)式的語法格式為:<%= 表達(dá)式 %>,JSP表達(dá)式會先被轉(zhuǎn)化為 String,然后插入到表達(dá)式出現(xiàn)的地方。
<%=new Date().toLocaleString()%>
1
本行代碼輸出當(dāng)前的時間。
表達(dá)式可以出現(xiàn)在文本行中,而不一定是 html 標(biāo)簽??梢允褂萌魏畏?Java 語言規(guī)范的表達(dá)式。
test.jsp 的執(zhí)行過程為:
除了上面提到的指令和表達(dá)式,JSP 還有以下幾種頁面元素:
即 html/css/javascript 等內(nèi)容
在 <% %> 之間,可以寫任何 Java 代碼
在 <% ! %> 之間可以聲明字段或方法,但是不建議這么做。
<jsp:include page="Filename"> 在 JSP 頁面中包含另一個頁面。
<%-- jsp代碼 --%>
1
其它細(xì)節(jié)方面的內(nèi)容感興趣的小伙伴可以自行去了解,還是那句話,編程最重要的是動手去做,不擼個幾百萬行代碼怎么好意思說自己室程序員呢?
Servlet 和 JSP 實際上是各有千秋,我們應(yīng)該如何揚長避短呢?且聽下回分解——
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。