網上寫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裏,這裏就不更新了,但是希望可以注意一下~
ps.這裏只能實現通過submit做一個表單提交,但是對於很多網頁來說需要或許數據庫也要調用servlet,又或者想要在提交前做一些什麼判斷,這樣子的話可以嘗試一下ajax來跳轉到servlet。