servlet是什麼?html
百度百科解釋一堆:java
servlet 是在服務器上運行的小程序。這個詞是在 Java applet 的環境中創造的
看着有點繞,我的認爲servlet是java對rfc2616協議的封裝,既是http協議的java封裝.一個java類附rfc2616文檔web
根據紅薯的文章,在myeclipse下測試,shell
1,新建web project;小程序
2,xml添加servelt配置:瀏覽器
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>ServletTest</servlet-name> <servlet-class>TestS</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletTest</servlet-name> <url-pattern>/ServletTest</url-pattern> </servlet-mapping> </web-app>
凡符合url-pattern中/ServletTest的請求,轉由servlet-class對應的類TestS處理tomcat
servlet下servlet-name和servlet-mapping下servlet-name必須相同
服務器
3,TestS類:
app
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestS extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub //super.doGet(req, resp); resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.print("你好,HELLO"); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doPost(req, resp); } }
開啓tomcat,訪問http://localhost:8080/工程名/ServletTesteclipse
頁面返回:
你好,HELLO
filter:
web.xml中servlet前添加:
<filter> <filter-name>helloFilter</filter-name> <filter-class>HelloFilter</filter-class> </filter> <filter-mapping> <filter-name>helloFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
建立HelloFilter.java文件
import java.io.IOException; import javafx.collections.ListChangeListener.Change; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class HelloFilter implements Filter { public void destroy() { // TODO Auto-generated method stub System.out.println("destory filter"); } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("do filter"); //arg2.doFilter(arg0, arg1); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub System.out.println("init filter"); } }
重啓tomcat,
控制檯在啓動tomcat過程打印:init filter
控制檯在關閉tomcat過程打印:destory filter
經過瀏覽器訪問http://localhost:8080/工程名/ServletTest,頁面沒有任何輸出, http請求被過濾器攔截,(這也就是過濾器的含義,過濾器也攔截操做HttpServletRequest和HttpServletResponse)控制檯打印:do filter
反註釋//arg2.doFilter(arg0, arg1);
經過瀏覽器訪問http://localhost:8080/工程名/ServletTest,頁面輸出"你好,HELLO",http請求被過濾器攔截控制檯打印:do filter
----------------------分割線-----------------------------------
修改HelloServlet類,
dopost方法內部調用doget,
doget方法內部同時調用dopost,代碼以下:
package demo; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.print("你好,HELLO"); out.close(); System.out.println("doGet function execute!"); this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub this.doGet(req, resp); } }
作個死循環,是否會報錯?測試下哈:
訪問正常,控制檯打印:"do filter",頁面正常顯示"你好,HELLO",
意料以外的是控制檯沒有打印"doGet function execute!",死循環也不產生做用,沒有報錯.