1. 程式人生 > >Servlet程式設計介面、獲取表單提交的資訊

Servlet程式設計介面、獲取表單提交的資訊

GenericServlet是所有Servlet的鼻祖

用於HTTP的Servlet程式設計都通過繼承

       javax.servlet.http.HttpServlet實現

請求處理方法:(分別對應http協議的七種請求)

1.doGet:響應Get請求,常用

2.doPost:響應Post請求,常用

3.doPut:準備往伺服器上放東西

4.doDelete:準備刪除伺服器上的東西

5.doHead:請求http協議的頭資訊

6.doOptions:對web server進行配置

7.doTrace:進行跟蹤,做除錯用

例項的個數

非分佈的情況下,通常一個Servlet在伺服器中有一個例項

/************************************************分隔符***********************************************************/

Servlet獲取表單提交的內容

部署到Tomcat伺服器上的檔案:

工程名:ServletStudy

表單檔案:login.jsp

Servlet檔案:LoginServlet.java

配置檔案:web.xml

下面對是這幾個檔案的程式碼:

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'login.jsp' starting page</title>
   
   <!--
   <link rel="stylesheet" type="text/css" href="styles.css">
   -->
 
  </head>
 
  <body>
   <form action="/ServletStudy/LoginServlet">
      userName: <input name="userName" type="text"/><br/>
      password:  <input name="password" type="password"/><br/>
     
      <input type="submit"value="submit"/>     <input type="reset"value="reset"/>
   </form>
  </body>
</html>

LoginServlet.java

package com;
 
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;
 
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet
{
  
   protected void doGet(HttpServletRequest req,HttpServletResponse resp)
      throws ServletException, IOException
      {
        String username = req.getParameter("userName");
        String password = req.getParameter("password");
     
        resp.setContentType("text/html");
       
        PrintWriter out = resp.getWriter();
       
        out.println("<html><head><title>Login Result</title></head");
       
        out.println("<body> username:"+username+"<br>");
       
        out.println("password:"+password+"<br></body></html>");
       
        out.flush();
      }
 
}

web.xml

在二級標籤中新增以下程式碼:

<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.LoginServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

說明:

1.<form>標籤中的action 值為 web.xml中的<url-pattern></url-pattern>中的值。再加上Servlet類名,如這裡的是

/ServletStudy/LoginServlet

提交的方式預設為get方式,本例中即是以get方式提交的,這裡沒有對中文問題進行處理。但建議一般使用post方式提交表單。

2. String username = req.getParameter("userName");

這裡的引數值“userName”要與<input name="userName" type="text"/>中的name屬性值相同

下面是使用doPost提交方式,關鍵部分程式碼為:

protected void doPost(HttpServletRequest req,HttpServletResponse resp)
   throws ServletException, IOException
   {
      req.setCharacterEncoding("utf-8");
      String username = req.getParameter("userName");
      String password = req.getParameter("password");
  
      resp.setContentType("text/html");
      resp.setCharacterEncoding("utf-8"); //設定返回給客戶端的文字格式,可解決文字編碼格式不統一的問題
      PrintWriter out = resp.getWriter();   
      out.println("<html><head><title>Login Result</title></head");
      out.println("<body> username:"+username+"<br>"); 
      out.println("password:"+password+"<br></body></html>");
      out.flush();
   }


若使用doPost方式響應客戶,則要將<form>表單中的method的值改為post