亂碼問題解決方案:
- 所有能設置編碼的地方都統一設置 : 數據庫,數據庫字段,Servlet程序,請求,響應 , 前端,瀏覽器。
JSP取得項目的路徑
${pageContext.request.contextPath}
Request對象
public class RequestDemo01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查看request對象的方式
System.out.println(request.getContextPath()); //獲得web項目路徑
System.out.println(request.getRequestURI()); //請求的URL路徑
//Remote 遠程
System.out.println(request.getRemoteUser()); //獲得遠程的用戶名
System.out.println(request.getRequestedSessionId()); //獲得SessionId;
System.out.println(request.getServletPath()); //請求servlet的url
System.out.println(request.getLocalAddr()); //獲得本地地址 防火牆
System.out.println(request.getLocalName()); //獲得本地名字
System.out.println(request.getLocalPort()); //獲得訪問的端口號
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
Request對象接收前端用戶提交的參數
- 寫前端註冊頁面
-表單的提交方式 get/post
-表單提交的位置 action:服務項目的路徑/servlet對應的請求url
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>註冊</title>
</head>
<body>
<%--
JSP的註釋
--%>
<%--
Form表單
action:代表要提交的路徑,表單要提交到哪裏 ,可以提交到一個Servlet
//提交到Servlet需要,獲取到Web項目的路徑下的Servlet
method: 提交表單的方式
--%>
<h1>註冊</h1>
<form action="${pageContext.request.contextPath}/r2" method="post">
<p>用戶名:<input type="text" name="username"></p>
<p>密碼:<input type="password" name="password"></p>
<p>
<input type="submit">
<input type="reset">
</p>
</form>
</body>
</html>
- 寫處理前端提交信息的Servlet
- 接收前端傳遞的控件信息, request.getParameter(“控件的name‘);
//處理前端提交過來的數據
public class RequestDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通過HttpServletRequest獲取前端用戶提交的信息
//req.getParameterValues(); 獲得前端傳遞的控件信息,通過控件的name;但是可以接受多個參數的控件,比如(多選框....)
//req.getParameter(); 獲得前端傳遞的控件信息,通過控件的name;
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
//連接數據庫,比較數據庫中的信息是否匹配
if (username.equals("admin")&&password.equals("1234567")){
System.out.println("登錄成功!"); //跳轉到成功頁面
}else {
System.out.println("登錄失敗!"); //提示重新註冊
}
System.out.println(username);
System.out.println(password);
}
}
- 配置web.xml
- 配置對應的XML文件
<servlet>
<servlet-name>RequsetDemo02</servlet-name>
<servlet-class>com.kuang.servlet.RequestDemo02</servlet-class>
</servlet>
<!--=====================================================-->
<servlet-mapping>
<servlet-name>RequsetDemo02</servlet-name>
<url-pattern>/r2</url-pattern>
</servlet-mapping>
- 提交測試
- 檢查英文提交情況,服務器是否接收成功!
- 提交中文,看看亂碼情況
- 設置編碼統一,解決亂碼問題;
Request實現請求轉發
public class FormServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//處理亂碼
req.setCharacterEncoding("UTF-8");
//處理前端的請求
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("接收到的用戶名:"+username+"\n密碼:"+password+"\n愛好:");
String[] hobbies = req.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
//重定向:服務器告訴客戶端你應該請求另外一個地址; (地址欄會變)
//resp.sendRedirect("url");
//轉發:服務器把這個請求轉向另外一個Servlet去處理; (地址欄不會變)
//RequestDispatcher ,需要使用RequestDispatcher來進行處理,我們需要獲得這個類
//參數就是他要轉發到的頁面
/*
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/success.jsp");
requestDispatcher.forward(req,resp);
*/
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
req.getRequestDispatcher("/success.jsp").forward(req,resp);
}
}
轉發和重定向的區別
重定向:服務器告訴客戶端,你去請求另外一個地址;客戶端行爲
-
地址欄會變
-
不能攜帶參數
轉發:服務器自己轉發到服務器上的另一個請求; 服務器行爲
- 地址欄不會變
- 可以攜帶參數