javaweb使用Thymeleaf 最凝練的CRUD項目-中
6、顯示首頁
①目標(biāo)
瀏覽器訪問index.html,通過首頁Servlet,渲染視圖,顯示首頁。
②思路
③代碼
[1]創(chuàng)建PortalServlet
<servlet>
<servlet-name>PortalServlet</servlet-name>
<servlet-class>com.atguigu.demo.servlet.PortalServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PortalServlet</servlet-name>
<url-pattern>/index.html</url-pattern>
</servlet-mapping>
Servlet代碼:
public class PortalServlet extends ViewBaseServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String viewName = "portal";
super.processTemplate(viewName, request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
[2]創(chuàng)建portal.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>士兵信息管理系統(tǒng)</title>
</head>
<body>
<a th:href="@{/SoldierServlet?method=showList}">顯示士兵信息列表</a>
</body>
</html>
7、顯示列表
①目標(biāo)
在目標(biāo)頁面顯示所有士兵信息,士兵信息是從數(shù)據(jù)庫查詢出來的
②思路
③代碼
[1]ModelBaseServlet
創(chuàng)建這個基類的原因是:我們希望每一個模塊能夠?qū)?yīng)同一個Servlet,
這個模塊所需要調(diào)用的所有方法都集中在同一個Servlet中。
如果沒有這個ModelBaseServlet基類,我們doGet()、doPost()方法可以用來處理請求,
這樣一來,每一個方法都需要專門創(chuàng)建一個Servlet(就好比咱們之前的LoginServlet、RegisterServlet其實都應(yīng)該合并為UserServlet)。
public class ModelBaseServlet extends ViewBaseServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 在doGet()方法中調(diào)用doPost()方法,這樣就可以在doPost()方法中集中處理所有請求
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.從請求參數(shù)中獲取method對應(yīng)的數(shù)據(jù)
String method = request.getParameter("method");
// 2.通過反射調(diào)用method對應(yīng)的方法
// ①獲取Class對象
Class<? extends ModelBaseServlet> clazz = this.getClass();
try {
// ②獲取method對應(yīng)的Method對象
Method methodObject = clazz.getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class);
// ③打開訪問權(quán)限
methodObject.setAccessible(true);
// ④通過Method對象調(diào)用目標(biāo)方法
methodObject.invoke(this, request, response);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
[2]SoldierDao.selectSoldierList()
接口方法:
public interface SoldierDao {
List<Soldier> selectSoldierList();
}
實現(xiàn)類方法:
public class SoldierDaoImpl extends BaseDao<Soldier> implements SoldierDao {
@Override
public List<Soldier> selectSoldierList() {
String sql = "select soldier_id soldierId,soldier_name soldierName,soldier_weapon soldierWeapon from t_soldier";
return getBeanList(Soldier.class, sql);
}
}
[3]SoldierService.getSoldierList()
接口方法:
public interface SoldierService {
List<Soldier> getSoldierList();
}
實現(xiàn)類方法:
public class SoldierServiceImpl implements SoldierService {
private SoldierDao soldierDao = new SoldierDaoImpl();
@Override
public List<Soldier> getSoldierList() {
List<Soldier> soldierList = soldierDao.selectSoldierList();
return soldierList;
}
}
[4]SoldierServlet.showList()
實現(xiàn)步驟
1.調(diào)用Service方法獲取集合數(shù)據(jù)
2.將集合數(shù)據(jù)存入請求域
3.渲染視圖(在渲染的過程中,已經(jīng)包含了轉(zhuǎn)發(fā))
protected void showList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.調(diào)用Service方法獲取集合數(shù)據(jù)
List<Soldier> soldierList = soldierService.getSoldierList();
// 2.將集合數(shù)據(jù)存入請求域
request.setAttribute("soldierList", soldierList);
// 3.渲染視圖(在渲染的過程中,已經(jīng)包含了轉(zhuǎn)發(fā))
processTemplate("list", request, response);
}
8、刪除功能
①目標(biāo)
點擊頁面上的超鏈接,把數(shù)據(jù)庫表中的記錄刪除。
②思路
[1]先不考慮后續(xù)
[2]加上后續(xù)返回響應(yīng)頁面
③代碼
[1]完成刪除超鏈接
<a th:href="@{/SoldierServlet(soldierId=${soldier.soldierId},method='remove')}">刪除</a>
關(guān)于@{地址}附加請求參數(shù)的語法格式:
- 只有一個請求參數(shù):@{地址(請求參數(shù)名=普通字符串)}或@{地址(請求參數(shù)名=${需要解析的表達(dá)式})}
- 多個請求參數(shù):@{地址(名=值,名=值)}
官方文檔中的說明如下:
[2]Servlet方法
1.從請求參數(shù)中獲取士兵信息的id值
實現(xiàn)步驟
2.將集合數(shù)據(jù)存入請求域
實現(xiàn)方案
方案一:還是直接前往list.html,需要重新查詢soldierList數(shù)據(jù),代碼重復(fù)
方案二:直接調(diào)用隔壁的showList()
方案三:通過請求轉(zhuǎn)發(fā)的方式間接調(diào)用showList()方法
方案四:通過請求重定向的方式間接調(diào)用showList()方法文章來源:http://www.zghlxwxcb.cn/news/detail-582327.html
protected void remove(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.從請求參數(shù)中獲取士兵信息的id值
String soldierId = request.getParameter("soldierId");
// 2.調(diào)用Service方法執(zhí)行刪除操作
soldierService.remove(soldierId);
// 3.后續(xù)……
// 方案一:還是直接前往list.html,需要重新查詢soldierList數(shù)據(jù),代碼重復(fù)
// 1.調(diào)用Service方法獲取集合數(shù)據(jù)
// List<Soldier> soldierList = soldierService.getSoldierList();
// 2.將集合數(shù)據(jù)存入請求域
// request.setAttribute("soldierList", soldierList);
// processTemplate("list", request, response);
// 方案二:直接調(diào)用隔壁的showList()
// 也能實現(xiàn)需求,但是總感覺這樣調(diào)用方法破壞了程序的結(jié)構(gòu)
// showList(request, response);
// 方案三:通過請求轉(zhuǎn)發(fā)的方式間接調(diào)用showList()方法
// request.getRequestDispatcher("/SoldierServlet?method=showList").forward(request, response);
// 方案四:通過請求重定向的方式間接調(diào)用showList()方法
response.sendRedirect(request.getContextPath() + "/SoldierServlet?method=showList");
}
[3]Service方法
@Override
public void remove(String soldierId) {
soldierDao.delete(soldierId);
}
[4]Dao方法
@Override
public void delete(String soldierId) {
String sql = "delete from t_soldier where soldier_id=?";
update(sql, soldierId);
}
9、前往新增信息的表單頁面
①創(chuàng)建超鏈接
<a th:href="@{/SoldierServlet?method=toAddPage}">前往新增頁面</a>
②Servlet
protected void toAddPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processTemplate("add-page", request, response);
}
③創(chuàng)建表單頁面
文章來源地址http://www.zghlxwxcb.cn/news/detail-582327.html
<form th:action="@{/SoldierServlet}" method="post">
<input type="hidden" name="method" value="saveSoldier" />
士兵姓名:<input type="text" name="soldierName" /><br/>
士兵武器:<input type="text" name="soldierWeapon" /><br/>
<button type="submit">保存</button>
</form>
到了這里,關(guān)于javaweb使用Thymeleaf 最凝練的CRUD項目-中的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!