這裏寫目錄標題
servlet需要掌握的
什麼時候servlet
實際上servlet是一個類
本身jsp都要翻譯成一個Java原文件,然後再編譯成一個class文件,然後生成的結果再響應到客戶端去
所以jsp頁面本身就是一個類,它繼承自servlet,則servlet類也就是一個Java的類
servlet體系結構
接口
不會直接實現接口,而是繼承已經實現類的接口
GenericServlet是通用類,他的子類HTTPServlet
service?
servlet接口
ServletConfig
servlet生命週期
注意是誰實例化,一般我們直接用即可
servlet容器有Tomcat,所以是Tomcatnew一個實例
注意init()和destroy()只會出現一次
代碼操作繼承GenericServlet類
繼承GenericServlet類,在Java Resource-src下面創建一個MyServlet類,繼承GenericServlet類
加上初始化和銷燬的方法
package test01;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyServlet extends GenericServlet {
//添加一個構造方法
public MyServlet() {
System.out.println("constructor");
}
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//如果service方法被調用,就會輸出service
System.out.println("service");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
然後再去配置下web.xml,告訴用戶訪問哪個地址可以訪問這個網站
工作中可能會用註解配置,但是原理要了解
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>test01</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>
<!-- name和class必寫,而且順序name要在前面,名字可以任寫,但是建議是要對應的類名 -->
<servlet-name>MyServlet</servlet-name>
<!-- 要完整的類名+包名 -->
<servlet-class>test01.MyServlet</servlet-class>
</servlet>
<!-- mapping就是映射,裏面的name和class也是必寫 -->
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!-- 虛擬路徑,隨便寫 -->
<url-pattern>/xxx/hhh</url-pattern>
</servlet-mapping>
</web-app>
可以配置多個servlet對象
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>test01</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>
<!-- name和class必寫,而且順序name要在前面,名字可以任寫,但是建議是要對應的類名 -->
<servlet-name>MyServlet</servlet-name>
<!-- 要完整的類名+包名 -->
<servlet-class>test01.MyServlet</servlet-class>
</servlet>
<!-- mapping就是映射,裏面的name和class也是必寫 -->
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!-- 虛擬路徑,隨便寫 -->
<url-pattern>/xxx/hhh</url-pattern>
</servlet-mapping>
<servlet>
<!-- name和class必寫,而且順序name要在前面,名字可以任寫,但是建議是要對應的類名 -->
<servlet-name>MyHttpServlet</servlet-name>
<!-- 要完整的類名+包名 -->
<servlet-class>test01.MyHttpServlet</servlet-class>
</servlet>
<!-- mapping就是映射,裏面的name和class也是必寫 -->
<servlet-mapping>
<servlet-name>MyHttpServlet</servlet-name>
<!-- 虛擬路徑,隨便寫 -->
<url-pattern>/MyHttpServlet</url-pattern>
</servlet-mapping>
</web-app>
然後去瀏覽器輸入虛擬地址,但是瀏覽器空白,因爲沒有寫out ,但是控制檯有
瀏覽器每刷新一次,都輸出service,但是init和destory只會出現一次
servlet類
GenericServlet抽象類
HttpServlet抽象類
繼承httpServlet類,必須要重寫doXXX方法
service,是客戶端判斷了到底是get方法還是post方式請求,然後去調用doXXX方法
servletRequest接口
servletResponse接口
在servlet裏如果獲得out這個內置對象
package test01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MyHttpServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//out
PrintWriter out=response.getWriter();
out.print("<h1>MyHTTPServlet</h1>");
}
}
out是網頁輸出,但是一般不需要這樣做,因爲跳轉即可
HttpServletRequest接口
舉例
這兩句效果一樣
servletConfig接口
servlet的上下文就是應用程序application了
如何快捷新建一個servlet類
此時自動生成一個servlet類
package test01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestServlet")//這是註解,有了註解就不要寫配置文件(就是web.xml文件),否則會報錯,("/TestServlet")裏面可改成xxx/aaa
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//可在這裏寫代碼
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package test01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
//這是版本號的序列id,不寫也不回報錯,但是會警告,建議加上
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("<h1>xxxxxx</h1>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
不加就顯示警告,添加即可
ServletContext接口
如何使用servlet類實現登陸成功(代碼操作)
爲了避免亂碼,寫servlet時建議都寫
???待定
獲取servlet初始化參數
配置完,可以去獲取這個值
使用servletConfig接口的getInitParameter()方法獲取它的值
到所寫的HelloServlet類裏通過名字獲取servlet初始化參數
然後在瀏覽器通過名字訪問
定義全局配置
1、定義一個上下文的參數,實際上是保存在application對象裏面的