国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > 大數(shù)據(jù)從入門(mén)到深入:JavaEE 之 動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)基礎(chǔ) JSP實(shí)戰(zhàn)優(yōu)化:使用分層技術(shù)處

大數(shù)據(jù)從入門(mén)到深入:JavaEE 之 動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)基礎(chǔ) JSP實(shí)戰(zhàn)優(yōu)化:使用分層技術(shù)處

時(shí)間:2023-08-30 01:06:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-08-30 01:06:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

大數(shù)據(jù)從入門(mén)到深入:JavaEE 之 動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)基礎(chǔ) JSP實(shí)戰(zhàn)優(yōu)化:使用分層技術(shù)處理業(yè)務(wù):

第2章 JSP實(shí)戰(zhàn)優(yōu)化:使用分層技術(shù)處理業(yè)務(wù)邏輯

2.1 軟件分層概述

剛才我們?cè)趯?xiě)代碼的時(shí)候其實(shí)大家應(yīng)該也能發(fā)現(xiàn),JSP頁(yè)面其實(shí)作為頁(yè)面來(lái)說(shuō)還是承載了它 不該承載的很多東西,比如數(shù)據(jù)庫(kù)操作! JSP作為請(qǐng)求發(fā)送 請(qǐng)求處理 數(shù)據(jù)展示的媒介,應(yīng)該發(fā)揮它很好的請(qǐng)求與接收的任務(wù),但是現(xiàn)在 我們什么都用JSP去寫(xiě),這樣無(wú)形中增加了JSP的負(fù)擔(dān)! 那么怎么緩解現(xiàn)在JSP的尷尬境地呢?這時(shí)候你就需要用分層原則來(lái)設(shè)計(jì)你的代碼了!

2.1.1 為什么需要軟件分層開(kāi)發(fā)

JSP開(kāi)發(fā)時(shí)分兩層的弊端

既然分兩層是有弊端的,那么我們就分三層來(lái)處理業(yè)務(wù)

2.2 軟件分層原則(了解)

1. 上層依賴其下層,依賴關(guān)系不跨層 : 表示層不能直接訪問(wèn)數(shù)據(jù)訪問(wèn)層;
2. 上層調(diào)用下層的結(jié)果,取決于下層的實(shí)現(xiàn) : 下一層不能調(diào)用上一層,下一層不依賴上一層; 3. 上層的改變不會(huì)影響下一層, 下層的改變會(huì)影響上一層得到的結(jié)果
4. 在上一層中不能出現(xiàn)下一層的概念 : 分工明確,各司其職

簡(jiǎn)單來(lái)說(shuō),我們要把以前我們都寫(xiě)道一起的代碼都分開(kāi)來(lái)寫(xiě),一分多,然后用的時(shí)候再靈活組織 到一起,這叫模塊化設(shè)計(jì)?
這種模塊化的思想是人類(lèi)社會(huì)工業(yè)生產(chǎn)的普遍思想,通俗來(lái)說(shuō),你可以想一下,拿西紅柿炒雞蛋 來(lái)說(shuō),為什么自然界提供的是
西紅柿 和 雞蛋 兩種物質(zhì) 而不直接提供西紅柿炒雞蛋這種物質(zhì)呢?

2.3 軟件分層優(yōu)勢(shì)

2.4 軟件分層實(shí)施

重構(gòu)我們的CURD項(xiàng)目
一般軟件分層分為三層 數(shù)據(jù)層 業(yè)務(wù)層 控制層

1. 數(shù)據(jù)層 叫做 DAO(Data Access Object)層 專(zhuān)門(mén)用來(lái)處理數(shù)據(jù)
2. 業(yè)務(wù)層 叫做 Service/Business 層 專(zhuān)門(mén)用來(lái)處理業(yè)務(wù)邏輯
3. 控制層 叫做 controller/WEB 層 專(zhuān)門(mén)負(fù)責(zé)頁(yè)面的控制

DAO 層 和 Service層都是有接口和實(shí)現(xiàn)類(lèi)這種設(shè)計(jì)原則實(shí)現(xiàn)的

接口負(fù)責(zé)設(shè)計(jì)本層的結(jié)構(gòu) 實(shí)現(xiàn)類(lèi)幫助其實(shí)現(xiàn)內(nèi)容 并且使用接口也能減少類(lèi)與類(lèi)之間的耦合 所以我們現(xiàn)在的項(xiàng)目 可以把JSP中的代碼抽取出來(lái),放到DAO層和Service層這樣JSP就可以專(zhuān)心做頁(yè)面控制了?

順便一提的是 除了 DAO層 service層 和 controller層之外 我們?nèi)绻玫狡渌δ苓€可以分 很多個(gè)其他層來(lái)操作

比如

專(zhuān)門(mén)存放實(shí)體類(lèi)的 層 我們叫 實(shí)體層 用 entity 表示

專(zhuān)門(mén)存放工具類(lèi)的 層 我們叫 工具層 用 utils 表示

所以此時(shí)我們要重構(gòu)JSP的CURD項(xiàng)目 首先創(chuàng)建項(xiàng)目完事后我們應(yīng)該這樣分層(分包)開(kāi)發(fā)項(xiàng)目

創(chuàng)建分層效果如下 :

手動(dòng)創(chuàng)建包太累?來(lái)在src上創(chuàng)建一個(gè)類(lèi)叫AutoCreatePackage

一定要放在src包下 也就是顯示(default package)

創(chuàng)建好類(lèi)之后粘貼下面的代碼

import java.io.File;/** * 自動(dòng)創(chuàng)建包工具類(lèi) * @author My * */public class AutoCreatePackage { /** * 自動(dòng)創(chuàng)建包 * * @param args */ public static void main(String[] args) { // 獲取src目錄 String srcdir = System.getProperty("user.dir") + "//src"; // 創(chuàng)建com包 File file = new File(srcdir + "//com"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy包 file = new File(srcdir + "//com//hnxy"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy.entity file = new File(srcdir + "//com//hnxy//entity"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy.utils file = new File(srcdir + "//com//hnxy//utils"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy.dao file = new File(srcdir + "//com//hnxy//dao"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy.service file = new File(srcdir + "//com//hnxy//service"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy.web file = new File(srcdir + "//com//hnxy//web"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy.dao.impl file = new File(srcdir + "//com//hnxy//dao//impl"); // 判斷 if (!file.exists()) { file.mkdir(); } // 創(chuàng)建com.hnxy.service.impl file = new File(srcdir + "//com//hnxy//service//impl"); // 判斷 if (!file.exists()) { file.mkdir(); } System.out.println("所有包創(chuàng)建完畢,請(qǐng)選中src包按F5鍵!"); }}有的同學(xué)會(huì)問(wèn)沒(méi)有放在默認(rèn)包下的話就會(huì)出現(xiàn)下面的報(bào)錯(cuò)

這時(shí)值需要點(diǎn)擊movie....這個(gè)選項(xiàng)會(huì)自動(dòng)移動(dòng)到默認(rèn)包下?

運(yùn)行代碼

運(yùn)行好之后按提示 F5刷新即可!

效果

這幾個(gè)包就都自動(dòng)創(chuàng)建出來(lái)了

開(kāi)始實(shí)現(xiàn) :

1. 新項(xiàng)目導(dǎo)包,工具類(lèi),實(shí)體類(lèi)編寫(xiě)

2. 整理DAO層需求

根據(jù)整理我們可以知道,對(duì)于數(shù)據(jù)操作我們頁(yè)面基本需要以下幾個(gè)功能 :
1) 查詢?nèi)繑?shù)據(jù)
2) 按ID查詢數(shù)據(jù)
3) 添加數(shù)據(jù)
4) 修改數(shù)據(jù)
5) 刪除數(shù)據(jù)
這些功能我們一時(shí)還無(wú)法全部實(shí)現(xiàn),但是我們可以用想法先將DAO層的結(jié)構(gòu)定義好

代碼:

package com.hnxy.dao;import java.util.List;import com.hnxy.entity.Person;/** * 人員表的數(shù)據(jù)庫(kù)操作接口 意義 定義我們現(xiàn)在的思想 * @author My * */public interface PersonDAO { /** * 添加方法 * @param person 要添加的對(duì)象 * @return 返回1 代表添加成功 返回0 代表添加失敗 * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public int insertPerson(Person person)throws Exception; /** * 更新方法 * @param person 要更新的對(duì)象 * @return 返回1 代表更新成功 返回0 代表更新失敗 * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public int updatePerson(Person person)throws Exception; /** * 刪除方法 * @param person 要?jiǎng)h除的對(duì)象 * @return 返回1 刪除成功 返回0 刪除失敗 * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public int deletePerson(Person person)throws Exception; /** * 根據(jù)主鍵ID查詢信息 * @param id 要查詢的數(shù)據(jù)ID * @return 查詢到了 返回對(duì)象 沒(méi)有查詢到 返回null * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public Person findPersonByID(Integer id)throws Exception; /** * 查詢?nèi)?/span> * @return 查詢到了返回對(duì)象list 沒(méi)有查詢到返回null * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public List<Person> findAllPersons()throws Exception;}定義好結(jié)構(gòu)之后我們?cè)傧朕k法去實(shí)現(xiàn),對(duì)于接口的實(shí)現(xiàn)類(lèi),一般我們也會(huì)放到一個(gè)特定的包下, 如果是dao層接口的實(shí)現(xiàn)類(lèi) 就放在dao包下的impl包下

如果是service包下接口的實(shí)現(xiàn)類(lèi),就放在service的impl包下,所以PersonDAO的實(shí)現(xiàn)應(yīng)該是這 個(gè)樣子的:

具體實(shí)現(xiàn)代碼:

package com.hnxy.dao.impl;import java.sql.Connection;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import com.hnxy.dao.PersonDAO;import com.hnxy.entity.Person;import com.hnxy.utils.JdbcUtil;/** * 數(shù)據(jù)庫(kù)操作層的實(shí)現(xiàn)類(lèi) * @author My * */public class PersonDAOImpl implements PersonDAO { @Override public int insertPerson(Person person) throws Exception { // 創(chuàng)建方法的返回值 int count = 0; // 獲取數(shù)據(jù)庫(kù)連接 Connection conn = JdbcUtil.getConn(); // 創(chuàng)建SQL執(zhí)行對(duì)象 QueryRunner qr = new QueryRunner(); // 編寫(xiě)SQL語(yǔ)句 String sql = "insert into person values (null,?,?,?,?)"; // 占位符賦值 Object[] params = {person.getName(),person.getSex(),person.getAge(),person.getFrom()}; // 執(zhí)行 count = qr.update(conn,sql,params); // 關(guān)閉 JdbcUtil.closeConn(conn); // 返回 return count; } @Override public int updatePerson(Person person) throws Exception { // 創(chuàng)建方法的返回值 int count = 0; // 獲取數(shù)據(jù)庫(kù)連接 Connection conn = JdbcUtil.getConn(); // 創(chuàng)建SQL的執(zhí)行對(duì)象 QueryRunner qr = new QueryRunner(); // 編寫(xiě)SQL語(yǔ)句 String sql = "update person set `name`=?,`sex`=?,`age`=?,`from`=? where `id`=?"; // 占位符賦值 Object[] params = {person.getName(),person.getSex(),person.getAge(),person.getFrom(),person.getId()}; // 執(zhí)行 count = qr.update(conn, sql,params); // 關(guān)閉 JdbcUtil.closeConn(conn); // 返回 return count; } @Override public int deletePerson(Person person) throws Exception { // 創(chuàng)建方法的返回值 int count = 0; // 獲取數(shù)據(jù)庫(kù)連接 Connection conn = JdbcUtil.getConn(); // 創(chuàng)建SQL的執(zhí)行對(duì)象 QueryRunner qr = new QueryRunner(); // 編寫(xiě)SQL語(yǔ)句 String sql = "delete from person where `id` = ?"; // 占位符賦值 Object[] params = {person.getId()}; // 執(zhí)行 count = qr.update(conn, sql, params); // 關(guān)閉 JdbcUtil.closeConn(conn); // 返回 return count; } @Override public Person findPersonByID(Integer id) throws Exception { // 創(chuàng)建方法的返回值 Person person = null; // 獲取數(shù)據(jù)庫(kù)連接 Connection conn = JdbcUtil.getConn(); // 創(chuàng)建SQL的執(zhí)行對(duì)象 QueryRunner qr = new QueryRunner(); // 編寫(xiě)SQL語(yǔ)句 String sql = "select * from person where `id` = ?"; // 是否需要占位符賦值? Object[] params = {id}; // 執(zhí)行 person = qr.query(conn, sql,new BeanHandler<Person>(Person.class),params); // 關(guān)閉連接 JdbcUtil.closeConn(conn); // 返回 return person; } @Override public List<Person> findAllPersons() throws Exception { // 創(chuàng)建方法的返回值 List<Person> plist = null; // 獲取數(shù)據(jù)庫(kù)連接 Connection conn = JdbcUtil.getConn(); // 創(chuàng)建SQL執(zhí)行對(duì)象 QueryRunner qr = new QueryRunner(); // 編寫(xiě)SQL語(yǔ)句 String sql = "select * from person"; // 占位符賦值 // 執(zhí)行 plist = qr.query(conn,sql,new BeanListHandler<Person>(Person.class)); // 關(guān)閉 spring 偉大的程序 JdbcUtil.closeConn(conn); // 返回 return plist; }}這樣DAO層開(kāi)發(fā)就完成了,其實(shí)我們可以看到就是這樣分層開(kāi)發(fā)更加規(guī)范更加符合面向?qū)ο?思想,但是其復(fù)雜難度也隨之增加,這也是分層開(kāi)發(fā)不好的一點(diǎn)?

3. 整理Service層需求 service 主要是承上啟下 并且處理業(yè)務(wù)的層,所以此層基本都是為了承接DAO層向頁(yè)面?zhèn)鬟f 數(shù)據(jù)的?所以大多數(shù)情況下service層的編寫(xiě)完全可以參照DAO層來(lái)做

現(xiàn)階段我們還屬于JavaEE技術(shù)的嬰兒期,所以作為一個(gè)嬰兒哪有什么社會(huì)責(zé)任需要你去承擔(dān), 所以我們的業(yè)務(wù)層根據(jù)就沒(méi)有業(yè)務(wù)需要處理只需要完成承上啟下就可以

Service接口的編寫(xiě) :

package com.hnxy.service;import java.util.List;import com.hnxy.entity.Person;/** * 人員表的Service層接口 * @author My * */public interface PersonService { /** * 添加方法 * @param person 要添加的對(duì)象 * @return 返回1 代表添加成功 返回0 代表添加失敗 * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public int insertPerson(Person person)throws Exception; /** * 更新方法 * @param person 要更新的對(duì)象 * @return 返回1 代表更新成功 返回0 代表更新失敗 * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public int updatePerson(Person person)throws Exception; /** * 刪除方法 * @param person 要?jiǎng)h除的對(duì)象 * @return 返回1 刪除成功 返回0 刪除失敗 * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public int deletePerson(Person person)throws Exception; /** * 根據(jù)主鍵ID查詢信息 * @param id 要查詢的數(shù)據(jù)ID * @return 查詢到了 返回對(duì)象 沒(méi)有查詢到 返回null * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public Person findPersonByID(Integer id)throws Exception; /** * 查詢?nèi)?/span> * @return 查詢到了返回對(duì)象list 沒(méi)有查詢到返回null * @throws Exception 聲明一個(gè)我也不知道會(huì)報(bào)什么錯(cuò)的異常 */ public List<Person> findAllPersons()throws Exception;}實(shí)現(xiàn)類(lèi)的編寫(xiě):

package com.hnxy.service.impl;import java.util.List;import com.hnxy.dao.PersonDAO;import com.hnxy.dao.impl.PersonDAOImpl;import com.hnxy.entity.Person;import com.hnxy.service.PersonService;/** * 業(yè)務(wù)層實(shí)現(xiàn)類(lèi) 主要做業(yè)務(wù)操作(針對(duì)客戶的不同需求,然后調(diào)用DAO層完成數(shù)據(jù)封裝) * * @author My * */public class PersonServiceImpl implements PersonService { // 創(chuàng)建DAO層的對(duì)象 private PersonDAO personDAO = new PersonDAOImpl(); @Override public int insertPerson(Person person) throws Exception { return personDAO.insertPerson(person); } @Override public int updatePerson(Person person) throws Exception { return personDAO.updatePerson(person); } @Override public int deletePerson(Person person) throws Exception { return personDAO.deletePerson(person); } @Override public Person findPersonByID(Integer id) throws Exception { return personDAO.findPersonByID(id); } @Override public List<Person> findAllPersons() throws Exception { return personDAO.findAllPersons(); } }3. 頁(yè)面控制器整理

1) 查詢?nèi)康目刂破?

<%@page import="com.hnxy.entity.Person"%><%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="org.apache.commons.dbutils.handlers.BeanListHandler"%><%@page import="java.util.List"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 創(chuàng)建service層對(duì)象 PersonService service = new PersonServiceImpl(); // 執(zhí)行 查詢 肯定獲取一個(gè)model List<Person> persons = service.findAllPersons(); // 保存模型 給 下一個(gè)頁(yè)面展示 request.setAttribute("plist", persons); // 轉(zhuǎn)發(fā) request.getRequestDispatcher("findAll_view.jsp").forward(request, response);%>2) 按ID查詢的控制器

<%@page import="com.hnxy.entity.Person"%><%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="org.apache.commons.dbutils.handlers.BeanHandler"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 刪除業(yè)務(wù) // 第一階段 接收頁(yè)面數(shù)據(jù) // 1. 設(shè)定編碼 request.setCharacterEncoding("UTF-8"); // 2. 接收數(shù)據(jù) String pid = request.getParameter("pid"); // 第二階段 數(shù)據(jù)庫(kù)處理 PersonService service = new PersonServiceImpl(); Person person = service.findPersonByID(Integer.parseInt(pid)); // 第三階段 服務(wù)器響應(yīng) // 保存要更新的信息 request.setAttribute("person", person); // 轉(zhuǎn)發(fā)給下一個(gè)頁(yè)面展示person request.getRequestDispatcher("update.jsp").forward(request, response);%>3) 添加的控制器

<%@page import="com.hnxy.entity.Person"%><%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 添加業(yè)務(wù) // 第一階段 接收數(shù)據(jù) // 1. 設(shè)定頁(yè)面請(qǐng)求字符流的編碼 request.setCharacterEncoding("UTF-8"); // 2. 接收頁(yè)面數(shù)據(jù) String pname = request.getParameter("pname"); String psex = request.getParameter("psex"); String age = request.getParameter("age"); String pfrom = request.getParameter("pfrom"); // 第二階段數(shù)據(jù)庫(kù)處理階段 // 封裝數(shù)據(jù) Person person = new Person(); person.setAge(Integer.parseInt(age)); person.setName(pname); person.setFrom(pfrom); person.setSex(psex); // 創(chuàng)建業(yè)務(wù)層對(duì)象 PersonService service = new PersonServiceImpl(); int count = service.insertPerson(person); // 第三階段 根據(jù)數(shù)據(jù)庫(kù)的處理結(jié)果 進(jìn)行相應(yīng)結(jié)果處理 if(count > 0){ // 添加成功 // 重新定向到查詢?nèi)康捻?yè)面 response.sendRedirect("findAll_server.jsp"); }else{ // 添加失敗 response 響應(yīng)流 String msg = "<script type='text/javascript'>history.go(-1);alert('添加失敗!');</script>"; // 服務(wù)器想給客戶端發(fā)送一段代碼 讓客戶端知道添加失敗了 // 你這段文字到底是什么類(lèi)型的? text/html 那么瀏覽器就把你的這段話當(dāng)做是HTML文本進(jìn)行解析 response.setContentType("text/html; charset=UTF-8"); // 服務(wù)端給客戶端發(fā)送的數(shù)據(jù)類(lèi)型是什么 // 打印回去 out.print(msg); }%>4) 更新的控制器

<%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="com.hnxy.entity.Person"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 添加業(yè)務(wù) // 第一階段 接收數(shù)據(jù) // 1. 設(shè)定頁(yè)面請(qǐng)求字符流的編碼 request.setCharacterEncoding("UTF-8"); // 2. 接收頁(yè)面數(shù)據(jù) String pname = request.getParameter("pname"); String psex = request.getParameter("psex"); String age = request.getParameter("age"); String pfrom = request.getParameter("pfrom"); String pid = request.getParameter("pid"); // 第二階段數(shù)據(jù)庫(kù)處理階段 // 封裝數(shù)據(jù) // 創(chuàng)建業(yè)務(wù)層對(duì)象 PersonService service = new PersonServiceImpl(); Person person = service.findPersonByID(Integer.parseInt(pid)); if (null != person) { person.setAge(Integer.parseInt(age)); person.setFrom(pfrom); person.setId(Integer.parseInt(pid)); person.setName(pname); person.setSex(psex); int count = service.updatePerson(person); // 第三階段 根據(jù)數(shù)據(jù)庫(kù)的處理結(jié)果 進(jìn)行相應(yīng)結(jié)果處理 if (count > 0) { // 添加成功 // 重新定向到查詢?nèi)康捻?yè)面 response.sendRedirect("findAll_server.jsp"); } else { // 添加失敗 response 響應(yīng)流 String msg = "<script type='text/javascript'>history.go(-1);alert('更新失敗!');</script>"; // 服務(wù)器想給客戶端發(fā)送一段代碼 讓客戶端知道添加失敗了 // 你這段文字到底是什么類(lèi)型的? text/html 那么瀏覽器就把你的這段話當(dāng)做是HTML文本進(jìn)行解析 response.setContentType("text/html; charset=UTF-8"); // 服務(wù)端給客戶端發(fā)送的數(shù)據(jù)類(lèi)型是什么 // 打印回去 out.print(msg); } } else { // 添加失敗 response 響應(yīng)流 String msg = "<script type='text/javascript'>history.go(-1);alert('沒(méi)有查詢到要更新的數(shù)據(jù)!');</script>"; // 服務(wù)器想給客戶端發(fā)送一段代碼 讓客戶端知道添加失敗了 // 你這段文字到底是什么類(lèi)型的? text/html 那么瀏覽器就把你的這段話當(dāng)做是HTML文本進(jìn)行解析 response.setContentType("text/html; charset=UTF-8"); // 服務(wù)端給客戶端發(fā)送的數(shù)據(jù)類(lèi)型是什么 // 打印回去 out.print(msg); }%> 5) 刪除的控制器

<%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="com.hnxy.entity.Person"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 添加業(yè)務(wù) // 第一階段 接收數(shù)據(jù) // 1. 設(shè)定頁(yè)面請(qǐng)求字符流的編碼 request.setCharacterEncoding("UTF-8"); // 2. 接收頁(yè)面數(shù)據(jù) String pid = request.getParameter("pid"); // 第二階段數(shù)據(jù)庫(kù)處理階段 // 封裝數(shù)據(jù) // 創(chuàng)建業(yè)務(wù)層對(duì)象 PersonService service = new PersonServiceImpl(); Person person = service.findPersonByID(Integer.parseInt(pid)); if (null != person) { int count = service.deletePerson(person); // 第三階段 根據(jù)數(shù)據(jù)庫(kù)的處理結(jié)果 進(jìn)行相應(yīng)結(jié)果處理 if (count > 0) { // 添加成功 // 重新定向到查詢?nèi)康捻?yè)面 response.sendRedirect("findAll_server.jsp"); } else { // 添加失敗 response 響應(yīng)流 String msg = "<script type='text/javascript'>history.go(-1);alert('刪除失敗!');</script>"; // 服務(wù)器想給客戶端發(fā)送一段代碼 讓客戶端知道添加失敗了 // 你這段文字到底是什么類(lèi)型的? text/html 那么瀏覽器就把你的這段話當(dāng)做是HTML文本進(jìn)行解析 response.setContentType("text/html; charset=UTF-8"); // 服務(wù)端給客戶端發(fā)送的數(shù)據(jù)類(lèi)型是什么 // 打印回去 out.print(msg); } } else { // 添加失敗 response 響應(yīng)流 String msg = "<script type='text/javascript'>history.go(-1);alert('沒(méi)有查詢到要?jiǎng)h除的數(shù)據(jù)!');</script>"; // 服務(wù)器想給客戶端發(fā)送一段代碼 讓客戶端知道添加失敗了 // 你這段文字到底是什么類(lèi)型的? text/html 那么瀏覽器就把你的這段話當(dāng)做是HTML文本進(jìn)行解析 response.setContentType("text/html; charset=UTF-8"); // 服務(wù)端給客戶端發(fā)送的數(shù)據(jù)類(lèi)型是什么 // 打印回去 out.print(msg); }%>


版權(quán)聲明:原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)務(wù)必以超鏈接的形式表明出處和作者信息。否則將追究法律責(zé)任。來(lái)自海牛學(xué)院-青牛

關(guān)鍵詞:實(shí)戰(zhàn),基礎(chǔ),使用,技術(shù),入門(mén),數(shù)據(jù),深入,動(dòng)態(tài)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉