JavaWebDay26(旅遊網專案2)36
阿新 • • 發佈:2021-07-21
綜合案例
⦁ 優化Servlet
⦁ 目的
減少Servlet的數量,現在是一個功能一個Servlet,將其優化為一個模組一個Servlet,相當於在資料庫中一張表對應一個Servlet,在Servlet中提供不同的方法,完成使用者的請求。
⦁ BaseServlet編寫:
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("baseServlet的service方法被執行了...");
//完成方法分發
//1.獲取請求路徑
String uri = req.getRequestURI(); // /travel/user/add
System.out.println("請求uri:"+uri);// /travel/user/add
//2.獲取方法名稱
String methodName = uri.substring(uri.lastIndexOf('/') + 1);
System.out.println("方法名稱:"+methodName);
//3.獲取方法物件Method
//誰呼叫我?我代表誰
System.out.println(this);//UserServlet的物件cn.itcast.travel.web.servlet.UserServlet@4903d97e
try {
//獲取方法
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4.執行方法
//暴力反射
//method.setAccessible(true);
method.invoke(this,req,resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
⦁ UserServlet改寫
將之前的Servlet實現的功能,抽取到UserServlet中的不同方法中實現,並且將UserService建立抽取到成員變數位置
@WebServlet("/user/*") // /user/add /user/find
public class UserServlet extends BaseServlet {
//宣告UserService業務物件
private UserService service = new UserServiceImpl();
/**
* 註冊功能
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//驗證校驗
String check = request.getParameter("check");
//從sesion中獲取驗證碼
HttpSession session = request.getSession();
String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
session.removeAttribute("CHECKCODE_SERVER");//為了保證驗證碼只能使用一次
//比較
if(checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)){
//驗證碼錯誤
ResultInfo info = new ResultInfo();
//註冊失敗
info.setFlag(false);
info.setErrorMsg("驗證碼錯誤");
//將info物件序列化為json
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(info);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
return;
}
//1.獲取資料
Map<String, String[]> map = request.getParameterMap();
//2.封裝物件
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//3.呼叫service完成註冊
//UserService service = new UserServiceImpl();
boolean flag = service.regist(user);
ResultInfo info = new ResultInfo();
//4.響應結果
if(flag){
//註冊成功
info.setFlag(true);
}else{
//註冊失敗
info.setFlag(false);
info.setErrorMsg("註冊失敗!");
}
//將info物件序列化為json
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(info);