WEB-INF是Java的Web應用的安全目錄。所謂安全就是客戶端沒法訪問,只有服務端能夠訪問的目錄。php
web.xml文件是項目的部署文件css
classes文件夾,用於放置*.class文件html
lib文件夾,用於存放須要的jar包java
如圖:web
在Tomcat的安裝目錄下,找到conf-->server.xml文件數據庫
找到Connector標籤編程
修改port屬性的值便可,端口修改完成後要記得保存,而且重啓Tomcat服務器。瀏覽器
JSP全名爲Java Server Pages,其根本是一個簡化的Servlet設計,他實現了再Java當中使用HTML標籤。JSP是一種動態網頁技術標準也是JavaEE的標準。JSP與Servlet同樣,是在服務器端執行的。緩存
JSP實際上就是Servlet。JSP這門技術的最大的特色在於:寫jsp就像在寫html,但它相比html而言,html只能爲用戶提供靜態數據,而Jsp技術容許在頁面中嵌套java代碼,爲用戶提供動態數據。安全
缺點:不適合設置HTML響應體,須要大量的
response.getWriter().print("<html>");
優勢:動態資源,能夠編程。
缺點:HTML是靜態頁面,不能包含動態信息;
優勢:不用爲輸出html標籤而發愁。
優勢:在原有HTML的基礎上添加java腳本,構成jsp頁面。
做爲請求發起頁面,例如顯示錶單、超連接。
做爲請求結束頁面,例如顯示數據。
做爲請求中處理數據的環節
jsp=html+java腳本+jsp標籤(指令)
jsp中無需建立便可使用的對象一共有9個,稱爲九大內置對象。
3種java腳本:
jsp實際上是一種特殊的Servlet
一、IE瀏覽器在訪問JSP頁面時,Web服務器是如何調用並執行一個jsp頁面的?(Servlet)
二、Web服務器在執行jsp頁面時,是如何把Jsp頁面中的html排版標籤發送到客戶端的?
三、Jsp頁面中的java代碼服務器是如何執行的?
四、Web服務器在調用jsp時,會給jsp提供一些什麼java對象(內置對象)?
一、JSP的模版元素:簡言之就是網頁的靜態內容
例如:html標籤和普通文本。
二、JSP的腳本
<%= 2 + 3 %> 等價於out.print(2 + 3);
三、註釋
JSP註釋:<%-- 被註釋的內容 --%> 特色:安全,省流量
網頁註釋:<!-- 網頁註釋 --> 特色:不安全,費流量
JSP指令(directive)是爲JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其他部分。
在JSP 2.0規範中共定義了三個指令:
例如:
1、page
做用:page指令用於定義JSP頁面的各類屬性,不管page指令出如今JSP頁面中的什麼地方,它做用的都是整個JSP頁面。
爲了保持程序的可讀性和遵循良好的編程習慣,page指令最好是放在整個JSP頁面的起始位置。
屬性:
<%@ page import="java.util.Date, java.util.List" %>
或者:
<%@ page import="java.util.Date" %>
<%@ page import="java.util.List" %>
JSP會自動導入(默認導入)如下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
errorPage="/uri"
若是寫"/"則表明當前應用的目錄下,絕對路徑。
若是不寫"/"則表明相對路徑。
例如:<%@ page pageEncoding="gbk" %>
例如:${1+1} 等價於out.print(1+1);
2、include
include指令用於引入其它JSP頁面,若是使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet。因此include指令引入一般也稱之爲靜態引入。
<%@ include file="/include/header.jsp" %>
<jsp:include page="/include/header.jsp"></jsp:include>
二者的區別:轉譯(翻譯)的時間段不一樣
使用原則:能用靜的就不用動的。緣由之一是:能夠省略一些代碼的書寫。
3、taglib
JSP API容許用戶自定義標籤,一個自定義標籤庫就是自定義標籤的集合。
Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。
Taglib指令的語法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri屬性肯定標籤庫的位置,prefix屬性指定標籤庫的前綴。
等價的XML語法:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
做用:在JSP頁面中導入JSTL標籤庫。替換jsp中的java代碼片斷。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> prefix:前綴(至關於從新給uri起個名字)
示例:
<% if (5 > 3) { out.print(5); } %> <%-- 上下二種方式是等價的 --%> <c:if test="${5>3}"> aaa </c:if>
下面的這種方式很好用!後面慢慢體會。
使用標籤的形式來表示一段java代碼。
JSP行爲標籤使用XML語法結構來控制servlet引擎。它可以動態插入一個文件,重用JavaBean組件,引導用戶去另外一個頁面,爲Java插件產生相關的HTML等等。
行爲標籤只有一種語法格式,它嚴格遵照XML標準:
<jsp:action_name attribute="value" />
行爲標籤基本上是一些預先就定義好的函數,下表羅列出了一些可用的JSP行爲標籤:
指在JSP的<%=%> 和<% %>中能夠直接使用的對象,服務器給咱們建立好的對象,直接拿過來用就好了。
例如:
<%=request.getParameter("name") %> <% Student stu = new Student(); stu.setName("tom"); out.print(stu.getName()); // request.getRequestDispatcher("/7.jsp").forward(request, response); %>
request對象是javax.servlet.http.HttpServletRequest類的實例。每當客戶端請求一個頁面時,JSP引擎就會產生一個新的對象來表明這個請求。
request對象提供了一系列方法來獲取HTTP信息頭,包括表單數據,cookies,HTTP方法等等。
接下來將會介紹一些在JSP編程中經常使用的獲取HTTP信息頭的方法。詳細內容請見下表:
在這個例子中,咱們會使用HttpServletRequest類的getHeaderNames()方法來讀取HTTP信息頭。這個方法以枚舉的形式返回當前HTTP請求的頭信息。
獲取Enumeration對象後,用標準的方式來遍歷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> <h2>HTTP 頭部請求實例</h2> <table width="100%" border="1" align="center"> <tr bgcolor="#949494"> <th>Header Name</th><th>Header Value(s)</th> </tr> <% Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> </body> </html>
response 對象是 javax.servlet.http.HttpServletResponse 類的一個實例。就像服務器會建立request對象同樣,它也會建立一個客戶端響應。
response對象定義了處理建立HTTP信息頭的接口。經過使用這個對象,開發者們能夠添加新的cookie或時間戳,還有HTTP狀態碼等等。
下表列出了用來設置HTTP響應頭的方法,這些方法由HttpServletResponse 類提供:
接下來的例子使用setIntHeader()方法和setRefreshHeader()方法來模擬一個數字時鐘:
<%@ 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> <h2>自動刷新實例</h2> <% // 設置每隔5秒自動刷新 response.setIntHeader("Refresh", 5); // 獲取當前時間 Calendar calendar = new GregorianCalendar(); String am_pm; int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); if(calendar.get(Calendar.AM_PM) == 0) am_pm = "AM"; else am_pm = "PM"; String CT = hour+":"+ minute +":"+ second +" "+ am_pm; out.println("當前時間: " + CT + "\n"); %> </body> </html>
此篇是我在學習過程當中參考菜鳥教程以及筆記和別人博客(黑澤君)完成
Java匹馬行天下依舊在更新中,歡迎你們關注,感受能夠的能夠點擊一下推薦,若若有誤,感謝指正,謝謝!