下面要結合表單輸入來實現一個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 Servlet</title>
</head>
<body>
<form action="input.do" method="post">
please input info: <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頁面保持在同一個路徑下。