1. 程式人生 > >[Shiro] - shiro之SSM中的使用

[Shiro] - shiro之SSM中的使用

frame red utf-8 tdi sel finally int show query

在學習shiro的途中,在github發現了一個開源項目,所需的控件剛好是自己要學習的方向.

雖然還要學習完ssm的shiro與springboot的shiro,以及接下來的種種控件和類庫,但學習這個開源項目刻不容緩

[SSM的shiro使用]

SSM簡單的說,就是SpringMVC負責web部分,mybatis負責數據庫部分,否則沒有mybatis要寫的jdbc是很費時間的.

所以基於ssm的shiro項目,就是Servlet部分修改為SpringMVC,數據庫部分,修改為Mybatis,然後把shiro集成進去,用這樣一個思路來把項目實現.

老式Servlet:

package
com.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中的使用