1.servlet 概述
Servlet:運行在web服務器上的小的JAVA程序,用來接受和響應從客戶端發送過來的請求,通常使用HTTP協議。
使用Servlet:類實現Servlet接口,並部署到服務器。
入門程序
public class ServletDemo implements Servlet{
/*
* 用來處理客戶的請求,並且做出響應的方法
*
* */
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
res.getWriter().println("hello servlet....");
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>WebExercise</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置Servlet -->
<servlet>
<!-- servlet名稱 -->
<servlet-name>test1</servlet-name>
<!-- Servlet的全路徑 -->
<servlet-class>com.itheima.a_servlet.ServletDemo</servlet-class>
</servlet>
<!-- Servlet的映射 -->
<servlet-mapping>
<servlet-name>test1</servlet-name>
<!-- Servlet的訪問路徑 -->
<url-pattern>/ServletDemo</url-pattern>
</servlet-mapping>
</web-app>
查詢地址:http://localhost:8080/WebExercise/ServletDemo
2.使用ServletRequest接受參數
getParameter — 用於接受一個名稱對應一個值的數據
getparameterMap — 接受一個名稱對應多個值得數據
getParameterNames — 用於接受表單中的所有數據,Map的Key是表單提交的參數,Map的value是提交參數的值。
getParameterValues — 用於獲取表單中提交的所有參數的名稱。
2.1Servlet的實現關係
- Servlet :接口
- GenericServlet : 通用的接口
- HttpServlet :Http接口,編寫一個類繼承HttpServlet,重寫doget和doPost。
2.2Servlet ->Service -> Dao
3.servlet的生命週期
生命週期:一個對象從創建到銷燬的過程
Servlet生命週期:Servlet從創建到銷燬的過程
*何時創建:用戶第一次訪問Servlet創建Servlet的實例。
*何時銷燬:當項目從服務器中移除的時候,或者關閉服務器的時候。
用戶第一次訪問Servlet的時候,服務器會創建一個Servlet的實例,那麼Servlet中的init方法就會執行,任何一次請求服務器創建一個新的線程訪問Servlet中的Service方法,在Service方法顳部根據請求的方式的不同調用DoXXX的方法(get請求調用doGet,,post調用doPost),當Servlet中服務器中移除,或者服務器關閉的時候,Servlet就會被銷燬。
3.1Servlet的相關配置
【啓動時創建Servlet】
Servlet默認是在第一次訪問的時候創建的,現在讓Servlet在服務器啓動的時候創建好,進行對Servlet的配置。
在web.xml中在標籤中進行配置:
*2 //Tomcat啓動就加載。
【URL-Pattern的配置】
URL-Pattern配置方式共有三種:
1.完全路徑匹配 : 以 / 開始 eg:/servletDemo04, /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目錄匹配 : 以 / 開始,需要以 * 結束。Eg:/* , /aaa/* , /aaa/bbb/*
3.擴展名匹配 : 不能以 / 開始,以* 開始的。eg:.do , .action ,
錯誤的寫法: /.do
*完全路徑匹配 > 目錄匹配 > 擴展名匹配
3.2開發中路徑的編寫
相對路徑:都是需要找位置的相對關係,不能以 / 開頭
* ./當前路徑 ../上一級目錄
* 使用相對路徑訪問:
絕對路徑:不需要找位置的相對關係,以 / 開始,
*絕對路徑中氛圍客戶端路徑和服務器端路徑:
*客戶端路徑:一定要加工程名 /day09/ServletDemo06
*服務器端路徑:不需要加工程名 /ServletDemo06
4.登錄5秒後,跳轉到另一個界面
【使用HTTP協議中的refresh頭信息】
Refresh可以定時頁面跳轉,需要使用程序設置頭信息纔可以。
【response中設置響應頭】
addHeader(String Name,String value);
setHeader(String name, String value);
例如:頭信息:xxx:aaa
【使用JS實現讀秒的效果】
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Refresh" content="5;url =/WebExercise/demo5-refresh/index.html">
<title>success page</title>
<script type="text/javascript">
var time = 5;
window.onload = function(){
setInterval('changeTime()',1000);
}
function changeTime(){
time--;
document.getElementById("s1").innerHTML = time;
}
</script>
</head>
<body>
<h1>success</h1>
<h3>頁面將在<span id="s1">5</span>秒後跳轉</h3>
</body>
</html>
5登錄次數
【ServletContext對象】
用來存取數據,****ServletContext對象存取數據,存的數據都是有一定作用的範圍的,這種對象稱爲是域對象。
*setAttribute
*getAttribute
*removeAttribute
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
// 1.接收表單提交的參數
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2.封裝實體對象
User user = new User();
user.setUsername(username);
user.setPassword(password);
// 3.調用業務岑處理數據
UserService userService = new UserService();
try {
User existUser = userService.login(user);
// 4.根據處理結果顯示信息
if (existUser == null) {
// 登錄失敗
response.getWriter().println("fail");
}else{
// 登錄成功
response.getWriter().println("success");
// 記錄次數。
int count = (int) this.getServletContext().getAttribute("count");
count++;
this.getServletContext().setAttribute("count", count);
response.setHeader("Refresh", "5;url=/WebExercise/showCount");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
int count = (int)this.getServletContext().getAttribute("count");
response.getWriter().println("<h1>您是第"+count+"爲登錄成功的用戶<h1>");
}
6.總結
【ServletConfig】獲得Servlet的配置信息
getInitParameter(String name) — 獲得Servlet的初始化參數。
getIntParameterNames(String name); —- 獲得所有的Servlet的初始化參數的名稱。
getServletContext()
getServletName() — 獲得Servlet在web.xml中的配置的Name的值。
【ServletContext】是一個域對象
*作用範圍:整個web工程
*創建:服務器啓動的時候,tomcat服務器爲每個web項目創建一個單獨的ServletContext對象。
*銷燬:服務器關閉的時候,或者項目從服務器移除的時候。
-> ServletContext的作用:
*1.用來獲取全局初始化參數
*2.用來獲得文件的MIME的類型。
*3.作爲域對象存儲數據
*4.用來兌取Web項目下的文件
7.讀取Web工程下的文件
【需求】
現在有一個配置文件在web工程下 的src下,項目要發佈到tomcat中,需要編寫一段程序讀取文件。