JAVA后臺
-
servlet(控制器)
-
service(服務邏輯)
-
dao(數(shù)據(jù)查詢)
-
utils(工具類)
-
entity(實體類Bean)
servlet
控制器扼雏、過濾器等
主要用于進行頁面數(shù)據(jù)轉(zhuǎn)發(fā)涛漂,定向頁面
-
配置url
1摆马、通過注釋定義路徑
@WebServlet("/servletname")
2、通過web.xml
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.igeek.shop.web.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/user</url-pattern>
</servlet-mapping>
-
Servlet內(nèi)容
繼承HttpServlet
public class UserServlet extends HttpServlet
- 一般只需重寫doGet和doPost方法
- url訪問方式 - get|post請求
- 在一個方法中調(diào)用另一個方法 - 只需在一個方法中可實現(xiàn)所有操作
一個對象對應一個Servlet - 區(qū)分不同的操作
例如地址中的method
使用不同關鍵字唤崭,使用“聘惦?
”分割:
url?method=login | reg | logout
-
doGet/doPost內(nèi)容
如果有使用中文的情況記得設置中文參數(shù)數(shù)據(jù)的編碼方式
request.setCharacterEncoding("UTF-8");
-
獲取請求request參數(shù)數(shù)據(jù) - 區(qū)分不同操作
//以登陸作為示例
String method = request.getParameter("method");
//取出request中method后數(shù)據(jù)
if("login".equals(method)) { //對數(shù)據(jù)進行判斷以確定其流向
login(request, response);
} else if("reg".equals(method)) {
reg(request, response);
}
-
構造login函數(shù)
private UserService userService = new UserService();//定義service類對象
protected void login(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//2:獲取請求request參數(shù)數(shù)據(jù)
//?拼接參數(shù)數(shù)據(jù) form表單中參數(shù)數(shù)據(jù)
String userAccount = request.getParameter("userAccount");
String password = request.getParameter("password");
//3: 把數(shù)據(jù)帶至數(shù)據(jù)庫端實現(xiàn)數(shù)據(jù)操作 - 調(diào)用Service業(yè)務層對應的方法
//System.out.println(userAccount + "\t" + password);
User user = userService.login(userAccount, password);//返回user對象
}
-
Service內(nèi)容
Service - 業(yè)務
- 對象操作方法
- 后臺驗證(金融锦援、保險...)
- 邏輯處理
- 調(diào)用數(shù)據(jù)庫層 - 實現(xiàn)數(shù)據(jù)具體操作
public class UserService {
private UserDao userDao = new UserDao();//定義數(shù)據(jù)層對象
public Userlogin(String userAccount, String password) {
//4: 調(diào)用Dao數(shù)據(jù)層 - 實現(xiàn)數(shù)據(jù)庫操作
return userDao.login(userAccount, password);
}
}
-
dao內(nèi)容
通過調(diào)用utils中的工具類,實現(xiàn)對應數(shù)據(jù)庫中數(shù)據(jù)操作
public class UserDao {
public Userlogin(String userAccount, String password) {
Connection con = DBUtil.getConnection();//工具類utiles中方法--連接數(shù)據(jù)庫
PreparedStatement stmt = null;//初始化查詢語句
ResultSet rs = null;
User user = null;
//5: 定義出sql語句
String sql = "select * from user where userName = ? and password = md5(?)";
try {
stmt = con.prepareStatement(sql); //Connection獲取語句處理
//若sql中有?參數(shù) - 設置?對應的數(shù)據(jù) setType(index, value) index - 從1開始
stmt.setString(1, userAccount);
stmt.setString(2, password);
/*
* 執(zhí)行ARUD
* executeQuery() - select
* executeUpdate() - insert湖笨、 update旗扑、 delete
*/
rs = stmt.executeQuery();
/*
* 對查詢的結果處理 - 數(shù)據(jù)封裝為對象
* rs.next() - boolean
* rs.getType(index|列名)
*/
if(rs.next()) {
user = new User();
user.setUserId(rs.getInt("userid")); //結果集處理 - 每個列數(shù)據(jù)封裝至對象
user.setUserName(rs.getString(2));
user.setSex(rs.getString("sex"));
user.setEmail(rs.getString("email"));
user.setName(rs.getString("name"));
user.setBirthDay(rs.getDate("birthDay"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally { //關閉數(shù)據(jù)庫相關操作
DBUtil.allClose(rs, stmt, con);
}
return user;
}
}
-
工具類
兩種方法
JDBC - API
- 物理連接操作
- 加載數(shù)據(jù)庫驅(qū)動jar - 拷貝至WEB-INF/lib中
- 加載驅(qū)動程序類
- DriverManager.getConection()
- 關閉相關操作
數(shù)據(jù)庫連接池
public class DBUtil {
private static Connection connection;
//jdbc方法
// public static Connection getConnection() {
// try {
// Class.forName("com.mysql.jdbc.Driver");
// connection = DriverManager.getConnection("jdbc:mysql://192.168.12.2:3306/ebuy",
// "igeek", "igeek");
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// return connection;
// }
private static DataSource dataSource=null;
static{
dataSource = new ComboPooledDataSource("mysql");
//讀取配置文件 - 讀取mysql相關配置
}
/**
* 獲取數(shù)據(jù)庫連接
* @return
*/
public static Connection getConnection(){
try {
connection = dataSource.getConnection(); //獲取連接池中的一個連接
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
/**
* 關閉數(shù)據(jù)庫相關操作
* ResultSet - select查詢的結果集
* PreparedStatement - 語句處理 java語句轉(zhuǎn)換為數(shù)據(jù)庫中可執(zhí)行的sql語句
*/
public static void allClose(ResultSet rs, PreparedStatement stmt, Connection con) {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
-
entity類(Bean實體)
- Java實體對象 - 表
- JavaBean定義
- private的屬性 + setter與getter方法
- 無參構造器
- 實現(xiàn)序列化 - 給定唯一系列化UID
- 網(wǎng)絡、文件傳遞存儲對象
public class User implements Serializable {
private static final long serialVersionUID = 1520708863050632827L;
private int userId;
private String userName; //用戶名
private String password;
private String sex;
private String email;
private String name; //姓名
private Date birthDay;
//Get和Set方法省略
}
-
Servlet對查詢回傳數(shù)據(jù)進行處理
protected void login(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
........
//6:對返回的結果進行處理 - 依據(jù)流向 - 跳轉(zhuǎn)至下一個顯示頁面
if(user == null) { //用戶名或密碼錯誤
/*
* 傳遞頁面所需數(shù)據(jù)
* request - 數(shù)據(jù)只在下一個頁面中使用 - 必須結合forward跳轉(zhuǎn)
* session
* setAttribute("name", value)
*/
request.setAttribute("info", "用戶名或密碼錯誤!");
//跳轉(zhuǎn)至下一個url對應的頁面
request.getRequestDispatcher("/login.jsp").forward(request, response);
} else {
/*
* 數(shù)據(jù)在多個頁面中使用
* session - 當前用戶 - 跨頁面數(shù)據(jù)傳遞
*/
HttpSession sesison = request.getSession();
sesison.setAttribute("user", user);
//無request傳遞數(shù)據(jù) - 都可以
// request.getRequestDispatcher("/index.jsp").forward(request, response);
response.sendRedirect(request.getServletContext().getContextPath() + "/index.jsp");
// 登陸成功跳轉(zhuǎn)至主頁面
}
}
-
頁面回收Info信息并顯示錯誤
<div class="col-sm-6" id="logintip" style="color: red; font-size: 13px;">
<%--
%= 對象不存在顯示
nullEL表達式顯示空
--%>
${requestScope.info}
</div>
-
EL表達式
<%-- Jsp注釋 - 即可注釋java部分也可注釋html部分
${內(nèi)置對象.name}
requestScope
sessionScope - 獲取servlet傳遞的setAttribute的數(shù)據(jù)
若name的值為基本類型或String - 直接 內(nèi)置對象.name
若name的值為實體對象 內(nèi)置對象.name.屬性
pageContext - 獲取jsp內(nèi)置對象
${pageContext.request.contextPath} web上下文 /項目名稱
--%>
源碼:
鏈接: https://pan.baidu.com/s/17FPGWghph1qkNZiPn_6uIA 密碼: teje