01 07Servlet與表單

下面要結合表單輸入來實現一個Servlet,首先還是按照已有的方式建立一個InputServlet,這個Servlet要負責接收一個msg的請求參數。
範例:定義InputServlet

package org.lks.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;

@SuppressWarnings("serial")
public class InputServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		String msg = request.getParameter("msg"); //接收一個msg的請求參數
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is <strong>");
		out.print(msg);
		out.println("</strong>, using the GET method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

}

隨後還需要在web.xml文件之中配置此Servlet。

<servlet>
 	<servlet-name>InputServelt</servlet-name>
 	<servlet-class>org.lks.demo.InputServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 	<servlet-name>InputServlet</servlet-name>
 	<url-pattern>/input.do</url-pattern>
 </servlet-mapping>

隨後建立一個input.jsp的頁面,這個頁面就是編寫一個表單,而後進行信息的提交。
範例:定義input.jsp

<%@ page language="java" 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>Input&nbsp;Servlet</title>

</head>
  
<body>
	<form action="input.do" method="post">
		please input info:&nbsp;<input type="text" name="msg" id="msg">
		<input type="submit" value="submit">
	</form>
</body>
</html>

以上已經可以成功的處理了表單的get請求與post請求,單並不是說只是處理請求就夠了,對所有剛剛接觸到Servlet的開發者而言,最大的難度就在於路徑的問題。

任何的情況下JSP文件都不可能直接放在根路徑下,但是由於頁面中存在有:<base>元素,所以即使此時頁面的路徑改變了,Servlet也可以使用,因爲當前的Servelt就定義在了根路徑下;

但是既然Servlet的功能和JSP是類似的,而且最爲重要的是如果執行某一個操作時路徑來回變化,這樣對於程序的維護是非常不方便的,所以在以後的開發之中,強烈建議將Servlet配置在與之功能相匹配的目錄下。

<servlet>
 	<servlet-name>InputServlet</servlet-name>
 	<servlet-class>org.lks.demo.InputServlet</servlet-class>
 </servlet>
<servlet-mapping>
 	<servlet-name>InputServlet</servlet-name>
 	<url-pattern>/pages/back/admin/news/input.do</url-pattern>
 </servlet-mapping>
String inputUrl = basePath + "pages/back/admin/news/input.jsp";
<form action="<%=inputUrl %>" method="post">

以後如果在編寫Servlet的時候出現了404的錯誤路徑,請一定要記住觀察瀏覽器上的當前路徑是否是Servlet的配置路徑。

總結:
(1)Servlet的開發的確是比較高級,可以明確的區分出post與get請求,但是大部分的情況下get和post的請求處理是相同的,也就是說本次給出的Servlet程序就是日後使用最多的程序結構。
(2)Servlet接收請求參數時的訪問路徑,一定要和所用的JSP頁面保持在同一個路徑下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章