JavaWeb學習——Servlet+表單提交

網上寫servlet的大神不少,記錄一下遇到的問題。

配置是ecplise+tomcat9.0

關於servlet的創建方法:項目右鍵->new->servlet,然後package和class的名字隨便命名,之後全部默認或者點finish就好。

  • servlet配置現在有兩種,網上比較多的是用xml來的,但是新版的可以通過 @配置註解,新生成的servlet是自帶的,不需要任何配置
  • 一開始找到了一個直接用service的,但似乎它直接擴展了底層的內容,可以用doget和dopost來解決
  • 中文字符亂碼問題,需要設置response.setCharacterEncoding("UTF-8")和request.setCharacterEncoding("UTF-8")。需要放在最前面,否則可能在傳入值了以後就沒用了。

這裏寫的是一個實現登錄功能的表單提交的servlet,項目名字叫做Servlet_try4,表單一共就user和password兩個內容,最後跳轉到hellp.jsp顯示登錄狀態

關於表單部分,在form里加上這個就好

<form action="servlet"  method="post">  

至於表單內部的內容,記得寫上name,servlet是根據name來獲取的。 

原來代碼:

package servlet.study;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Servlet_try4
 */
@WebServlet("/Servlet_try4")
public class Servlet_try4 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Servlet_try4() {
		super();
		// TODO Auto-generated constructor stub
	}

	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 設置字符編碼
		request.setCharacterEncoding("utf8");
		// 從request對象中獲取username,password
		String username = request.getParameter("user");
		String password = request.getParameter("password");

		// 給將要request的對象寫入信息
		request.setAttribute("user", username);
		request.setAttribute("password", password);

		// 將頁面轉發到歡迎頁面
		RequestDispatcher dispatcher = request.getRequestDispatcher("/hello.jsp");
		dispatcher.forward(request, response);
	}

	/**
	 * @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());
	}

	/**
	 * @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);
	}

}

 

改進代碼:

package servlet.study;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Servlet_try4
 */
@WebServlet("/Servlet_try4")
public class Servlet_try4 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Servlet_try4() {
		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());

		// 設置字符編碼
		request.setCharacterEncoding("UTF-8");

		// 從request對象中獲取username,password
		String username = request.getParameter("user");
		String password = request.getParameter("password");

		// 給將要request的對象寫入信息
		request.setAttribute("user", username);
		request.setAttribute("password", password);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");

		// TODO Auto-generated method stub
		doGet(request, response);

		// 將頁面轉發到歡迎頁面
		RequestDispatcher dispatcher = request.getRequestDispatcher("/hello.jsp");
		dispatcher.forward(request, response);
	}

}

唔。。雖然這個可以成功,但是在後續學習上發現對於表單提交,最好把doGet的內容全部寫到doPost裏,這裏就不更新了,但是希望可以注意一下~

附:doGet()和doPost()的區別

 

ps.這裏只能實現通過submit做一個表單提交,但是對於很多網頁來說需要或許數據庫也要調用servlet,又或者想要在提交前做一些什麼判斷,這樣子的話可以嘗試一下ajax來跳轉到servlet。

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