[Shiro] - shiro之SSM中的使用
在學習shiro的途中,在github發現了一個開源項目,所需的控件剛好是自己要學習的方向.
雖然還要學習完ssm的shiro與springboot的shiro,以及接下來的種種控件和類庫,但學習這個開源項目刻不容緩
[SSM的shiro使用]
SSM簡單的說,就是SpringMVC負責web部分,mybatis負責數據庫部分,否則沒有mybatis要寫的jdbc是很費時間的.
所以基於ssm的shiro項目,就是Servlet部分修改為SpringMVC,數據庫部分,修改為Mybatis,然後把shiro集成進去,用這樣一個思路來把項目實現.
老式Servlet:
packagecom.ykmimi.gobang.servlet; import java.io.IOException; import java.io.PrintWriter; 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 LognServlet */ @WebServlet(description = "五子棋登陸", urlPatterns = { "/login" }) public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); /////* 獲取用戶名和密碼 String username = request.getParameter("username"); String password = request.getParameter("password"); PrintWriter pw = response.getWriter(); if(username.equals("admin") && password.equals("admin")) { pw.print("登陸成功!??"); request.getRequestDispatcher("gobang.jsp"); }else { pw.print("登陸失敗,請核對賬戶及密碼.??"); // request.getRequestDispatcher(""); } } /** * @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); } }
而SpringMVC:
package com.ykmimi.controller; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import com.ykmimi.bean.User; @Controller public class UserController { @RequestMapping("login") public String login(User u,ModelMap map,HttpSession session) { System.out.println(u.getName()+":"+u.getPassword()); /*map.put("uname", u.getName()); map.put("upassword", u.getPassword());*/ session.setAttribute("User", u); return "show"; } }
可以看出Servlet的方式是通過request,response配合doGet,doPost請求進行數據的傳遞,而
SpringMVC是通過將一整個數據封裝為bean對象,繼而返回頁面或者返回@ResponseBody形式(JSON).
上面將整個User用戶放入了session中,這個好像不是很提倡的做法,不過這裏是做個測試.
再看一眼老式的JDBC:
package com.ykmimi.ipchecker.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.ykmimi.ipchecker.entity.SearchingData; import com.ykmimi.ipchecker.util.JDBCUtil; public class IPAddressDao { /////* 插入新數據到表addressIp public void insertSomeData(SearchingData sdata) throws SQLException, ClassNotFoundException { Connection conn = null; PreparedStatement ps = null; String sql = "insert into addressIp values(nextval(‘seq_addressIp‘),?,?,current_date)"; try { conn= JDBCUtil.getConnection(); ps = conn.prepareStatement(sql); ps.setString(1, sdata.getIpDomain()); ps.setString(2, sdata.getIp()); ps.executeUpdate(); }finally { JDBCUtil.close(null, ps, null); } } }
當使用之前老式的JDBC時,要分別對insert,select,update,delete等操作進行區分,牽扯到的有將不同的語句執行不同的方法.
比如select查詢要執行executeQuery(),而其它的執行上面代碼中的executeUpdate(),以及每個SQL語句都將寫在java類中,
這與"高內聚,低耦合"的Java信條不符合,(比如SQL要進行更改時),那麽就是要將SQL語句進行在解耦,Mybatis框架實現了這一操作.
Mybatis可以參考之前ukzq自己寫的兩篇博客 Mybatis體系結構 Mybatis基本工作原理
[]
[Shiro] - shiro之SSM中的使用