JavaWeb案例講解Servlet常用對(duì)象
概述
本次文章基于第三章的ServletConfig,ServletContext,HttpServletRequest,HttpServletResponse對(duì)象完成一個(gè)圖書(shū)訂閱系統(tǒng)的購(gòu)買(mǎi)圖書(shū)和查看圖書(shū)購(gòu)買(mǎi)記錄功能。
搭建項(xiàng)目主頁(yè)面
創(chuàng)建一個(gè)動(dòng)態(tài)網(wǎng)站項(xiàng)目,在src中新建包c(diǎn)om.book.servlet.
在包中,新建HomeServlet作為主頁(yè)。效果圖如下:
為了讓一訪(fǎng)問(wèn)項(xiàng)目根路徑地址就默認(rèn)進(jìn)入HomeServlet,這里需要將 HomeServlet的虛擬地址寫(xiě)入web.xml文件中作為默認(rèn)的首頁(yè)地址。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Day07Jsp</display-name> <welcome-file-list> <welcome-file>HomeServlet</welcome-file> </welcome-file-list> </web-app>
HomeServlet中要完成超鏈接的顯示,這里需要在該Servlet中定義兩個(gè)靜態(tài)數(shù)據(jù),使用java注解的方式進(jìn)行定義,代碼如下:
package com.book.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HomeServlet */ @WebServlet(urlPatterns = "/HomeServlet", initParams = { @WebInitParam(name = "buy",value = "購(gòu)買(mǎi)圖書(shū)"), @WebInitParam(name = "selectOrder",value = "查看訂單") }) public class HomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HomeServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } /** * @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); } }
然后在類(lèi)中的空白處,重寫(xiě)init方法,用于加載兩個(gè)靜態(tài)數(shù)據(jù),因這兩個(gè)靜態(tài)數(shù)據(jù)需要在其他方法中被使用,因此定義成全局變量。代碼如下:
再重寫(xiě)init方法,并通過(guò)兩個(gè)靜態(tài)數(shù)據(jù),存儲(chǔ)至全局變量。
@Override public void init(ServletConfig config) throws ServletException { buy=config.getInitParameter("buy"); selectOrder=config.getInitParameter("selectOrder"); }
因?yàn)g覽器訪(fǎng)問(wèn)服務(wù)器默認(rèn)使用Get請(qǐng)求,這里我們?cè)赿iGet方法中編寫(xiě)兩個(gè)超鏈接發(fā)送給瀏覽器上顯示:
/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //當(dāng)瀏覽器訪(fǎng)問(wèn)該Servlet的時(shí)候,servlet將靜態(tài)數(shù)據(jù)發(fā)給瀏覽器顯示 response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter pw=response.getWriter(); pw.append("<div align='center'>"); pw.append("<a href=''>"+buy+"</a> "); pw.append("<a href=''>"+selectOrder+"</a> "); pw.append("</div>"); }
這里運(yùn)行以后,可看到以上的效果圖所示的頁(yè)面。
定義圖書(shū)實(shí)體類(lèi)
因?yàn)槲覀冃枰故径啾緢D書(shū)供用戶(hù)進(jìn)行購(gòu)買(mǎi),而每一本圖書(shū)都需要包含,書(shū)名,作者,單價(jià),出版社,購(gòu)買(mǎi)時(shí)間等等數(shù)據(jù),因此為采用定義實(shí)體類(lèi)的方式用于分別存儲(chǔ)每一本書(shū)的這些數(shù)據(jù)信息。
接著我們?cè)趕rc文件夾中定義包c(diǎn)om.book.entity,用于存儲(chǔ)創(chuàng)建的所有實(shí)體類(lèi),點(diǎn)右鍵新建class類(lèi),類(lèi)名為Book,在Book中定義五個(gè)全局變量用于存儲(chǔ)以上五個(gè)信息,并對(duì)其進(jìn)行數(shù)據(jù)封裝,代碼如下:
package com.book.entity; /** * 圖書(shū)的實(shí)體類(lèi) * @author teacher * 2021/10/14 */ public class Book { //java類(lèi)的封裝 private String bookName;//書(shū)名 private String author;//作者 private String price;//單價(jià) private String address;//出版社 private String buyTime;//購(gòu)買(mǎi)時(shí)間 public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getBuyTime() { return buyTime; } public void setBuyTime(String buyTime) { this.buyTime = buyTime; } //生成所有變量的get和set方法 //構(gòu)造方法的作用: //1.用于創(chuàng)建這個(gè)類(lèi)的對(duì)象 //2.用于快速給變量進(jìn)行賦值 //生成無(wú)參構(gòu)造方法 public Book() { // TODO Auto-generated constructor stub } //生成有參構(gòu)造方法 public Book(String bookName, String author, String price, String address, String buyTime) { super(); this.bookName = bookName; this.author = author; this.price = price; this.address = address; this.buyTime = buyTime; } @Override public String toString() { return "Book [bookName=" + bookName + ", author=" + author + ", price=" + price + ", address=" + address + ", buyTime=" + buyTime + "]"; } //生成toString方法,為了在做功能的時(shí)候, //查看檢查這個(gè)對(duì)象中是否有數(shù)據(jù) }
定義臨時(shí)圖書(shū)庫(kù)工具類(lèi)
這里我們使用List集合臨時(shí)將多本圖書(shū)信息存儲(chǔ)起來(lái),用于顯示在頁(yè)面上供用戶(hù)進(jìn)行購(gòu)買(mǎi),這里我們?cè)趕rc文件夾中新建包c(diǎn)om.book.util,在包中新建類(lèi)BookDBUtil,在類(lèi)中定義方法,創(chuàng)建多本圖書(shū)信息,并將多本圖書(shū)存儲(chǔ)至List集合,代碼如下:
package com.book.util; /** * 圖書(shū)信息的工具類(lèi) * @author teahcer * 2021/10/14 *用于臨時(shí)存儲(chǔ)一些圖書(shū)信息 */ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.book.entity.Book; public class BookDataUtil { //定義方法,用于存儲(chǔ)多本書(shū)的信息 public List<Book> getBooks(){ Book book1=new Book("Java編程思想", "馬云", "120.0元", "人民郵電出版社", ""); Book book2=new Book("MySQL數(shù)據(jù)庫(kù)教程", "任正非", "89.0元", "清華大學(xué)出版社", ""); Book book3=new Book("Java瘋狂講義", "馬化騰", "108.0元", "電子工業(yè)出版社", ""); Book book4=new Book("Python爬蟲(chóng)技術(shù)", "李彥宏", "66.0元", "新華出版社", ""); Book book5=new Book("C語(yǔ)言從入門(mén)到放棄", "李云龍", "56.0元", "江西出版社", ""); //創(chuàng)建List用于存儲(chǔ)以上五本書(shū) List<Book> oBooks=new ArrayList<Book>(); oBooks.add(book1); oBooks.add(book2); oBooks.add(book3); oBooks.add(book4); oBooks.add(book5); return oBooks; } //獲得當(dāng)前實(shí)時(shí)時(shí)間 public static String getNowTime() { //獲得的現(xiàn)在實(shí)時(shí)時(shí)間是毫秒計(jì)算的 Date date=new Date(); //簡(jiǎn)單日期格式類(lèi) 2021年10月20 日 13:55:30 SimpleDateFormat sdf= new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //按照設(shè)定的格式進(jìn)行格式化 String time=sdf.format(date); return time; } }
創(chuàng)建圖書(shū)信息列表頁(yè)面供用戶(hù)購(gòu)買(mǎi)圖書(shū)
即多本圖書(shū)已準(zhǔn)備好,這里需要?jiǎng)?chuàng)建Servlet完成圖書(shū)信息列表頁(yè)面,類(lèi)名為ShowBookInfoServlet,這里我們需要先從工具類(lèi)中獲得所有圖書(shū)信息,并將該圖書(shū)已表格的形式發(fā)送給瀏覽器上顯示出來(lái),其代碼如下:
package com.book.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.book.entity.Book; import com.book.util.BookDataUtil; /** * Servlet implementation class ShowBookInfoServlet */ @WebServlet("/ShowBookInfoServlet") public class ShowBookInfoServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ShowBookInfoServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲得所有圖書(shū)信息 BookDataUtil util=new BookDataUtil(); List<Book> oBooks=util.getBooks(); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter pw=response.getWriter(); pw.append("<div align='center'>"); pw.append("<table border='1' style='width:800px;text-align:center;'>"); //寫(xiě)標(biāo)題 pw.append("<tr>"); pw.append("<td>書(shū)名</td>"); pw.append("<td>作者</td>"); pw.append("<td>單價(jià)</td>"); pw.append("<td>出版社</td>"); pw.append("<td>操作</td>"); pw.append("</tr>"); for (int i=0;i<oBooks.size();i++) { pw.append("<tr>"); pw.append("<td>"+oBooks.get(i).getBookName()+"</td>"); pw.append("<td>"+oBooks.get(i).getAuthor()+"</td>"); pw.append("<td>"+oBooks.get(i).getPrice()+"</td>"); pw.append("<td>"+oBooks.get(i).getAddress()+"</td>"); pw.append("<td><a href='BuyBookServlet?index="+i+"'><input type='button' " + "style='background-color:green;' " + "value='購(gòu)買(mǎi)'></a></td>"); pw.append("</tr>"); } pw.append("</table>"); pw.append("</div>"); } /** * @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); } }
并在HomeServlet的首頁(yè)的購(gòu)買(mǎi)圖書(shū)的超鏈接上添加圖書(shū)信息列表頁(yè)面的虛擬地址。
其運(yùn)行后,點(diǎn)擊購(gòu)買(mǎi)圖書(shū)即課跳轉(zhuǎn)至圖書(shū)信息列表頁(yè)面,效果如下:
完成存儲(chǔ)用戶(hù)購(gòu)買(mǎi)的圖書(shū)記錄信息
當(dāng)用戶(hù)點(diǎn)擊任意一本圖書(shū)進(jìn)行購(gòu)買(mǎi)的時(shí)候,這里我們采取發(fā)送給圖書(shū)的下標(biāo)給服務(wù)器的方式,能盡快的獲取用戶(hù)要購(gòu)買(mǎi)的圖書(shū)信息,這里新建一個(gè)Servlet類(lèi),類(lèi)名為BuyBookServlet,用于接收用戶(hù)將要購(gòu)買(mǎi)的圖書(shū)的下標(biāo),并查找出該圖書(shū),并通過(guò)方法獲得當(dāng)前購(gòu)買(mǎi)圖書(shū)的下單的實(shí)時(shí)時(shí)間,存儲(chǔ)至該購(gòu)買(mǎi)的圖書(shū)中,然后將該圖書(shū)存儲(chǔ)至List集合,因?yàn)橛脩?hù)可能會(huì)購(gòu)買(mǎi)多本圖書(shū),最后將所喲購(gòu)買(mǎi)的圖書(shū)記錄信息存儲(chǔ)至ServletContext對(duì)象中。
package com.book.servlet; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.book.entity.Book; import com.book.util.BookDataUtil; /** * Servlet implementation class BuyBookServlet */ @WebServlet("/BuyBookServlet") public class BuyBookServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public BuyBookServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲得用于點(diǎn)擊購(gòu)買(mǎi)按鈕發(fā)送過(guò)來(lái)的請(qǐng)求 //獲得瀏覽器發(fā)送過(guò)來(lái)的圖書(shū)的下標(biāo) String index=request.getParameter("index"); //將接收的字符串類(lèi)型轉(zhuǎn)換成int類(lèi)型 int i=Integer.parseInt(index); //根據(jù)用戶(hù)發(fā)送過(guò)來(lái)的下標(biāo),去查找用戶(hù)將要購(gòu)買(mǎi)的書(shū)籍 List<Book> oBooks=new BookDataUtil().getBooks(); Book book=oBooks.get(i); //當(dāng)用戶(hù)購(gòu)買(mǎi)圖書(shū)的時(shí)候,需要獲得當(dāng)前實(shí)時(shí)時(shí)間 book.setBuyTime(BookDataUtil.getNowTime()); //獲得ServletContext對(duì)象 ServletContext sc=getServletContext(); //判斷ServletContext是否存在List集合 Object object=sc.getAttribute("orders"); List<Book> oList=null; if (object==null) { //說(shuō)明以前從來(lái)沒(méi)有購(gòu)買(mǎi)過(guò)書(shū) oList=new ArrayList<Book>(); oList.add(book); }else { //以前有購(gòu)買(mǎi)書(shū),只需要拿到List集合繼續(xù)添加購(gòu)買(mǎi)記錄即可 //不需要重新創(chuàng)建List集合 oList=(List<Book>) object; oList.add(book); } //保存完購(gòu)買(mǎi)記錄,之后存儲(chǔ)至ServletContext對(duì)象 sc.setAttribute("orders", oList); //購(gòu)買(mǎi)成功之后,跳轉(zhuǎn)至提示頁(yè)面 //使用請(qǐng)求轉(zhuǎn)發(fā)跳轉(zhuǎn),因?yàn)檎?qǐng)求轉(zhuǎn)發(fā)可以攜帶數(shù)據(jù)跳轉(zhuǎn)頁(yè)面 request.setAttribute("book", book); request.getRequestDispatcher("AlertServlet") .forward(request, response); } /** * @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); } }
創(chuàng)建提示信息頁(yè)面
在圖書(shū)記錄信息存儲(chǔ)后,需要提示用戶(hù)購(gòu)買(mǎi)的圖書(shū)下單完成,是否需要繼續(xù)購(gòu)買(mǎi)的提示,這里新建一個(gè)Servlet類(lèi),類(lèi)名為:AlertServlet
package com.book.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; import com.book.entity.Book; /** * Servlet implementation class AlertServlet */ @WebServlet("/AlertServlet") public class AlertServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public AlertServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Book book=(Book) request.getAttribute("book"); String info="您的《"+book.getBookName()+"》購(gòu)買(mǎi)成功," + "如果繼續(xù)購(gòu)買(mǎi)請(qǐng)<a href='ShowBookInfoServlet'>點(diǎn)擊這里</a>," + "或者5秒之后自動(dòng)跳回首頁(yè)"; response.setHeader("refresh", "5;url=HomeServlet"); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter pw=response.getWriter(); pw.print(info); } /** * @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); } }
效果如下:
完成查看圖書(shū)記錄信息列表頁(yè)面
用戶(hù)在購(gòu)買(mǎi)完圖書(shū)信息之后,需要查看當(dāng)前購(gòu)買(mǎi)的所有圖書(shū)的記錄信息,這里我們新建Servlet類(lèi),類(lèi)名為:SelectOrderServlet,從ServletContext類(lèi)中獲得所有的圖書(shū)記錄信息,展示在表格上,并需要判斷是否有購(gòu)買(mǎi)圖書(shū)記錄信息,其代碼如下:
package com.book.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.book.entity.Book; /** * Servlet implementation class SelectOrderServlet */ @WebServlet("/SelectOrderServlet") public class SelectOrderServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public SelectOrderServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //因?yàn)橛脩?hù)購(gòu)買(mǎi)的圖書(shū)信息被存儲(chǔ)在ServletContext對(duì)象中 //要展示用戶(hù)的購(gòu)買(mǎi)記錄,需要先獲得ServletContext對(duì)象 ServletContext sc=getServletContext(); //從該對(duì)象中獲得存儲(chǔ)圖書(shū)記錄的List集合 Object object=sc.getAttribute("orders"); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter pw=response.getWriter(); List<Book> oBooks=null; if (object!=null) { oBooks=(List<Book>) object; pw.append("<div align='center'>"); pw.append("<table border='1' style='width:800px;text-align:center;'>"); //寫(xiě)標(biāo)題 pw.append("<tr>"); pw.append("<td>書(shū)名</td>"); pw.append("<td>作者</td>"); pw.append("<td>單價(jià)</td>"); pw.append("<td>出版社</td>"); pw.append("<td>購(gòu)買(mǎi)時(shí)間</td>"); pw.append("</tr>"); for (int i=0;i<oBooks.size();i++) { pw.append("<tr>"); pw.append("<td>"+oBooks.get(i).getBookName()+"</td>"); pw.append("<td>"+oBooks.get(i).getAuthor()+"</td>"); pw.append("<td>"+oBooks.get(i).getPrice()+"</td>"); pw.append("<td>"+oBooks.get(i).getAddress()+"</td>"); pw.append("<td>"+oBooks.get(i).getBuyTime()+"</td>"); pw.append("</tr>"); } pw.append("</table>"); pw.append("</div>"); }else { pw.print("當(dāng)前還沒(méi)有購(gòu)買(mǎi)圖書(shū)的記錄,請(qǐng)先購(gòu)買(mǎi)再查看?。?!"); } } /** * @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); } }
并把給Servlet的虛擬地址添加至主頁(yè)面的第二個(gè)超鏈接上,
其運(yùn)行的效果如下:
初學(xué)者可根據(jù)代碼完成以上功能,可自行擴(kuò)展修改圖書(shū)信息以及刪除購(gòu)買(mǎi)記錄的功能等等。
到此這篇關(guān)于JavaWeb案例講解Servlet常用對(duì)象的文章就介紹到這了,更多相關(guān)JavaWeb Servlet 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot基于redis自定義注解實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)
本文主要介紹了SpringBoot基于redis自定義注解實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01使用IDEA工具配置和運(yùn)行vue項(xiàng)目及遇到的坑
這篇文章主要介紹了使用IDEA工具配置和運(yùn)行vue項(xiàng)目及遇到的坑,需要的朋友可以參考下2018-09-09Eclipse設(shè)定文件的默認(rèn)打開(kāi)方式的具體操作步驟
以下是對(duì)Eclipse設(shè)定文件的默認(rèn)打開(kāi)方式的具體操作步驟進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08Java SpringMVC數(shù)據(jù)響應(yīng)超詳細(xì)講解
Spring?MVC?是?Spring?提供的一個(gè)基于?MVC?設(shè)計(jì)模式的輕量級(jí)?Web?開(kāi)發(fā)框架,本質(zhì)上相當(dāng)于?Servlet,Spring?MVC?角色劃分清晰,分工明細(xì),本章來(lái)講解SpringMVC數(shù)據(jù)響應(yīng)2022-04-04Java利用多線(xiàn)程和分塊實(shí)現(xiàn)快速讀取文件
在工作中經(jīng)常會(huì)有接收文件并且讀取落庫(kù)的需求,讀取方式都是串行讀取,所以本文主要為大家介紹一下如何利用多線(xiàn)程和分塊實(shí)現(xiàn)快速讀取文件,希望對(duì)大家有所幫助2023-09-09解決Mapper接口和mapper.xml的文件位置問(wèn)題
這篇文章主要介紹了解決Mapper接口和mapper.xml的文件位置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12springboot的controller層的常用注解說(shuō)明
這篇文章主要介紹了springboot的controller層的常用注解說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10