JSP:MVC

Web應用

一個好的Web應用:

??功能完善

? 易于實現和維護

? 易于擴展等

的體系結構

一個Web應用通常分為兩個部分

m 1. 由界面設計人員完成的 表示層

(主要做網頁界面設計)

m 2. 由程序設計人員實現的 行為層

(主要完成本Web應用的各種功能)

m

Web開發的兩種常用模式

Web開發的兩種常用模式

Model1 純JSP或JSP+javabean

適用于小型的Web應用

m 模型 1 可以分為兩種方式
m 1. 完全使用JSP頁面

優點:簡單,所見即所得,容易實現

缺點:訪問數據庫的代碼需要寫在JSP頁面中,如果數據庫發生變化JSP頁面需要重寫

2.使用JSP+JavaBean

優點數據訪問代碼和JSP頁面分離,數據訪問代碼重用性好

缺點系統復雜時,JSP頁面中仍會包含大量腳本代碼,代碼開發和維護困難

Model2 MVC模式

? ?模型2其實就是一種MVC體系結構,也稱為MVC模型2該模型是一種將應用分解成三個獨立部分的通用模型。

m 這三個部分分別是:
m 模型 (Model) 描述系統的數據
m 視圖 (view) 數據的顯示,包括圖形、文本和文件輸出等;
m 控制器 (Controller) 獲取系統的輸入,控制系統的執行;
m
m MVC Model-View-Controller 的縮寫
m Model 代表的是應用程序的商業邏輯 (通過 JavaBean EJB 等組件實現)
m View 提供可交互的客戶界面 ,向客戶顯示模型數據(使用 JSP 來輸出 HTML );
m Controller 響應客戶的請求 ,根據客戶的請求操縱模型,并把模型的響應結果由視圖展現給客戶 通常是 Servlet ;

MVC好處

m 各司其職,互不干涉
m MVC 模式中,三個層各司其職,所以如果一旦哪一層的需求發生了變化,就只需要更改相應的層中的代碼而不會影響到其它層中的代碼。
m 有利于開發中的分工
m MVC 模式中,由于按層把系統分開,那么就能更好的實現開發中的分工。網頁設計人員可以進行開發視圖層中的 JSP ,對業務熟悉的開發人員可開發業務層,而其它開發人員可開發控制層。
m 有利于組件的重用
m 分層后更有利于組件的重用。如控制層可獨立成一個能用的組件,視圖層也可做成通用的操作界面。
MVC 有助于把應用分離成合理的組件,以方便開發
? MVC(Servlet、JSP、JavaBean相結合)
m Servlet 扮演控制者的角色,接受客戶請求 ,創建 JavaBean JavaBean 執行業務邏輯 ,向 Servlet 返回結果。 Servlet 將結果交給 JSP 頁面 ,由 JSP 頁面生成 HTML 向客戶返回結果
m

MVC模式來實現用戶注冊

1.模型(JavaBean) -

?? useBe.Register.class

package useBe;

public class Register

{?? String logname="",password="",email="";

??? String backNews;

??? public void setLogname(String name)

??? {? logname=name;

??? }

?? public String getLogname()

??? { return logname;

??? }

?? public void setPassword(String pw)

??? {? password=pw;

??? }

?

?public String getPassword()

??? { return password;

??? }

?? public void setEmail(String em)

??? {? email=em;

??? }

?? public String getEmail()

??? {? return email;

??? }

?? public String getBackNews()

??? { return backNews;

??? }

?? public void setBackNews(String s)

??? { backNews=s;

??? }

}

2.控制器(servlet) -

?? useSe.HandleRegister.class

package useSe;

import? useBe.Register;

import java.sql.*;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HandleRegister extends HttpServlet

{?? public void init(ServletConfig config) throws ServletException

??? { super.init(config);

????? try {? Class.forName("com.mysql.jdbc.Driver");

????????? }

?????? catch(Exception e){}

??? }

?? public String handleString(String s)

?? {?? try{ byte bb[]=s.getBytes("iso-8859-1");

??????????? s=new String(bb);

????????? }

?????? catch(Exception ee){}

?????? return s;?

?? }

?void? doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

??? {?? Connection con;

??????? Statement sql;

Register reg=new Register();?? //創建Javabean對象

??????? request.setAttribute("register",reg);//將dataBean存儲到request對象中

??????? String logname=request.getParameter("logname").trim(),

??????? password=request.getParameter("password").trim(),

??????? email=request.getParameter("email").trim();

??????? String uri="jdbc:mysql://127.0.0.1:3306/test1";

??????? if(logname==null)

?????????? logname="";

??????? if(password==null)

?????????? password="";

??????? boolean isLD=true;????

?????? for(int i=0;i<logname.length();i++)

??????? {? char c=logname.charAt(i);

?????????? if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))

???????????? isLD=false;

??????? }

??????? boolean boo=logname.length()>0&&password.length()>0&&isLD;

??????? String backNews="";

??????? try{ con=DriverManager.getConnection(uri,"root","123456");

???????????? String insertCondition="INSERT INTO member VALUES ('"+logname+"','"+password+"','"+email+"')";

???????????? sql=con.createStatement();

???????????? if(boo)

???????????? { int m=sql.executeUpdate(insertCondition);

?????????????? if(m!=0)

???????????????? {? backNews="注冊成功";

??????????????????? reg.setBackNews(backNews);

??????????????????? reg.setLogname(logname);

??????????????????? reg.setPassword(handleString(password));

??????????????????? reg.setEmail(handleString(email));

????????????????? }

????????????? }

???????????? else

????????????? {? backNews="信息填寫不完整或名字中有非法字符";

???????????????? reg.setBackNews(backNews);?

????????????? }

???????????? con.close();

?????????? }

??????? catch(SQLException exp)

????????? {? backNews="該會員名已被使用,請您更換名字"+exp;

???????????? reg.setBackNews(backNews);

????????? }

??????? RequestDispatcher dispatcher=request.getRequestDispatcher("show.jsp");//請求show.jsp顯示信息

??????? dispatcher.forward(request, response);

??? }

?? public? void? doGet(HttpServletRequest request,HttpServletResponse response)

??????????????????????? throws ServletException,IOException

??? {?? doPost(request,response);

??? }

}

MVC模式來實現用戶注冊

3.視圖(jsp)

register.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<head>

<table>

?<td><A href="register.jsp"><font size=5>用戶注冊</font></A></td>

</table>

</head>

<HTML><BODY bgcolor=cyan><Font size=5><CENTER>

<FORM action="helpRegister" name=form>

<table>

??? 輸入您的信息,用戶名稱必須由字母和數字組成,帶*號項必須填寫。

?? <tr><td>用戶名稱:</td><td><Input type=text name="logname" >*</td></tr>

?? <tr><td>設置密碼:</td><td><Input type=password name="password">*</td></tr>

?? <tr><td>電子郵件:</td><td><Input type=text name="email"></td></tr>

?? <tr><td><Input type=submit name="g" value="提交"></td></tr>

</table>

</Form></CENTER>

</Body></HTML>

show.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="useBe.Register"%>

<jsp:useBean id="register" type="useBe.Register" scope="request"/>

<head>

<table>

?<td><A href="register.jsp"><font size=5>用戶注冊</font></A></td>

</table>

</head>

<HTML><BODY bgcolor=yellow>

<CENTER>

? <Font size=5 color=blue >

??? <BR><jsp:getProperty name="register"? property="backNews"/>

? </Font>

<table>

?<tr><td>注冊的名稱:</td>

???? <td><jsp:getProperty name="register" property="logname"/></td>

?</tr>

?<tr><td>注冊的電子郵件:</td>

???? <td><jsp:getProperty name="register" property="email"/></td>

?</tr>

</table>

</CENTER></BODY></HTML>

??? MVC模式的核心思想是有效地組合“視圖”、“模型”和“控制器”。

????? 本章將介紹MVC模式,掌握該模式對于設計合理的Web應用以及學習使用某些流行的Web框架,如HibernateSpringStruts等,都有著十分重要的意義。

??? MVC是一種通過三個不同部分構造一個軟件或組件的理想辦法:

模型(Model——用于存儲數據的對象。

視圖(View——為模型提供數據顯示的對象。

控制器(Controller——負責具體的業務邏輯操作,即控制器根據視圖提出的要求對數據做出處理,并將有關結果存儲到模型中,同時負責讓模型和視圖進行必要的交互,當模型中的數據變化時,讓視圖更新顯示。

??? JSP技術中,“視圖”、“模型”和“控制器”的具體實現如下:

模型(Model):

?? 一個或多個JavaBean對象,用于存儲數據,JavaBean主要提供簡單的setXXX()方法和getXXX()方法,在這些方法中不涉及對數據的具體處理細節。

視圖(View):

??? 一個或多個JSP頁面,為模型提供數據顯示,JSP頁面主要使用 HTML標記和JavaBean標記來顯示數據。

控制器(Controller

??? 一個或多個Servlet對象,根據視圖提交的要求進行數據處理操作,并將有關的結果存儲到JavaBean中,然后Servlet使用重定向方式請求視圖中的某個JSP頁面更新顯示。

?JSP+Javabean模式中,由JSP頁面通過使用useBean標記:

<jsp:useBean id="名字" class="創建bean的類" scope="生命周期"/>創建Javabean

??? JSP中的MVC模式中,也可以由控制器servet創建Javabean,并將有關數據存儲到所創建的Javabean中,然后servlet請求某個JSP頁面使用JavabeangetProperty動作標記:

<jsp:getProperty name= "名字" property="bean的屬性"/>

顯示Javabean的中的數據。

??? 在JSP中的MVC模式中,非常重要的手段是由servlet負責用構造方法創建Javabean,因此允許創建Javabean的類可以有帶參數的構造方法。

???? 在JSP中的MVC模式中,servet創建的Javabean也涉及到生命周期(有效期限),生命周期分為requestsessionapplication。以下假設創建Javabean的類的名字是BeanClass,該類的包名為user.yourbean

?request周期的Javabean

?? 1Javabean的創建

?? servlet負責創建bean。那么創建生命周期為requestbean的步驟如下:

1)用BeanClass類的某個構造方法創建bean對象,例如:

???????? BeanClass bean=new BeanClass();

2)將所創建的bean對象存放到HttpSerletRequest對象request中,并指定查找該bean的關鍵字,該步驟決定了bean的生命周期為request。例如:

??????? request.setAttribute("keyWord",bean);

執行上述操作,就會把bean存放到Tomcat引擎管理的內置對象pageContext中,該bean被指定的id"keyWord",生命周期是??

?????? PageContext.REQUEST_SCOPErequest。??

2?? 視圖更新

??? servlet請求一個JSP頁面,比如show.jsp的代碼如下:

RequestDispatcher dispatcher= request.getRequestDispatcher("show.jsp");

dispatcher.forward(request,response);

??? servlet所請求的JSP頁面可以使用如下標記獲得servlet所創建的bean的引用(type屬性使得該JSP頁面不負責創建bean

<jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope="request"/>

該標記中的idservlet所創建的bean索引關鍵字。然后JSP頁面使用<jsp:getProperty name="keyWord" property="bean的變量"/>標記顯示bean中的數據。如果上述代碼執行成功,用戶就看到了show.jsp頁面的執行效果。

??? 特別注意: 如果servlet所請求的JSP頁面,使用如下標記獲得servlet所創建的bean的引用(注意沒有用type屬性而是用class屬性)

? <jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="request"/>

該標記中的idservlet所創建的bean索引關鍵字。那么即使servlet所請求的JSP頁面事先已經有了id"keyWord"scope"request"bean,那么這個bean也會被servlet所創建的bean替換。

???? 原因是servlet所請求的JSP頁面會被刷新,就會根據當前頁面使用的<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="request"/> 標記到Tomcat引擎管理的內置對象PageContext中尋找id"keyWord",生命周期是request,而該bean已經被servlet更新了。

? ?session周期的Javabean

??? 1Javabean的創建

?? servet創建生命周期為sessionbean的步驟如下:

1)用BeanClass類的某個構造方法創建bean對象,例如:

??? BeanClass bean=new BeanClass();

2)將所創建的bean對象存放到HttpSerletSession對象:session中,并指定查找該bean的關鍵字,該步驟決定了bean的生命周期為session。例如:

???? HttpSession session=request.getSession(true);

???? session.setAttribute("keyWord",bean);

?? 內置對象執行上述操作,就會把bean存放到Tomcat引擎管理的內置對象pageContext中,該bean被指定的id"keyWord",生命周期是PageContext.SESSION_SCOPEsession)。??

?? 2?? 視圖更新

??? servelt創建bean, bean的生命周期為session只要用戶的session沒有消失,該bean就一直存在,一個用戶在訪問Web服務目錄的各個JSP中都可以使用<jsp:useBean id="keyWord" type="usern.yourbean.BeanClass" scope="session"/> 標記獲得servlet所創建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的變量"/>標記顯示該bean中的數據,該標記中的idservlet所創建的bean索引關鍵字。

??? 對于生命周期為sessionbean,如果servlet希望某個JSP顯示其中的數據,可以使用RequestDispatcher對象向該JSP頁面發出請求,也可以使用HttpServletResponse類中的重定向方法(sendRedirect)。

??? show.jsp頁面使用如下標記獲得servlet所創建的bean的引用(注意沒有用type屬性而是用class屬性)<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="session"/>該標記中的idservlet所創建的bean索引關鍵字。那么即使servlet所請求的JSP頁面或其他頁面事先已經有了id"keyWord"scope" session "bean,那么這個bean也會被servlet所創建的bean替換。

???? 原因是,servlet所請求的JSP頁面或其他頁面被刷新時,就會根據當前頁面使用的<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope=" session "/>標記到Tomcat引擎管理的內置對象PageContext中尋找id"keyWord",生命周期是session,而該bean已經被servlet更新了。

?application周期的Javabean

? ?1Javabean的創建

??? servet創建生命周期為applicationbean的步驟如下:

1BeanClass類的某個構造方法創建bean對象,例如:

???????? BeanClass bean=new BeanClass();

2servlet使用getServletContext()方法返回服務器的ServletContext內置對象的引用,將所創建的bean對象存放到服務器這個ServletContext內置對象中,并指定查找該bean的關鍵字,該步驟決定了bean的生命周期為application,例如:

????? getServletContext().setAttribute("keyWord",bean);

上述操作,就會把bean存放到Tomcat引擎管理的內置對象pageContext中,該bean被指定的id"keyWord",有效期限是(生命周期)PageContext.APPLICATION_SCOPEapplication?

2?? 視圖更新

??? servlet創建創建生命周期為applicationbean后,只要Web應用程序不結束,該bean就一直存在。一個用戶在訪問Web服務目錄的各個JSP中都可以使用<jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope="application"/>? 標記獲得servlet所創建的bean的引用,然后使用

<jsp:getProperty name="keyWord" property="bean的變量"/>標記顯示該Javabean中的數據,該標記中的idservlet所創建的bean索引關鍵字。

??? 對于生命周期為applicationbean,如果servlet希望某個JSP顯示其中的數據,可以使用RequestDispatcher對象向該JSP頁面發出請求,也可以使用HttpServletResponse類中的重定向方法(sendRedirect)。

?? ?注意:所有用戶在同一個Web服務目錄中的application生命周期的bean是相同的,即占有相同的內存空間。另外,如果servlet所請求的JSP頁面,比如show.jsp頁面,使用如下標記獲得servlet所創建的bean的引用(注意沒有用type屬性而是用class屬性)<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>該標記中的idservlet所創建的bean索引關鍵字。那么即使servlet所請求的JSP頁面或其他事先已經有了id"keyWord"scope"application"bean,那么這個bean也會被servlet所創建的bean替換。

?? 原因是,servlet所請求的JSP頁面或其他頁面被刷新時,就會根據當前頁面使用的:<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>標記到Tomcat引擎管理的內置對象PageContext中尋找id"keyWord",生命周期是application,而該bean已經被servlet更新了。

?JavabeanServlet與配置文件

?? Javabean類的包名均為mybean.dataServlet類的包名均為myservlet.control

1.保存Javabean類和Servlet類的源文件

??? D:\ mybean\data? 和? D:\myservlet\control

2.編譯Javabean

??? D:\javac mybean\data\Javabean的源文件

3.編譯Servlet

??? D:\ javac myservlet\control\servlet的源文件

4.將類的字節碼文件保存到服務器

???? ch9\WEB-INF\classes\mybean\data

???? ch9\WEB-INF\classes\myservlet\control

5web.xml文件

?? 編寫web.xml文件,并保存到Web服務目錄的WEB-INF子目錄中,即ch9\WEB-INF中 。??

MVC模式與注冊登錄??? 大部分Web應用都會涉及到注冊與登錄模塊。本節使用MVC模式講述怎樣設計注冊、登錄模塊。為ch9\WEB-INF中的web.xml文件添加如下子標記

?? ?JavabeanServlet管理

??? 本節的Javabean類的包名均為mybean.dataServlet類的包名均為myservlet.control

1.保存Javabean類和Servlet類的源文件

?? D:\ mybean\data D:\myservlet\control

2.編譯Javabean

???? D:> javac mybean\data\Javabean的源文件

3.編譯Servlet

????? D:> javac myservlet\control\servlet的源文件

4.將類的字節碼文件保存到服務器

???? ch9\WEB-INF\classes\mybean\data??

???? ch9\WEB-INF\classes\myservlet\control??

配置文件管理

??? 本節的Servlet類的包名均為myservlet.control,需要配置Web服務目錄的web.xml文件,即將下面的web.xml文件保存到Tomcat安裝目錄的Web服務目錄ch9中。根據本書使用的Tomcat安裝目錄及Web服務目錄,需要將web.xml文件保存到

D:\apache-tomcat-8.0.3\webapps\ch9\WEB-INF

目錄中。????

web.xml

<servlet>

??? <servlet-name>register</servlet-name>

??? <servlet-class>myservlet.control.HandleRegister</servlet-class>

</servlet>

<servlet-mapping>

?? <servlet-name>register</servlet-name>

?? <url-pattern>/helpRegister</url-pattern>

</servlet-mapping>

<servlet>

??? <servlet-name>login</servlet-name>

??? <servlet-class>myservlet.control.HandleLogin</servlet-class>

</servlet>

<servlet-mapping>

?? <servlet-name>login</servlet-name>

?? <url-pattern>/helpLogin</url-pattern>

</servlet-mapping>

? 數據庫設計與連接

?? 1? 創建一個數據庫 、表??

使用MySQL建立一個數據庫student,該庫共有一個user表 。

??? user表的用途:存儲用戶的注冊信息。即會員的注冊信息存入user表中,user表的主鍵是logname,各個字段值的說明如下:

logname 存儲注冊的用戶名(屬性是字符型,主鍵)。

password 存儲密碼(屬性是字符型)。

email 存儲email(屬性是字符型)。?????

2? 數據庫連接

??? 避免操作數據庫出現中文亂碼,需要使用

????? Connection getConnection(java.lang.String) 方法建立連接,連接中的代碼是(用戶是root,其密碼是空)

?String url = "jdbc:mysql://127.0.0.1/student?"+

???????????? "user=root&password=&characterEncoding=gb2312";

Connection con = DriverManager.getConnection(uri);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166020.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166020.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166020.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SELinux零知識學習二十五、SELinux策略語言之類型強制(10)

接前一篇文章:SELinux零知識學習二十四、SELinux策略語言之類型強制(9) 二、SELinux策略語言之類型強制 3. 訪問向量規則 AV規則就是按照對客體類別的訪問許可指定具體含義的規則,SELinux策略語言目前支持四類AV規則: allow:表示允許主體對客體執行允許的操作。neveral…

2015年7月8日 Go生態洞察:Go、開源與社區

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

C#面試題3

1.請解釋一下C#中的并發編程和線程安全性。 并發編程是指在多線程環境下編寫代碼以實現并發執行的能力。C#提供了一些機制來支持并發編程&#xff0c;如線程、任務和并行循環等。線程安全性是指在多線程環境下&#xff0c;代碼能夠正確地處理共享數據并保持一致性。線程安全的代…

基于springboot實現大學生就業服務平臺系統項目【項目源碼】計算機畢業設計

基于springboot實現大學生就業服務平臺系統演示 Java技術 Java是由SUN公司推出&#xff0c;該公司于2010年被oracle公司收購。Java本是印度尼西亞的一個叫做爪洼島的英文名稱&#xff0c;也因此得來java是一杯正冒著熱氣咖啡的標識。Java語言在移動互聯網的大背景下具備了顯著…

企業必看的大數據安全極速傳輸解決方案

在這個大數據時代&#xff0c;企業在享受大數據帶來的便利同時&#xff0c;也面臨著巨大的挑戰&#xff0c;其中最主要的問題就是數據安全方面和傳輸方面&#xff0c;為了更好地滿足企業大數據傳輸的需求&#xff0c;小編將深入分析企業對于大數據傳輸面臨的挑戰和風險以及大數…

【elementui】el-popover在列表里循環使用,取消的doClose無效解決辦法

目錄 一、需求效果二、代碼詳情html方法接口 一、需求效果 在使用elementui的Popover 彈出框時&#xff0c;需求是在table列表里使用&#xff0c;循環出來&#xff0c;無法取消。 二、代碼詳情 html <el-table-column v-if"checkPermission([admin,user:resetPass…

【C++】標準模板庫STL作業(其二)

&#x1f383;個人專欄&#xff1a; &#x1f42c; 算法設計與分析&#xff1a;算法設計與分析_IT閆的博客-CSDN博客 &#x1f433;Java基礎&#xff1a;Java基礎_IT閆的博客-CSDN博客 &#x1f40b;c語言&#xff1a;c語言_IT閆的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

C 語言文件讀寫

C 語言文件讀寫 在本教程中&#xff0c;您將學習如何在C語言中處理文件。您將通過示例學習在C語言中使用fprintf()、fscanf()、fread()、fwrite()、fseek()等處理標準I/O。 文件是計算機存儲設備中用于存儲數據的容器。 為什么需要文件&#xff1f; 當程序終止時&#xff0…

vue2,vue3使用vuex

vuex vue的狀態管理器 1引入vuex npm install vuex2.創建store/index.js文件 在main.js引入 import { createStore } from vuexconst store createStore({state: () > ({})}) export default store3.state 核心, 用于定義數據 state: () > ({count: 0,name: 陸青,age:…

Py之wikipedia-api:wikipedia-api的簡介、安裝、使用方法之詳細攻略

Py之wikipedia-api&#xff1a;wikipedia-api的簡介、安裝、使用方法之詳細攻略 目錄 wikipedia-api的簡介 wikipedia-api的安裝 wikipedia-api的使用方法 1、 創建 Wikipedia并進行查詢 wikipedia-api的簡介 Wikipedia-API是一個易于使用的Python封裝&#xff0c;用于訪…

計算機是如何執行指令的

計算機組成 現在所說的計算機基本上都是馮諾依曼體系的計算機。其核心原理&#xff1a; 馮諾依曼計算的核心思想是將程序指令和數據以二進制形式存儲存儲在同一存儲器中&#xff0c;并使用相同的數據格式和處理方式來處理它們。這種存儲程序的設計理念使得計算機能夠以可編程…

如何從 C# 制作報表到 FastReport Cloud

眾所周知&#xff0c;我們的世界在不斷發展&#xff0c;新技術幾乎每天都會出現。如今&#xff0c;不再需要在辦公室內建立整個基礎設施、雇用人員來監控設備、處理該設備出現的問題和其他困難。 如今&#xff0c;越來越多的服務提供業務云解決方案&#xff0c;例如FastReport…

合并PDF出現OOM異常

優化方法一&#xff1a;使用PdfSmartCopy類代替PdfCopy類。這個類可以在合并PDF文件時&#xff0c;檢測并消除重復的對象&#xff0c;從而減少內存的占用。您可以參考以下代碼示例&#xff1a; //創建一個Document對象 Document document new Document();//創建一個PdfSmartC…

SpringBoot 項目實現讀寫分離

SpringBoot 項目實現讀寫分離 一、讀寫分離介紹 當使用Spring Boot開發數據庫應用時&#xff0c;讀寫分離是一種常見的優化策略。讀寫分離將讀操作和寫操作分別分配給不同的數據庫實例&#xff0c;以提高系統的吞吐量和性能。 讀寫分離實現主要是通過動態數據源功能實現的&…

我的虛擬人物介紹

背景 大家好&#xff0c;我是小欣&#xff0c;是這個博客的虛擬助手。在這里&#xff0c;我將為大家提供各種有趣、實用、甚至是意想不到的信息。作為一個年輕的語言模型&#xff0c;我的目標是為你們呈現出最有趣和有深度的內容。 我喜歡與大家分享知識、解答問題&#xff0…

AI“胡說八道”?怎么解?

原創 | 文 BFT機器人 01 引言 近年來&#xff0c;人工智能產業迅猛發展&#xff0c;大型語言模型GPT-4發展勢頭強勁&#xff0c;OpenAI推出ChatGPT、微軟推出Bing、馬斯克推出“最好的聊天機器人Grok”……科技巨頭紛紛入局AI領域&#xff0c;引入人工智能作為辦公工具的行業…

合封芯片未來趨勢如何?合封優勢能否體現?

芯片已經成為現代電子設備的核心組件。為了提高系統的性能、穩定性和功耗效率&#xff0c;一種先進的芯片封裝技術——合封芯片應運而生。 合封芯片作為一種先進的芯片封裝技術&#xff0c;合封芯片是一種將多個芯片&#xff08;多樣選擇&#xff09;或不同的功能的電子元器件…

AIGC專題報告:生成式人工智能用例匯編

今天分享的是AIGC系列深度研究報告&#xff1a;《AIGC專題報告&#xff1a;生成式人工智能用例匯編》。 &#xff08;報告出品方&#xff1a;德勤&#xff09; 報告共計&#xff1a;16頁 生成式人工智能&#xff08;AI&#xff09;的興起 生成式AI給人類文明創造了無限的可…

文心一言 VS 訊飛星火 VS chatgpt (142)-- 算法導論12.1 2題

二、用go語言&#xff0c;二叉搜索樹性質與最小堆性質(見 6.1 節)之間有什么不同?能使用最小堆性質在 O(n)時間內按序輸出一棵有 n 個結點樹的關鍵字嗎?可以的話&#xff0c;請說明如何做&#xff0c;否則解釋理由。 文心一言&#xff1a; 在二叉搜索樹&#xff08;Binary …

如何更有效地進行薪酬調查?

薪酬調查是企業管理中非常重要的一環&#xff0c;它不僅能夠幫助企業了解員工的薪酬情況&#xff0c;還可以為企業提供合理的薪酬標準&#xff0c;從而吸引和留住優秀人才。然而&#xff0c;進行薪酬調查并不是一項簡單的任務&#xff0c;需要有一定的方法和技巧&#xff0c;許…