【基于SSH框架的个人博客系统06】头像文件上传与前后端分页机制

标签: struts 分页 博客
912人阅读 评论(0) 收藏 举报
分类:

对于文件的上传,其实struts也有相应的支持,在form表单中添加enctype="multipart/form-data"后,通过二进制流来传输文件。并配置相应的Action进行处理。

<formmethod="post" action="upload" id="form-1"enctype="multipart/form-data">

 

在上传文件之前,我们可以通过js对文件进行一些限制,比如说,对文件类型或者文件大小进行限制。

 

 

 

 

在接收处理文件上传请求的action中,有三个成员字段,分别是File类型的file,String类型的fileFileName和String类型的fileContentType,struts将文件分成这三部分并且赋值给他们。

public class UploadAction extendsActionSupport{
       privateFile file;
       //文件名称 
   private String fileFileName;
   //文件类型 
   private String fileContentType; 
   //注意:文件名称和文件类型的名称前缀必须相同,
   private UserInfoService userInfoService;
   public void setUserInfoService(UserInfoService userInfoService) {
              this.userInfoService= userInfoService;
       }
   public UserInfoService getUserInfoService() {
              returnuserInfoService;
       }
   public void setFile(File file) {
              this.file= file;
       }
   public File getFile() {
              returnfile;
       }
   public String getFileFileName() {
              returnfileFileName;
       }
   public void setFileFileName(String fileFileName) {
              this.fileFileName= fileFileName;
       }
   public void setFileContentType(String fileContentType) {
              this.fileContentType= fileContentType;
       }
   public String getFileContentType() {
              returnfileContentType;
       }
   public String execute() throws Exception {
           HttpServletRequest request =ServletActionContext.getRequest();
              HttpSessionsession = request.getSession();
              IntegeruserId=(Integer)session.getAttribute("userId");
          System.out.println(ServletActionContext.getServletContext().getRealPath(""));
    System.out.println(ServletActionContext.getServletContext().getRealPath(Constant.UPLOAD_DIR));
            //获取需要上传文件的文件路径 
    System.out.println("fileFileName:"+fileFileName+"\nfileContentType:"+fileContentType);
       File uploadFile=newFile(ServletActionContext.getServletContext().getRealPath(Constant.UPLOAD_DIR)); 
       //System.out.println(ServletActionContext.getServletContext().getRealPath(Constant.UPLOAD_DIR));
       //判断文件是否上传,如果上传的话将会创建该目录 
              //FileuploadFile=new File("WebContent\\uploadImage");
       
       if(!uploadFile.exists()){ 
           uploadFile.mkdir(); //创建该目录 
       } 
       //第一种文件上传的方法 
       //声明文件输入流,为输入流指定文件路径 
       if(file!=null){
       long time = System.currentTimeMillis(); 
       FileInputStream input=new FileInputStream(file); 
       //获取输出流,获取文件的文件地址及名称 
       FileOutputStream out=new FileOutputStream(uploadFile + "\\"+time+fileFileName); 
       System.out.println(uploadFile + "\\" +time+fileFileName);
       try{ 
           byte[] b=new byte[1024];//每次写入的大小 
           int i=0; 
           while((i=input.read(b))>0){ 
                out.write(b,0,i); 
           } 
       }catch(Exception e){ 
           e.printStackTrace(); 
       }finally{ 
           input.close(); 
           out.close(); 
       }
              userInfoService.updateUserImage(userId,Constant.UPLOAD_DIR + "\\" +fileFileName);  
       }
       return "success"; 
   }  
 
}


通过打印语句,我们可以看到通过ServletActionContext.getServletContext().getRealPath(“”)可以获得项目的实际目录,并且文件名称跟文件类型也被获取到了。


既然获取到了文件,那么将文件保存到项目路径下的某个文件夹即可。并且将相对路径保存到数据库中,这样就算项目移动到了新的环境下也能正常运行。

 

前后端分页机制

讲完文件,我们再讲讲分页。

分页是前端必不可少的一部分,那么在SSH框架中前端的分页和后端的分页都是怎么一回事呢?前端的框架有很多,这里我们使用的是bootstrap-paginator,它可以将一个无序列表转换成分页的形式,通过配置好options,并传入$('ul').bootstrapPaginator(options),便可以产生分页的效果。我们可以通过代码来看一个例子。




这里面其实夹杂了许多的内容,但大体上我们可以看到,option中我们可以通过键值对的方式,配置分页的当前页,总页数,每次最多显示的页数,bootstrap的版本,是否使用提示,以及最为关键的OnPageClick事件,每当用户点击第几页时,这里的函数便会被触发,那个页的页码便能够在这里被获取到,因此,我们使用这个得到的Page跟后台交互。

这里实现的是后台显示粉丝列表的一个分页,每当点击页码时,系统便发出一个ajax请求,从后台请求到那一页的粉丝列表的json数据,将json数据解封后得到里面的值,通过JQuery的字符串拼接好之后,添加到网页中,完成显示。

 

我们知道请求最后都要到达DAO层,那么后端是如何完成这样的一个分页查找操作呢?

其实很简单,Hibernate框架考虑到这种需求,已经有现成的方法供我们使用。

通过setFirstResult设置好第一条记录的起始和setMaxResults设置最大读取的数目,就可以起到分页查找的目的。

public List<Fans>loadFansList(Integer userId,Integer pageNum,Integer size){
              Stringhql="from Fans fans where fans.noticerId=:noticerId";
              Queryquery=getSession().createQuery(hql);
              query.setParameter("noticerId",userId);
              query.setFirstResult((pageNum-1)*size);
              query.setMaxResults(size);
              returnquery.list();
       }

 


----------------------------------------------------------------------------

本项目下载地址:

github:https://github.com/SCAUMankind/SSHBlogSystem

查看评论

基于SSH框架前后端分页

在网上一个包含页面段和后台的分页基本难得找到,这个分页是基于ssh框架的,看上去很复杂,但理解后非常简单在页面段的第二种版本能够带条件查询,只有按到下面的步骤做就一定会成功。如果在看这果过程中遇到其他...
  • mmd_Jason
  • mmd_Jason
  • 2016-04-26 15:46:46
  • 2305

SSH框架里面实现分页

1、分页的实体Bean@Repositorypublic class PageList { @Autowired//注释调用service private ToolService toolservic...
  • lcbjava
  • lcbjava
  • 2009-11-11 15:06:00
  • 3426

【基于SSH框架的个人博客系统06】头像文件上传与前后端分页机制

对于文件的上传,其实struts也有相应的支持,在form表单中添加enctype="multipart/form-data"后,通过二进制流来传输文件。并配置相应的Action进行处理。   在上...
  • Hemk340200600
  • Hemk340200600
  • 2017-05-08 23:45:27
  • 912

java毕设--基于ssh框架开发的个人博客系统

联系qq:2835777178   有兴趣者可以联系我,也可先查看项目运行视频再决定项目部分功能界面一、博客主页面二、关于我三、个人日记四、用户登录界面五、登录后主界面六、个人资料管理界面在这里其他界...
  • myzczx
  • myzczx
  • 2018-02-13 13:02:54
  • 3648

多用户博客系统(ssh框架,个人编写)

  • 2009年10月12日 10:51
  • 16.17MB
  • 下载

SSH前端分页的几种方式

一、分页说明
  • lingnnhym
  • lingnnhym
  • 2014-04-22 11:45:30
  • 924

SSH框架的底层机制及原理

Struts1的工作原理 Struts1工作原理图:                                 1、初始化:struts框架的总控制器ActionServlet是一个Ser...
  • zyb507
  • zyb507
  • 2012-10-29 02:24:40
  • 16369

javaWeb个人博客系统页面SSH2框架

  • 2014年11月19日 10:05
  • 21.13MB
  • 下载

【基于SSH框架的个人博客系统03】bean层-javabean的建立以及映射文件的创建

分析完项目之后,开始进入代码的编写阶段。 我们知道一个系统最主要的底层部分便是对数据库的增删改查,在java中,这种对数据库的操作基本上都是将数据库表与一个javabean对应起来,这种技术叫做对象关...
  • Hemk340200600
  • Hemk340200600
  • 2017-05-08 23:10:17
  • 1045

javaEE之SSH框架的底层机制及原理

Struts1的工作原理 Struts1工作原理图:                                 1、初始化:struts框架的总控制器ActionServlet是一个Ser...
  • fxy832231
  • fxy832231
  • 2017-03-09 12:11:15
  • 616
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 1028
    排名: 4万+
    最新评论