servlet_拋開框架,還本來質

   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!",死循環也不產生做用,沒有報錯.

相關文章
相關標籤/搜索