第三章:編寫第一個servlet

建立Servlet的步驟html

        1.XXX extends HttpServlet java

        2.Override doGet doPost web

        3.copy to WEB-INF/classes瀏覽器

        4.web.xml服務器

        1)   <servlet><servlet-name><servlet-class></servlet>app

        2)   <servlet-mapping><url-pattern> / ide

        5.restart serverpost

一。在JavaWeb開發中,用戶自定義Servlet類,繼承用於專門用於web開發的HttpServlet類。通常Service()方法不須要重寫(當須要對服務器進行初始化操做時可重寫)。通常用來處理客戶端請求的方法是doGet()和doPost()。    this

    遇到的問題:url

        type: Status report

        message: HTTP method GET is not supported by this URL

        description: The specified HTTP method is not allowed for the requested resource (HTTP

        method GET is not supported by this URL).

  緣由:繼承自HttpServlet的Servlet沒有重寫對於請求和響應的處理方法:doGet或doPost等方法;默認調

用父類的doGet或doPost等方法。當你已經重寫上述方法時,若是程序中有super.doPost(req, resp)仍然報上述錯誤,緣由是父類HttpServlet的doGet或doPost等方法覆蓋了你重寫的doGet或doPost等方法。父類HttpServlet的doGet或doPost等方法的默認實現是返回狀態代碼爲405的HTTP錯誤。

    解決方法:子類重寫doGet或doPost等方法,不要調用父類HttpServlet的doGet或doPost等方法,即去掉super.doGet(request, response)和super.doPost(request, response).

二。1.瀏覽器端html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title>a example for form_servlet</title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
   <h2>A Sample Form using get/post</h2>
   <form name="showparameters" method="get" action="servlet/form_servlet"> 
	Number:<input type="text" name="itemnumber"/><br/>
	Quantity:<input type="text" name="quantity"/><br/>
	Each Price:<input type="text" name="price"/><br/><hr>
	Name:<input type="text" name="name"/><br/>
	Addr:<br/><textarea name="addr" rows="3" cols="30"></textarea><br/>
	Card:<br/>
	&nbsp;&nbsp;<input type="Radio" name="card" value="viss">viss<br/>
	&nbsp;&nbsp;<input type="Radio" name="card" value="AAA">AAA<br/>
	&nbsp;&nbsp;<input type="Radio" name="card" value="BBB">BBB<br/>
	Card Number:<input type="text" name="cardnumber"/><br/>
	Repeat Card Number:<input type="text" name="cardnumber"/>
	<input type="submit"/>
   </form>
 </body>
</html>

    2.Servlet

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class form_servlet extends HttpServlet{

	private PrintWriter pw;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//resp.getWriter().println("<a href='http://www.baidu.com'>goaaa</a>");
		resp.setContentType("text/html;charset=gb2312");
		pw = resp.getWriter();//得到輸出流
		
		String title = "Reading all request parameters";
		pw.println("<html><head><title>讀取全部參數</title></head>"
				+"<body bgcolor='#fdf5e6'>\n"
				+"<h1 align='center'>"+title+"</h1>\n"
				+"<table border='1' align='center'>\n"
				+"<th>Parameter Name<th>Parameter Value(s)");
		//得到請求參數
		Map<String, String[]> map = req.getParameterMap();
		Iterator<Entry<String, String[]>> entries = map.entrySet().iterator();
	    while(entries.hasNext()){
	       Map.Entry entry = (java.util.Map.Entry) entries.next();
	       String key = (String) entry.getKey();
	       pw.println("<tr><td>"+key+"</td>");
	       String[] values = (String[])entry.getValue();
	       if(values.length==1){
	    	   pw.println("<td align='center'>"+values[0]+"</td>\n</tr>");
	       }else{
	    	   	pw.println("<td><ul>\n");
	    	   	for (int i = 0; i < values.length; i++) {
	    	   		String value = values[i];   
	    	   		pw.println("<li>"+value+"</li>");
	    	   	}
	    	   	pw.println("</ul>\n");
	    	   	pw.println("</td>\n</tr>\n");
	       }
	    }
	    pw.println("</table>\n</body></html>\n");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}
	
}

3.web.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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_3_0.xsd"
  version="3.0"
  metadata-complete="true">
  <servlet>
	<servlet-name>form_servlet</servlet-name>
	<servlet-class>form_servlet</servlet-class>
  </servlet>
  <servlet-mapping>
	<servlet-name>form_servlet</servlet-name>
	<url-pattern>/servlet/form_servlet</url-pattern>
  </servlet-mapping>
</web-app>

注意的問題:1.注意action的url爲相對路徑(表示相對當前文件所在的路徑)servlet/form_servlet

<form name="showparameters" method="get" action="servlet/form_servlet">

2.web.xml配置文件的中url-pattern定義可訪問的web路徑,寫法:必須以「/」開頭

<url-pattern>/servlet/form_servlet</url-pattern>

3.<servlet-mapping>和<servlet>能夠使多對一的關係,這樣能夠爲一個servlet定義多個可訪問的web路徑。

相關文章
相關標籤/搜索