Java教程

smbms

本文主要是介绍smbms,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、JavaWeb项目准备步骤

1.创建mysql数据库,创建表,编写添加数据脚本

2.idea创建maven的web工程,配置tomcat

3.测试运行环境能否跑通
    
4.导入必备依赖,servlet,jsp,jstl,taglib,mysql...

5.创建包结构,controller,service,dao,filter,utils,pojo...
 
6.对照mysql,编写实体类pojo,配置mysql连接驱动的util,编写设置字符集的filter
    
7.导入静态资源,img,css,js...

2、smbms

登录

1.获取前端账号密码
2.验证转到主页
3.把数据放入session当中

退出

1.把数据从session中删除
2.转到登录界面

权限

1.使用filter判断session是否有用户的数据
2.有就转到主页,没有就让他登录

修改密码

1.根据旧密码来做,使用ajax发送的服务器验证
2.新密码和确认新密码使用前端的js来做就行

分页展示

1.web的小高潮点
    先理解分页:
    当前页		初始值		单页容量
    1			0			5
    2			5			5
    3			10			5
    初始值 = (当前页-1)* 单页容量
    
    //分页的重点就在于初始值,因为就是根据初始值去做MySQL的物理分页,最终在页面展示一页的数据
    ================================================================
       public void setCurrentPage(Integer currentPage) {
            //当前页小于1就显示第一页,大于总页数就显示最后一页,否则就显示当前页
            if (currentPage<1){
                this.currentPage = 1;
            }else if (currentPage>this.totalPage){
                this.currentPage = this.totalPage;
            }else{
                this.currentPage = currentPage;
            }
            //获取组件是第几组
            int groupNum = this.currentPage%10==0?this.currentPage/10:this.currentPage/10+1;
            //第一组: (1-1)*10+1 = 1 从1开始
            //        1*10 = 10 到10结束
            //以此类推,如果页数号码大于最大页数就不要了
            for (int i = (groupNum-1)*10+1; i <= groupNum*10 ; i++) {
                if (i<=totalPage){
                    group.add(i);
                }else {
                    break;
                }
            }
        }
    ================================================================
    
    
    把分页的相关数据配成一个java类
    当前页,单页容量,总页数,总记录数,数据集合,bootstrap组件显示
2.具体步骤
    1》把原始的数据集合封装,
    2》规定单页容量
    3》查到有多少条记录
    4》就可以计算有多少页
  **5》当前页
    6》组件控制

分页组件

package pojo.page;

import java.util.ArrayList;
import java.util.List;

public class Page<T> {
    private List<T> dataList;
    private Integer currentPage;
    private Integer pageSize;
    private Integer totalSize;
    private Integer totalPage;
    private List<Integer> group = new ArrayList<>();

    public Page(Integer pageSize){
        this.pageSize = pageSize;
    }

    public List<T> getDataList() {
        return dataList;
    }

    public void setDataList(List<T> dataList) {
        this.dataList = dataList;
    }

    public Integer getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(Integer currentPage) {
        //当前页小于1就显示第一页,大于总页数就显示最后一页,否则就显示当前页
        if (currentPage<1){
            this.currentPage = 1;
        }else if (currentPage>this.totalPage){
            this.currentPage = this.totalPage;
        }else{
            this.currentPage = currentPage;
        }
        //获取组件是第几组
        int groupNum = this.currentPage%10==0?this.currentPage/10:this.currentPage/10+1;
        //第一组: (1-1)*10+1 = 1 从1开始
        //        1*10 = 10 到10结束
        //以此类推,如果页数号码大于最大页数就不要了
        for (int i = (groupNum-1)*10+1; i <= groupNum*10 ; i++) {
            if (i<=totalPage){
                group.add(i);
            }else {
                break;
            }
        }
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getTotalSize() {
        return totalSize;
    }

    public void setTotalSize(Integer totalSize) {
        this.totalSize = totalSize;
        //能整除就总记录数/单页容量,否则就加1来放多余的数据
        if (this.totalSize%this.pageSize==0){
            this.totalPage = this.totalSize/this.pageSize;
        }else {
            this.totalPage = this.totalSize/this.pageSize+1;
        }
    }

    public Integer getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }

    public List<Integer> getGroup() {
        return group;
    }

    public void setGroup(List<Integer> group) {
        this.group = group;
    }
}

增删改

3、文件上传

  1. 导入依赖

    commons-io commons-fileupload

  2. 创建目录,判断是不是文件上传表单

    //判断是不是上传文件的表单请求
    if(!ServletFileUpload.isMultipartContent(request)){
        return;
    }
    //WEB-INF下创建上传文件存放目录
    String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");
    File upload = new File(uploadPath);
    if (!upload.exists()){
        upload.mkdirs();
    }
    //WEB-INF下创建临时目录
    String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
    File temp = new File(tempPath);
    if (!temp.exists()){
        temp.mkdirs();
    }
    
  3. 磁盘文件工厂《缓冲区》

    DiskFileItemFactory

    //设置工厂参数
    //临时目录设置
    factory.setRepository(temp);
    //设置临界值,单位是byte
    factory.setSizeThreshold(1024*1024);
    
  4. 文件解析器

    ServletFileUpload

    //设置解析器参数
    //设置上传文件最大值
    fileParse.setFileSizeMax(1024*1024*100);
    //设置请求最大值
    fileParse.setSizeMax(1024*1024*110);
    //设置编码集
    fileParse.setHeaderEncoding("utf-8");
    
  5. 遍历表单请求项,下载文件

    List<FileItem> fileItemList = fileParse.parseRequest(request);
    for (FileItem fileItem : fileItemList) {
        //true表示是普通项,false表示是文件项
        if (fileItem.isFormField()){
            String name = fileItem.getFieldName();
            String value = fileItem.getString("utf-8");
            System.out.println(name+"==="+value);
        }else {
            //完整路径名
            String name = fileItem.getName();
            //如果上传的名字不合法就继续遍历下一项
            if (name==null || "".equals(name.trim())){
                continue;
            }
    
            //拿到文件名
            String fileName = name.substring(name.lastIndexOf("\\") + 1);
            //uuid,时间戳....目的在于解决重名覆盖问题
            String uuidPath = UUID.randomUUID().toString();
            File file = new File(this.getServletContext().getRealPath("/WEB-INF/upload/")+uuidPath);
            if (!file.exists()){
                file.mkdirs();
            }
            //创建流,写出文件
            InputStream is = fileItem.getInputStream();
            FileOutputStream os = new FileOutputStream(uploadPath + "\\" +uuidPath+"\\"+ fileName);
            int size = 0;
            byte[] buffer = new byte[1024];
            while ((size = is.read(buffer))>0){
                os.write(buffer,0,size);
            }
            os.close();
            is.close();
    
            //临时目录内容删除
            fileItem.delete();
    

4、邮件发送

  1. 代码展示

    public static void main(String[] args) throws Exception {
            //邮箱设置参数,key值固定,value可修改
            Properties properties = new Properties();
            properties.put("mail.host","smtp.qq.com");
            properties.put("mail.transport.protocol","smtp");
            properties.put("mail.smtp.auth","true");
    
            //1,创建session对象配置环境信息
            Session session = Session.getDefaultInstance(properties, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //xxx是授权码,填自己的
                    return new PasswordAuthentication("87691684@qq.com", "xxx");
                }
            });
            session.setDebug(true);
            // 2,通过session获取transport发送对象
            Transport transport = session.getTransport();
            // 3,连接服务器
            transport.connect("smtp.qq.com","87691684@qq.com","xxx");
            // 4,创建邮件
            MimeMessage message = new MimeMessage(session);
            //发件人
            message.setFrom(new InternetAddress("87691684@qq.com"));
            //收件人
            message.setRecipients(Message.RecipientType.TO,"87691684@qq.com");
            //主题
            message.setSubject("java发送QQ邮件");
            //邮件内容
            // message.setContent("你好啊,java到QQ","text/html;charset=utf-8");
            //新邮件内容,带附件
    
            //利用Mime去把内容分区,然后组合
            
        	//内容的附件部分
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource("src/main/resources/bg_login.webp"));
            image.setDataHandler(dh);
        	//这就是cid
        	image.setContentID("db");
            image.setFileName(MimeUtility.encodeText("a.webp"));
            
        	//内容的正文部分
            MimeBodyPart text = new MimeBodyPart();
        	//这种不使用cid的方式就把文件作为附件
            text.setContent("你好啊,java到QQ","text/html;charset=utf-8");
        	//这种使用cid的方式就把文件作为正文内容 图片插入了
        	text.setContent("你好啊,java到QQ<img src='cid:db'/>","text/html;charset=utf-8");
            
        	//组合内容
            MimeMultipart multipart = new MimeMultipart();
            multipart.addBodyPart(image);
            multipart.addBodyPart(text);
            multipart.setSubType("mixed");
            //把Mime添加到message,并保存
    
            message.setContent(multipart);
            message.saveChanges();
    
            //5,发送邮件
            transport.sendMessage(message,message.getAllRecipients());
    
            //6,关闭资源
            transport.close();
        }
    
这篇关于smbms的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!