package com.bjsxt.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bjsxt.pojo.User;
import com.bjsxt.service.LoginService;
import com.bjsxt.service.impl.LoginServiceImpl;
/**
* 請求中文亂碼解決:
* 1、使用String進行數據重新編碼
* uname=new String(uname.getBytes("iso8859-1"),"utf-8");
* 2、使用公共配置
* get方式:
* 步驟一:req.setCharacterEncoding("utf-8");
* 步驟二:
* 在tomcat的目錄下的conf目錄中修改server.xml文件:在Connector標簽中增加屬性 useBodyEncodingForURI="true"
* post方式:
* req.setCharacterEncoding("utf-8");
* Servlet流程總結:
* 瀏覽器發起請求到服務器(請求)
* 服務器接受瀏覽器的請求,進行解析,創建request對象存儲請求數據
* 服務器調用對應的servlet進行請求處理,並將request對象作為實參傳遞給servlet的方法
* servlet的方法執行進行請求處理
* //設置請求編碼格式
* //設置響應編碼格式
* //獲取請求信息
* //處理請求信息
* //創建業務層對象
* //調用業務層對象的方法
* //響應處理結果
*請求轉發學習:
* 作用:實現多個servlet聯動操作處理請求,這樣避免代碼冗余,讓servlet的職責更加明確。
* 使用:
* req.getRequestDispatcher("要轉發的地址").forward(req, resp);
* 地址:相對路徑,直接書寫servlet的別名即可。
* 特點:
* 一次請求,瀏覽器地址欄信息不改變。
* 注意:
* 請求轉發后直接return結束即可。
*reuqet作用域:
* 解決了一次請求內的servlet的數據共享問題
*重定向:
* 解決了表單重復提交的問題,以及當前servlet無法處理的請求的問題。
* 使用:
* resp.sendRedirect(String uri);
* 示例:
* resp.sendRedirect("/login/main");
* 特點:
* 兩次請求,兩個request對象。
* 瀏覽器地址欄信息改變
* 時機:
* 如果請求中有表單數據,而數據又比較重要,不能重復提交,建議使用重定向。
* 如果請求被Servlet接收后,無法進行處理,建議使用重定向定位到可以處理的資源。
*
* @author MyPC
*/
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//設置請求編碼格式:
req.setCharacterEncoding("utf-8");
//設置響應編碼格式
resp.setContentType("text/html;charset=utf-8");
//獲取請求信息
String uname=req.getParameter("uname");
//uname=new String(uname.getBytes("iso8859-1"),"utf-8");//使用String進行數據重新編碼
String pwd=req.getParameter("pwd");
System.out.println(uname+":"+pwd);
//處理請求信息
//獲取業務層對象
LoginService ls=new LoginServiceImpl();
User u=ls.checkLoginService(uname, pwd);
System.out.println(u);
//響應處理結果
if(u!=null){
//創建Cookie信息實現三天免登錄。
Cookie c=new Cookie("uid", u.getU_id()+"");
//設置Cookie的有效期
c.setMaxAge(3*24*3600);
c.setPath("/login/ck");
//添加Cookie信息
resp.addCookie(c);
//請求轉發
//req.getRequestDispatcher("main").forward(req, resp);
//重定向
resp.sendRedirect("/login/main");
return;
}else{
//使用request對象實現不同Servlet的數據流轉
req.setAttribute("str", "用戶名或密碼錯誤");
//使用請求轉發
req.getRequestDispatcher("page").forward(req, resp);
return;
}
}
}