1. 程式人生 > >Python與JavaWeb的第一次碰撞

Python與JavaWeb的第一次碰撞

                     

在Python中向伺服器提交一個表單資料看起來是很容易的,但是這次經歷著實讓我記憶深刻,藉此也為了警醒同樣遇到了這樣問題的你們。

要做什麼?

使用Python的urllib2模組提交表單資料,並在伺服器端進行驗證提交的表單結果。

  • 作業系統 Windows 7 旗艦版

  • 需要的編譯器:

    • Eclipse
    • PyCharm
  • 需要的技術:
    • (基礎的)Java web技術
    • (基礎的)Python

伺服器端程式碼

伺服器端採用JavaWeb技術建立,使用Servlet來接收表單資料。具體內容如下:

首先是index.html:

<!DOCTYPE html><html><head><meta
charset="UTF-8">
<title>Insert title here</title></head><body><form action="GetParameters" method="POST">    <br>    UserName : <input type="text" name= "username"><br>    Password : <input type="password" name = "password"><br>    <br>
    <input type= "submit" value="Submit">    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    <input type="reset"></form></body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

然後是action對應的servlet介面。GetParameters.java

package one;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;public class GetParameters extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * @see HttpServlet#HttpServlet()     */    public GetParameters() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse     *      response)     */    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // TODO Auto-generated method stub        response.getWriter().append("Served at: ").append(request.getContextPath());        doPost(request, response);    }    /**     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse     *      response)     */    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // TODO Auto-generated method stub        // doGet(request, response);        String username = request.getParameter("username");        String password = request.getParameter("password");        System.out.println("Username is : " + username);        System.out.println("Password is : " + password);        response.getOutputStream().write("I have received you request!".getBytes());    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

最後就是web.xml的配置檔案(我這裡偷了個懶,老是記錯配置,所以就在tomcat的一個sample 下面抄了一個,然後改了改,就成了)

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"    id="WebApp_ID" version="3.0">    <display-name>Test</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>        <servlet-name>GetParameters</servlet-name>        <servlet-class>one.GetParameters</servlet-class>    </servlet>    <!-- ... -->    <servlet-mapping>        <servlet-name>GetParameters</servlet-name>        <url-pattern>/GetParameters</url-pattern>    </servlet-mapping></web-app>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

Python端程式碼

額,我姑且稱之謂測試端吧。程式碼很簡單,如下:

# coding:UTF-8import sys,urllib,urllib2def CommonWay():    url = 'http://localhost:8080/Test/GetParameters'    params = {        'username':'Username',        'password':'Password'    }    data = urllib.urlencode(params)    req = urllib2.Request(url,data)    response = urllib2.urlopen(req)    content = response.read()    print contentCommonWay()print "Succeed!"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

執行結果

Python控制檯的輸出結果是這樣的

D:\Software\Python2\python.exe E:/Code/Python/GetWeather/ulib2/SubmitData.pyI have received you request!Succeed!Process finished with exit code 0
  • 1
  • 2
  • 3
  • 4
  • 5

但其實最重要的就是伺服器端的處理結果了。 這裡寫圖片描述

我們可以在Eclipse的控制檯清楚的看到我們提交的表單資料。至於要對這些資料做什麼樣的操作,就不是今天要講的內容了。

總結

  • 今天的收穫很多,作為一個學習Python的新手,我堅信現階段遇到的問題越多,進步的也就會越快。
  • 對一個知識點要學的深入一點,而不只是停留在表面
  • 少犯一些低階錯誤,比如我今天這個URL竟然都給弄錯了。⊙﹏⊙b汗
  • 多多的寫程式碼,多多的測試,才能比較紮實的掌握。而不要圖快,這樣基礎根本打不牢固。