Servlet&jstl標籤
一.如何接受各種不同表單引數
頁面顯示:
<form action="/s1" method="post"> <!-- name 是引數名 --> <input type="date" name="birthday" value="2018-09-15"> <hr> 男 <!-- MALE FEMALE --> <input type="radio" name="sex" value="男" checked> 女 <input type="radio" name="sex" value="女"> <hr> 唱歌<input type="checkbox" name="hobby" value="1"> 跳舞<input type="checkbox" name="hobby" value="2"> 睡覺<input type="checkbox" name="hobby" value="3"> 玩遊戲<input type="checkbox" name="hobby" value="4"> <hr> <!-- option 標籤如果不提供 value屬性, 把標籤之間的文本當成value 如果提供了value屬性,以value為準 --> <select name="city"> <option>北京</option> <option>天津</option> <option value="shanghai">上海</option> <option>武漢</option> </select> <hr> 個人簡介: <textarea name="intro" cols="30" rows="10"></textarea> <input type="submit" value="提交"> </form>
後臺接受:
@WebServlet(urlPatterns = "/s1") public class Servlet1 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 處理漢字亂碼 req.setCharacterEncoding("utf-8"); // 1) 日期型別的接收,需要注意轉換字串為java中的Date型別 String birthday = req.getParameter("birthday"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = sdf.parse(birthday); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); } // 2) 處理單選按鈕 String sex = req.getParameter("sex"); System.out.println(sex); // 3) 處理複選框, 注意處理null值(都沒有勾選時,就是null值) String[] hobbies = req.getParameterValues("hobby"); // System.out.println(Arrays.toString(hobbies)); if(hobbies != null) { for (String hobby : hobbies) { System.out.println(hobby); } } // 4)處理下拉列表 String city = req.getParameter("city"); System.out.println(city); // 5)處理文字域 String intro = req.getParameter("intro"); System.out.println(intro); } }
二.jstl標籤
1.選擇語句(c:choose):
<c:choose>
<c:when test="條件1">內容1</c:when>
<c:when test="條件2">內容2</c:when>
...
<c:when test="條件n">內容n</c:when>
<c:otherwise>以上條件都不成立時</c:otherwise>
</c:choose>
2.輸出特殊內容(c:out)
作用:可以對${}輸出的內容進行控制,可以控制是否忽略html程式碼,例:
<c:out escapeXML="false" value="${作用域變數}">//不忽略html
<c:out escapeXML="true" value="${作用域變數}"> //忽略html,(當做普通文字)
3.格式化日期(fmt:formatDate)
<fmt:formatDate value="日期物件" pattern="日期格式"/>
4.格式化數字(fmt:formatNumber)
<fmt:formatNumber value="數字物件" pattern="數字格式"/>
三.jsp遺留語言
1.jsp的指令碼
<% 任意java程式碼 %>
弊端:當代碼越來越多時,使用jsp指令碼的方式,會造成專案程式碼難以維護
2.jsp表示式
<%=表示式%>
作用:向頁面顯示值, 表示式不能以;
結束
3.jsp指令
3.1 <%@ page contentType="頁面的內容型別和編碼"
import="要匯入的java類"
isELIgnored="是否忽略EL表示式的處理"
errorPage="出現錯誤時,要跳轉的頁面"
isErrorPage="用在錯誤頁面上,取值為true表示是錯誤頁面,這時候才能在頁面中使用exception變數" %>
3.2 匯入標籤庫
<%@ taglib prefix="字首" uri="標籤的唯一標識" %>
3.3 重用頁面上的一些標籤和程式碼
<%@ include file="另一個jsp頁面" %>
4.jsp宣告
原理:(本質是一個Servlet)
1.當首次訪問此jsp時,tomcat會把jsp轉譯為*.java的類(間接繼承自HttpServlet);
2.再把*.java類編譯為*.class位元組碼;
3.把載入到虛擬機器執行,生命週期類似於servlet的生命週期
例:
public class 類名 extends HttpJspBase{ // HttpJspBase 又是繼承了HttpServlet
public int i = 100;
public int sum(int a, int b) {
return a+b;
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response) {
int i = 10;
out.println(i++);
}
}
5.9大隱式物件(無需宣告即可使用)
request 代表請求物件(可以獲取請求引數,將變數存入request作用域) response 代表響應物件(返回響應) out 代表響應的字元輸出流 pageContext 頁面上下文物件,可以間接獲得request等物件,並可以將變數存入page作用域
config jsp的配置資訊 page 當前jsp物件(this) exception 代表的是異常資訊(當頁面isErrorPage="true"時有效)
session 變數作用範圍是一次會話內有效 application 變數作用範圍是整個應用程式有效
page作用域: 變數作用範圍僅限於當前頁面 request作用域: 變數的作用範圍在一次請求內有效
5.jsp forward 6.jsp 兩個頁面使用的是同一個請求 servlet servlet forward x.jsp servlet與jsp使用的是同一個請求