生活随笔
收集整理的這篇文章主要介紹了
EE Servlet 3:简单表单处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于大多數Web開發人員而言,Web應用程序中的表單處理就像小菜一碟。 如果我們無法捕獲用戶的輸入并進行處理,將不會有太大用處。 因此,我在servlet3示例中包含了一個簡單的FormServlet ,該示例演示了您可能會遇到的很少使用的表單輸入。 看起來是這樣的:
package zemian.servlet3example.web;import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import zemian.service.logging.Logger;@WebServlet("/form")
public class FormServlet extends HtmlWriterServlet {private static final Logger LOGGER = new Logger(FormServlet.class);@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HtmlWriter html = createHtmlWriter(req, resp); String message = getMessage(req);html.header().h(1, "User Data Form").p(message).println("<form method='post' action='form'>").println("<p/>Username: <input type='text' name='username'/>").println("<p/>Password: <input type='password' name='password'/>").println("<p/>Choose a country: <select name='country' size='1'>").println("<option default='true'>US</option>").println("<option>China</option>").println("<option>Korea</option>").println("</select>").println("<p/>Skills set: <input type='checkbox' name='skills' value='Java'/> Java").println("<input type='checkbox' name='skills' value='Java EE'/>Java EE").println("<input type='checkbox' name='skills' value='MySQL Database'/> MySQL Database").println("<p/>Notes: <textarea name='notes' cols='50' rows='3'></textarea>").println("<p/><input type='submit' value='Submit'/>").println("</form>").println(html.link("Back to Home", "/index")).footer();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {LOGGER.info("Processing form.");Form form = new Form();form.setUsername(req.getParameter("username"));form.setPassword(req.getParameter("password"));form.setNotes(req.getParameter("notes"));form.setCountry(req.getParameter("country"));String[] skills = req.getParameterValues("skills");skills = (skills == null) ? new String[0] : skills;form.setSkills(Arrays.asList(skills));req.setAttribute("message", "Processed: " + form);doGet(req, resp);}private String getMessage(HttpServletRequest req) {String message = (String)req.getAttribute("message");if (message == null) {message = "";}return message;}
}
與往常一樣,大多數表單都顯示一個http GET請求,然后通過POST操作對其進行處理。 仔細研究一下,并密切注意Servlet如何處理單值或多值輸入。 存在這些是因為HTML表單可能允許用戶從單個輸入標簽/小部件中選擇多個值。
開發人員在表單處理中常用的一種模式是將輸入數據捕獲到“命令對象”,“傳輸對象”或(在我的示例中)“表單”對象中; 這樣就可以將數據傳遞到應用程序的另一層進行進一步處理。 這是一個很好的設計,因為它可以將Web層依賴項與后端層服務層分離。
表單處理中另一個經常處理的領域是數據驗證。 如果將數據捕獲為表單對象,則可能會有兩層驗證。 一層是當您直接從http請求(通常是從String輸入)提取它時,然后您將進行驗證,例如它是必填字段還是可選字段,是String值是否可以轉換為預期和期望的類型(整數或日期等) )。 驗證的第二層可能位于您的服務層中,在該層中您已經使用正確的類型構造了表單對象,但是根據您的應用程序要求,它們的值可能無效。 最常見的無效數據是由于不符合數據庫約束,因此無法持久保存。 我沒有在上面提供有關驗證的示例,但是您可以輕松地改進Servlet并自己進一步進行研究。
我想再提一提。 那里有許多Java Web框架將很多注意力集中在表單處理上,它們應該可以幫助您以更少的重復代碼輕松地開發應用程序。 通常使用非常具體的編程模型和樣式來完成此工作,在許多情況下,這些模型和樣式可以使您避免完全使用HttpServletRequest對象。 所有這些都是好的(假設框架是一種高質量的框架),但是請記住,在大多數情況下,當出現問題時,大多數情況是在框架特定層,甚至更有可能是您自己的使用框架的代碼。 然后,您將花費大部分調試時間來學習特定于框架的領域,而不是Servlet規范層。
就我的示例目的而言,我試圖僅關注EE API,所以我將遠離標準API之外的任何其他框架。 如果您是初學者,我強烈建議您學習Servlet API并了解如何處理表單,這使您對Web應用程序中數據的產生方式有了更扎實的了解。 如果進一步研究Java EE堆棧,實際上它已經有了一個稱為EE 6標準一部分的稱為JSF的框架。 它的設計是幫助將網頁構建為組件模型; 它使您可以捕獲表單數據并以更加平滑和集成的方式自動綁定到Bean對象。 JSF值得在以后的帖子中使用自己的主題。
翻譯自: https://www.javacodegeeks.com/2015/01/ee-servlet-3-simple-form-processing.html
總結
以上是生活随笔為你收集整理的EE Servlet 3:简单表单处理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。