Python與JavaWeb的第一次碰撞
阿新 • • 發佈:2018-12-20
在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"> <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汗
- 多多的寫程式碼,多多的測試,才能比較紮實的掌握。而不要圖快,這樣基礎根本打不牢固。