標籤:java erro get請求 回收 etc 包含 修改連接埠號碼 發送請求 test
tomcat
bin
startup啟動伺服器
shutdown關閉伺服器
conf(設定檔夾)
server.xml
伺服器設定檔(連接埠號碼)
web.xml
lib(架包)
logs(日誌)
temp(臨時檔案)
webapps(寫好的代碼,部署的項目)
work(放jsp)
servlet(java代碼) )
javac -d . -cp servlet-api.jar FirstServlet.java
手動部署
1.檔案夾下建立WEB-INF,下建立classes(放java位元組碼檔案)和lib(jar包)檔案將配置好的web.xml放到web-inf 檔案夾下
2.將上述檔案放到tomcat下的webapps檔案夾下
3.http://ip:port/項目名/資源名
http://127.0.0.1:8181/tylg_servlet/FirstServlet
重新部署
servlet
實現servlet介面
<servlet>
<servlet-name>firstservlt</servlet-name>//用來匹配servlet—mapping
<servlet-class>com.briup.web.servlet.FirstServlet</servlet-class>java類的包名加類名
</servlet>
<servlet-mapping>
<servlet-name>firstservlt</servlet-name>//用來匹配servlet
<url-pattern>/firstServlet</url-pattern>//資源路徑
</servlet-mapping>
響應過程
http://ip:port/項目名/資源名
http://127.0.0.1:8181/tylg_servlet/FirstServlet
伺服器得到get請求,通過ip和連接埠號碼找到tomcat,在tomcat中找到webapps,如果是頁面,直接存取如果是java在web-inf中找到web.xml。在xml裡通過路徑的資源名和url-pattern匹配找到servlet-mapping,在servlet-mapping中通過servlet-name匹配servlet標籤,通過servlet-class找到對應的java運行檔案
繼承Genericservlet
實現service方法(自動調用)
http://127.0.0.1:8181/tylg_servlet/SecondServlet
繼承HttpServlet
service(HttpServlet req,HttpServletResponse resp)僅攔截http協議的請求
service(ServletRequest arg0, ServletResponse arg1)所有請求都會攔截
init(初始化)destroy(消亡)
第一次訪問的時候建立對象(init方法)(tomcat的service容器)並調用servlet方法,第二次再發請求時不建立新對象,使用第一次啟動的時建立的對象,調用servlet方法(單例模式)當伺服器停掉的時候調用destro有方法回收對象
在web.xml裡的servlet標籤加<load-on-startup>1</load-on-startup>可以設定是否在伺服器啟動時建立對象
數字越接近0越早建立,負數則不建立
單例模式
class Test{//懶漢模式判斷是否存在,不存在建立新對象
private Test test;
private Test(){}
public Test getTest(){
if(test!=null){
test=new Test();
}
return test;
}
}
class Test{//餓漢模式先建立對象
private Test test=new Test();
private Test(){}
public Test getTest(){
return test;
}
}
webcontent下方html頁面
天生多線程,線程不安全
為伺服器設定重新載入servers -》context.xml-》<context reloadable="true">
get/post傳參方式(key=value)
get(將參數用地址的方式傳遞)getParameter
不安全,有長度限制
doGet
超連結,form表單,ajax
http://127.0.0.1:8181/tylg_servlet/param.html
當發一個請求,資源存在,將請求封裝成httprequest對象(web伺服器)作為參數發送給service方法
http://127.0.0.1:8181/tylg_servlet/param.html
http://127.0.0.1:8181/tylg_servlet/ParamServlet?name=zhang3&age=10
post參數在要求標頭
form表單methed屬性設定為post
doPost只接受post傳參
解決亂碼
server.xml 修改連接埠號碼的地方URIEncoding="編碼方式"
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");設定內容類型
發送請求的方式(五種)
http://127.0.0.1:8181/tylg_servlet/register.html
跳轉:
伺服器內部跳轉
RequestDispatcher rdis=req.getRequestDispatcher("error.html");
rdis.forward(req, resp);//傳遞請求
forward僅跳轉
req.getRequestDispatcher("success.html").include(req, resp);
include將其他的東西包含進頁面一起顯示
瀏覽器請求(form的active)-》1.java(req.getRequestDispatcher("2").include(req, resp);)->web.xml->2.java->瀏覽器
一個請求一個回應
瀏覽器發一個請求,請求在伺服器內傳遞(向下轉寄),完成後向瀏覽器發一個響應
用戶端重新導向
新的請求
resp.sendRedirect("error.html");
路徑問題
相對路徑
./回到上一級目錄
../回到上兩級目錄
絕對路徑
/
範圍
application page
ServletContext app= session.getServletContext();
session
HttpSession session =req.getSession();
session會話(每個瀏覽器jsessionid標識)儲存在伺服器端的一個對象,用戶端沒有,瀏覽器以Cookie的形式將jsessionid發送到伺服器,以驗證會話的一致性
在web配置
<session-config>
<session-timeout>1</session-timeout>
</session-config>
修改會話儲存時間
cookie(自動登陸)會話追蹤用戶端(本地檔案)和伺服器端(java對象)都有
request
url重寫
將JsessionId以post或get方式發給伺服器
過濾器
implements Filter
判定合法性
<filter>
<filter-name>firstfilter</filter-name>
<filter-class>com.briup.web.filter.FirstFilterTest</filter-class>
</filter>
<filter-mapping>
<filter-name>firstfilter</filter-name>
<url-pattern>/*(所有請求都會過濾)</url-pattern>地址中出現的路徑才會被過濾器過濾
</filter-mapping>
監聽器當事件觸發時調用監聽器
<listener>
<listener-class>com.briup.web.listener.SessionListener</listener-class>
</listener>
web學習筆記