在实际的项目开发中,一个软件的从开始到编码的过程和公司里面的一些实际的东西,在公司中,一个软件从需求到上市,首先就是进行需求的分析,需求文档的编写,对一些功能和业务流的设计,而后就是根据用户的需求和程序员进行交流,对一些功能的实现是否是能够,是否是在规定时间内实现出来,而后就是数据库的设计,固然在这一环节,就是只有经验搞得程序员才能参与,由于在数据库的设计上,咱们须要有长久的考虑,往后的数据库的改变,是会带来不少的没必要要的麻烦,由于底层设计的东西,可能就跟一个字段的变化,产生不少的问题,就要改变不少的代码,这时候就是对咱们的经验的考察,只有经验丰富,老练的程序员才能参与数据库的设计,在数据库设计完成以后,就是须要对前端进行设计,这时候或许有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对数据进行处理的工具,也学了不少这个工具的使用,如今一些基本的操做仍是已经掌握了