我們在瀏覽網頁的時候,經常需要向服務器提交信息,并讓后臺程序處理。瀏覽器中使用 GET 和 POST 方法向服務器提交數據。
GET 方法
GET方法將請求的編碼信息添加在網址后面,網址與編碼信息通過"?"號分隔。如下所示:
http://www.runoob.com/hello?key1=value1&key2=value2
GET方法是瀏覽器默認傳遞參數的方法,一些敏感信息,如密碼等建議不使用GET方法。
用get時,傳輸數據的大小有限制 (注意不是參數的個數有限制),最大為1024字節。
POST 方法
一些敏感信息,如密碼等我們可以通過POST方法傳遞,POST提交數據是隱式的。
POST提交數據是不可見的,GET是通過在url里面傳遞的(可以看一下你瀏覽器的地址欄)。
JSP使用getParameter()來獲得傳遞的參數,getInputStream()方法用來處理客戶端的二進制數據流的請求。
JSP 讀取表單數據
getParameter(): 使用 request.getParameter() 方法來獲取表單參數的值。
getParameterValues(): 獲得如checkbox類(名字相同,但值有多個)的數據。 接收數組變量 ,如checkbox類型
getParameterNames():該方法可以取得所有變量的名稱,該方法返回一個Emumeration。
getInputStream():調用此方法來讀取來自客戶端的二進制數據流。
使用URL的 GET 方法實例
以下是一個簡單的URL,并使用GET方法來傳遞URL中的參數:
http://localhost:8080/testjsp/main.jsp?name=菜鳥教程&url=http://ww.runoob.com
testjsp 為項目地址。
以下是 main.jsp 文件的JSP程序用于處理客戶端提交的表單數據,我們使用getParameter()方法來獲取提交的數據:
<%@ 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 方法讀取數據</h1>
<ul>
<li><p><b>站點名:</b>
<%=request.getParameter("name")%>
</p></li>
<li><p><b>網址:</b>
<%=request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>
接下來我們通過瀏覽器訪問 http://localhost:8080/testjsp/main.jsp?name=菜鳥教程&url=http://ww.runoob.com 輸出結果如下所示:
使用表單的 GET 方法實例
以下是一個簡單的 HTML 表單,該表單通過GET方法將客戶端數據提交 到 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 />
網址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
將以上HTML代碼保存到test.htm文件中。 將該文件放置于當前jsp項目的 WebContent 目錄下(與 main.jsp 同一個目錄)。
通過訪問 http://localhost:8080/testjsp/test.html 提交表單數據到 main.jsp 文件,演示 Gif 圖如下所示:
在 "站點名" 與 "網址" 兩個表單中填入信息,并點擊 "提交" 按鈕,它將輸出結果。
使用表單的 POST 方法實例
接下來讓我們使用POST方法來傳遞表單數據,修改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 方法讀取數據</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>網址:</b>
<%=request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>
代碼中我們使用 new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8")來轉換編碼,防止中文亂碼的發生。
以下是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 />
網址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
通過訪問 http://localhost:8080/testjsp/test.html 提交表單數據到 main.jsp 文件,演示 Gif 圖如下所示:
傳遞 Checkbox 數據到JSP程序
復選框 checkbox 可以傳遞一個甚至多個數據。
以下是一個簡單的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="選擇網站" />
</form>
</body>
</html>
以上代碼在瀏覽器訪問如下所示:
以下為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>從復選框中讀取數據</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 提交表單數據到 main.jsp 文件,演示 Gif 圖如下所示:
讀取所有表單參數
以下我們將使用 HttpServletRequest 的 getParameterNames() 來讀取所有表單參數,該方法可以取得所有變量的名稱,該方法返回一個枚舉。
一旦我們有了一個 Enumeration(枚舉),我們就可以調用 hasMoreElements() 方法來確定是否還有元素,以及使用nextElement()方法來獲得每個參數的名稱。
<%@ 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>讀取所有表單參數</h1>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>參數名</th><th>參數值</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文件的內容:
<!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="選擇網站" />
</form>
</body>
</html>
現在我們通過瀏覽器訪問 test.htm 文件提交數據,輸出結果如下:
通過訪問 http://localhost:8080/testjsp/test.html 提交表單數據到 main.jsp 文件,演示 Gif 圖如下所示:
你可以嘗試使用以上的JSP代碼讀取其它對象,如文本框,單選按鈕或下拉框等等其他形式的數據。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
JSP全名為Java Server Pages,java服務器頁面。JSP是一種基于文本的程序,其特點就是HTML和Java代碼共同存在!
JSP是為了簡化Servlet的工作出現的替代品,Servlet輸出HTML非常困難,JSP就是替代Servlet輸出HTML的。
String s="HelloWorda"; out.println(s);
JSP也是Servlet,運行時只有一個實例,JSP初始化和銷毀時也會調用Servlet的init()和destroy()方法。另外,JSP還有自己初始化和銷毀的方法
JSP代碼可以分為兩部分:
JSP腳本
<jsp:scriptlet> String s="HelloWorld"; out.println(s); </jsp:scriptlet>
JSP注釋
<%--這是JSP注釋--%> <%--%> //這是java的當行注釋 // /*這是java的多行注釋*/ /**/
JSP指令
JSP指令用來聲明JSP頁面的相關屬性,例如編碼方式、文檔類型等等
JSP指令的語法:
<%@指令 屬性名="值" %>
page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page contentType="application/msword;charset=UTF-8" language="java" %> <html> <head> <title>簡單使用JSP</title> </head> <body> 1111 </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %> <html> <head> <title>該頁面出錯了!</title> </head> <body> <%--模擬頁面出錯了!!!--%> <% int result=2 / 0; %> 你好呀 </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> <html> <head> <title>友好提示頁面</title> </head> <body> 服務器正忙著呢! </body> </html>
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.jsp</location> </error-page>
include指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁頭</title> </head> <body> 我是頁頭 <br> <br> <br> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁尾</title> </head> <body> 我是頁尾 </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>包含頁頭和頁尾進來</title> </head> <body> <%@include file="head.jsp" %> <%@include file="foot.jsp" %> </body> </html>
taglib指令
JSP行為
JSP行為(JSP Actions)是一組JSP內置的標簽,只書寫少量的標記代碼就能夠使用JSP提供豐富的功能,JSP行為是對常用的JSP功能的抽象和封裝。
為什么我不把它直接稱為JSP標簽呢?我把這些JSP內置的標簽稱之為JSP行為,能夠和JSTL標簽區分開來。當然了,你也可以把它稱之為JSP標簽,你不要搞混就行了。我個人喜歡把這些JSP內置標簽稱之為JSP行為。
include行為
<jsp:include page=""/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>包含頁頭和頁尾進來</title> </head> <body> <jsp:include page="head.jsp"/> <jsp:include page="foot.jsp"/> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁頭</title> </head> <body> <% String s="zhongfucheng"; %> 我是頁頭呀 <br> <br> <br> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁尾</title> </head> <body> <% String s="zhongfucheng"; %> 我是頁尾呀 </body> </html>
param行為
forward行為
<jsp:forward page=""/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>訪問1.jsp就跳轉到head.jsp</title> </head> <body> <jsp:forward page="head.jsp"/> </body> </html>
<jsp:forward page="head.jsp"> <jsp:param name="username" value="zhongfucheng"/> </jsp:forward>
<% String ss=request.getParameter("username"); %> 獲取到的參數是: <%=ss%>
directive行為
<jsp:directive.include file="head.jsp"></jsp:directive.include> <jsp:directive.include file="foot.jsp"></jsp:directive.include>
javaBean行為
<jsp:useBean id=""/> <jsp:setProperty name="" property=""/> <jsp:getProperty name="" property=""/>
文章來源:https://dwz.cn/OtXvyvh3
作者:Java3y
精品長文創作季#
JSP,全稱是Java Server Pages,中文含義是Java服務端頁面,它是一種用于動態網頁開發的技術,本質上就是Servlet程序,只不過JSP是將Servlet中和HTML、CSS、JavaScript等界面相關的代碼單獨抽取出來,從而形成了JSP,下面就介紹一下JSP程序。
JSP是專門用于前端界面顯示的一個文件,為什么會出現JSP呢???首先我們來看下,JSP沒有出來之前,如果我們要使用Servlet程序編寫一個HTML界面,此時你會寫出下面的代碼:
package com.gitcode.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @version 1.0.0
* @Date: 2024/2/10 20:20
* @Author ZhuYouBin
* @Description:
*/
public class HtmlResponseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 響應HTML內容
response.setContentType("text/html;charset=UTF-8");
// 獲取輸出流
PrintWriter writer=response.getWriter();
// 輸出HTML內容
writer.println("<!DOCTYPE html>");
writer.println("<html lang=\"en\">");
writer.println("<head>");
writer.println(" <meta charset=\"UTF-8\">");
writer.println(" <title>響應HTML內容</title>");
writer.println("</head>");
writer.println("<body>");
writer.println(" <h3>Hello World!你好,世界!</h3>");
writer.println("</body>");
writer.println("</html>");
// 關閉流
writer.close();
}
}
從上面代碼中,可以看出來,開發一個HTML界面,需要使用writer輸出流,將HTML代碼拼接起來,通過HttpServletResponse響應對象,返回給客戶端。
可想而知,這是多么復雜的事情,這還只是一個HTML界面,一個Web工程中有著幾十、幾百個HTML,那么通過這種編碼方式,一方面開發效率非常低,另一方面后期維護起來的時候,也是非常困難。
所以,為了解決這個問題,Sun公司就提出了一種新的動態網頁開發技術,也就是我們這里所學的JSP程序。
JSP是如何解決輸出HTML問題的呢???
我們這樣想一下,在上面的代碼中,大部分代碼都是使用writer.println()方法輸出HTML標簽內容,那么我們能不能將這一部分代碼單獨抽取出來,然后在程序運行的時候,再把這些代碼嵌入到對應的位置,最終拼接成一個完整的HTML返回給客戶端。
Sun公司就是采用了這種思想,將這些和HTML相關的代碼都單獨抽取了出來,將其單獨保存到一個以【.jsp】為后綴的文件里面,這個.jsp文件就叫做JSP程序。Sun公司開發了一個JSP引擎程序,在程序運行過程中,通過JSP引擎將對應的jsp文件渲染成Servlet程序,最終將渲染的結果響應給客戶端,這樣就實現了簡化Servlet的開發。
所以說,JSP程序本質上就是Servlet程序,這是因為JSP引擎會將我們訪問的JSP文件,渲染成Servlet程序,然后再執行這個Servlet程序,從而完成客戶端的響應處理。
創建JSP程序非常簡單,我們只需要創建一個以【.jsp】為后綴的文件,接著編寫相關的代碼即可。在IDEA中的web目錄下,創建一個HelloWorld.jsp文件,如下:
這樣就創建成功啦!!!啟動Tomcat容器,瀏覽器訪問http://localhost:8080/servlet/HelloWorld.jsp地址,看到下面內容,那么第一個JSP程序就算完成啦。
PS:一般情況下,我們會將jsp文件保存在WEB-INF目錄下面,因為這個目錄下的文件是受保護的,瀏覽器不能直接訪問。
今天就到這里,未完待續~~
*請認真填寫需求信息,我們會在24小時內與您取得聯系。