在實際的項目開發中,一個軟件的從開始到編碼的過程和公司裏面的一些實際的東西,在公司中,一個軟件從需求到上市,首先就是進行需求的分析,需求文檔的編寫,對一些功能和業務流的設計,而後就是根據用戶的需求和程序員進行交流,對一些功能的實現是否是能夠,是否是在規定時間內實現出來,而後就是數據庫的設計,固然在這一環節,就是隻有經驗搞得程序員才能參與,由於在數據庫的設計上,咱們須要有長久的考慮,往後的數據庫的改變,是會帶來不少的沒必要要的麻煩,由於底層設計的東西,可能就跟一個字段的變化,產生不少的問題,就要改變不少的代碼,這時候就是對咱們的經驗的考察,只有經驗豐富,老練的程序員才能參與數據庫的設計,在數據庫設計完成以後,就是須要對前端進行設計,這時候或許有ui設計者,而後就是經過建模,對系統進行整合和描繪,對代碼中的類和屬性進行整理,在uml的建模完成以後,就是程序員進行代碼編寫的階段了,在代碼編寫完成以後,就是對咱們寫的代碼進行校驗,再沒問題以後,就會將項目傳給高級的軟件工程師,進行框架和代碼上的優化,在優化完成以後,就是軟件的測試階段,用到的主要的技術就是黑盒和白盒技術,測試完成以後,就是項目的交付階段了。今天主要講的是ssm框架的增刪改查(這部分是要本身進行實現),並無具體的將實現的過程,而後就是要實現文件的上傳以及文件的下載,經過今天的學習對ssm的框架有了更深一步的瞭解,對項目的運行以及頁面之間的跳轉,控制器的解析等等。我在編程的時候,用到的工具是idea,這裏面有的上面和eclipse是不同的,相對eclipse在不少的方面我的感受使用起來更加的方便。當咱們在前端進行部分java代碼編寫時候,就會出現不少的問題,這時候就須要導入必定得依賴,來支持咱們的功能:前端 |
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>java
這兩個依賴包是必不可少的。程序員
而後,在咱們想要用框架進行上傳文件的時候,須要前臺和後臺的搭建主要的代碼:ajax
在前端,咱們就是須要用form進行表單的提交:sql
<form id="fileform" method="post" enctype="multipart/form-data">數據庫
<input type="file" id="fileupload" name="uploadfile"/>編程
<button id="upload_btn">上傳文件</button>json
</form>,後端
Js的代碼:api
var form = new FormData(document.getElementById("fileform"));
$.ajax({
type:"post",
url:"upload",
data:form,
processData:false,
contentType:false,
dataType:'text',
success:function(data){
}
});
後端的代碼:
@RequestMapping("upload")
public String testupload(@RequestParam("uploadfile") MultipartFile file,
HttpServletRequest request) throws IllegalStateException, IOException{
if(!file.isEmpty()) {
//上傳文件路徑
String path = request.getSession().getServletContext().
getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");
//上傳文件名
String filename = file.getOriginalFilename();
File filepath = new File(path,filename);
//判斷路徑是否存在,若是不存在就建立一個
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
//將上傳文件保存到一個目標文件當中
file.transferTo(new File(path + File.separator + filename));
//輸出文件上傳最終的路徑測試查看
return String.valueOf(file.getSize());
} else {
return "0";
}
}
而且提交的方法必須是post的方法,並且在上傳兩次相同文件名稱的文件的時候,在後臺接收到的文件就會出現重名的狀況。
文件的下載的前臺的主要代碼:
<td><a class='down_file_btn' href='downloadfile/"+data[i].fid+"'>下載</a>
在後臺仍是同樣要進行處理:
@RequestMapping(value = "downloadfile/{fid}",produces = "application/json;charset=utf-8")
public void downloadlm(@PathVariable Integer fid,HttpServletRequest request,
HttpServletResponse response,Model model) throws IOException {
Myfile myFile = loginService.selectFileById(fid);
String path = request.getSession().getServletContext().
getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");
String filename=myFile.getUrl().substring(myFile.getUrl().lastIndexOf("\\")+1);
File file = new File(path+File.separator+filename);
//設置響應的頭信息,解決文件名爲中文亂碼的問題
response.setHeader("content-disposition", "attachment;filename=
"+URLEncoder.encode(file.getName(), "utf-8"));
//使用文件輸入流讀取下載文件信息
FileInputStream in = new FileInputStream(file);
//獲得響應流中的輸出流
OutputStream out = response.getOutputStream();
//創建一個緩存區
byte[] buffer = new byte[1024];
int len = 0;
//把輸入流中的數據經過循環寫入到響應流中
while((len = in.read(buffer)) > 0) {
out.write(buffer,0,len);
}
in.close();
out.close();
}
而後就是使用ssm的框架對咱們的數據信息進行增刪改查的操做,這裏由於我以前作過相同的功能,框架都是現成的,就是稍微改了點東西,在咱們進行數據庫的操做的時候,首先就是咱們的配置是必不可少的,首先就是對咱們數據庫的鏈接上的不一樣,咱們能夠經過配置文件進行連接,不在像以前的jdbc,每次進行數據庫的操做都是要用到咱們的數據庫的連接,在每次的調用上,就顯得很繁瑣,這就是框架優勢的體現:
,而後就是對數據庫的操做也全是經過mapper進行的,不須要咱們每次都須要經過不一樣的參數的方法的封裝,這時候就只須要咱們在xxxmapper.xml文件中進行相關的配置操做,在SpringBoot的Mapper有兩種方式,一種是經過xml的方式進行數據庫的操做,還有就是經過自定義類的方式進行,這時候,須要在咱們的類文件上加上Mapper的註解,或者是在咱們的config文件或者是主函數啓動類上加上mapperscan的註解,這樣就能夠告訴咱們的程序,咱們的Mapper在哪裏,而後就能夠將一個文件夾下的全部的文件定義爲Mapper,這樣就是咱們在大量的Mapper的時候經常使用的一種方式。而後就是咱們的在controller中進行咱們的請求解析,而後經過不一樣的解析返回不一樣的訪問頁面:
@GetMapping("deleteEmp")
public String deleteEmployee(Employee employee){
employeeService.deleteEmp(employee.getLastName());
return "success";
}
這種就是在頁面上發送deleteEmp的請求,而後咱們在後臺就能夠進行地址的解析,返回固定的東西給前臺的顯示
後來老師還講到了一個工具的使用,這樣就是解決了不少的問題,我感受就是對於數據庫的操做的方便大大的提升,我以前在進行實習的過程當中,公司天天早晨都會有人早到公司,對每一個數據庫進行安全的驗證,以及系統裏面的每一個模塊的肯定沒有問題,也常常在晚上跑sql腳本,對數據庫進行數據的維護,若是有了這個東西,感受那種工做就會簡單不少,固然做爲一個實習生,公司是不會讓我接觸這些維護數據庫的工做。
這個工具就是kettel,就是一個etl對數據進行處理的工具,也學了不少這個工具的使用,如今一些基本的操做仍是已經掌握了
在實際的項目開發中,一個軟件的從開始到編碼的過程和公司裏面的一些實際的東西,在公司中,一個軟件從需求到上市,首先就是進行需求的分析,需求文檔的編寫,對一些功能和業務流的設計,而後就是根據用戶的需求和程序員進行交流,對一些功能的實現是否是能夠,是否是在規定時間內實現出來,而後就是數據庫的設計,固然在這一環節,就是隻有經驗搞得程序員才能參與,由於在數據庫的設計上,咱們須要有長久的考慮,往後的數據庫的改變,是會帶來不少的沒必要要的麻煩,由於底層設計的東西,可能就跟一個字段的變化,產生不少的問題,就要改變不少的代碼,這時候就是對咱們的經驗的考察,只有經驗豐富,老練的程序員才能參與數據庫的設計,在數據庫設計完成以後,就是須要對前端進行設計,這時候或許有ui設計者,而後就是經過建模,對系統進行整合和描繪,對代碼中的類和屬性進行整理,在uml的建模完成以後,就是程序員進行代碼編寫的階段了,在代碼編寫完成以後,就是對咱們寫的代碼進行校驗,再沒問題以後,就會將項目傳給高級的軟件工程師,進行框架和代碼上的優化,在優化完成以後,就是軟件的測試階段,用到的主要的技術就是黑盒和白盒技術,測試完成以後,就是項目的交付階段了。今天主要講的是ssm框架的增刪改查(這部分是要本身進行實現),並無具體的將實現的過程,而後就是要實現文件的上傳以及文件的下載,經過今天的學習對ssm的框架有了更深一步的瞭解,對項目的運行以及頁面之間的跳轉,控制器的解析等等。我在編程的時候,用到的工具是idea,這裏面有的上面和eclipse是不同的,相對eclipse在不少的方面我的感受使用起來更加的方便。當咱們在前端進行部分java代碼編寫時候,就會出現不少的問題,這時候就須要導入必定得依賴,來支持咱們的功能: |
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
這兩個依賴包是必不可少的。
而後,在咱們想要用框架進行上傳文件的時候,須要前臺和後臺的搭建主要的代碼:
在前端,咱們就是須要用form進行表單的提交:
<form id="fileform" method="post" enctype="multipart/form-data">
<input type="file" id="fileupload" name="uploadfile"/>
<button id="upload_btn">上傳文件</button>
</form>,
Js的代碼:
var form = new FormData(document.getElementById("fileform"));
$.ajax({
type:"post",
url:"upload",
data:form,
processData:false,
contentType:false,
dataType:'text',
success:function(data){
}
});
後端的代碼:
@RequestMapping("upload")
public String testupload(@RequestParam("uploadfile") MultipartFile file,
HttpServletRequest request) throws IllegalStateException, IOException{
if(!file.isEmpty()) {
//上傳文件路徑
String path = request.getSession().getServletContext().
getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");
//上傳文件名
String filename = file.getOriginalFilename();
File filepath = new File(path,filename);
//判斷路徑是否存在,若是不存在就建立一個
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
//將上傳文件保存到一個目標文件當中
file.transferTo(new File(path + File.separator + filename));
//輸出文件上傳最終的路徑測試查看
return String.valueOf(file.getSize());
} else {
return "0";
}
}
而且提交的方法必須是post的方法,並且在上傳兩次相同文件名稱的文件的時候,在後臺接收到的文件就會出現重名的狀況。
文件的下載的前臺的主要代碼:
<td><a class='down_file_btn' href='downloadfile/"+data[i].fid+"'>下載</a>
在後臺仍是同樣要進行處理:
@RequestMapping(value = "downloadfile/{fid}",produces = "application/json;charset=utf-8")
public void downloadlm(@PathVariable Integer fid,HttpServletRequest request,
HttpServletResponse response,Model model) throws IOException {
Myfile myFile = loginService.selectFileById(fid);
String path = request.getSession().getServletContext().
getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");
String filename=myFile.getUrl().substring(myFile.getUrl().lastIndexOf("\\")+1);
File file = new File(path+File.separator+filename);
//設置響應的頭信息,解決文件名爲中文亂碼的問題
response.setHeader("content-disposition", "attachment;filename=
"+URLEncoder.encode(file.getName(), "utf-8"));
//使用文件輸入流讀取下載文件信息
FileInputStream in = new FileInputStream(file);
//獲得響應流中的輸出流
OutputStream out = response.getOutputStream();
//創建一個緩存區
byte[] buffer = new byte[1024];
int len = 0;
//把輸入流中的數據經過循環寫入到響應流中
while((len = in.read(buffer)) > 0) {
out.write(buffer,0,len);
}
in.close();
out.close();
}
而後就是使用ssm的框架對咱們的數據信息進行增刪改查的操做,這裏由於我以前作過相同的功能,框架都是現成的,就是稍微改了點東西,在咱們進行數據庫的操做的時候,首先就是咱們的配置是必不可少的,首先就是對咱們數據庫的鏈接上的不一樣,咱們能夠經過配置文件進行連接,不在像以前的jdbc,每次進行數據庫的操做都是要用到咱們的數據庫的連接,在每次的調用上,就顯得很繁瑣,這就是框架優勢的體現:
,而後就是對數據庫的操做也全是經過mapper進行的,不須要咱們每次都須要經過不一樣的參數的方法的封裝,這時候就只須要咱們在xxxmapper.xml文件中進行相關的配置操做,在SpringBoot的Mapper有兩種方式,一種是經過xml的方式進行數據庫的操做,還有就是經過自定義類的方式進行,這時候,須要在咱們的類文件上加上Mapper的註解,或者是在咱們的config文件或者是主函數啓動類上加上mapperscan的註解,這樣就能夠告訴咱們的程序,咱們的Mapper在哪裏,而後就能夠將一個文件夾下的全部的文件定義爲Mapper,這樣就是咱們在大量的Mapper的時候經常使用的一種方式。而後就是咱們的在controller中進行咱們的請求解析,而後經過不一樣的解析返回不一樣的訪問頁面:
@GetMapping("deleteEmp")
public String deleteEmployee(Employee employee){
employeeService.deleteEmp(employee.getLastName());
return "success";
}
這種就是在頁面上發送deleteEmp的請求,而後咱們在後臺就能夠進行地址的解析,返回固定的東西給前臺的顯示
後來老師還講到了一個工具的使用,這樣就是解決了不少的問題,我感受就是對於數據庫的操做的方便大大的提升,我以前在進行實習的過程當中,公司天天早晨都會有人早到公司,對每一個數據庫進行安全的驗證,以及系統裏面的每一個模塊的肯定沒有問題,也常常在晚上跑sql腳本,對數據庫進行數據的維護,若是有了這個東西,感受那種工做就會簡單不少,固然做爲一個實習生,公司是不會讓我接觸這些維護數據庫的工做。
這個工具就是kettel,就是一個etl對數據進行處理的工具,也學了不少這個工具的使用,如今一些基本的操做仍是已經掌握了