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...
登录
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; } }
增删改
导入依赖
commons-io commons-fileupload
创建目录,判断是不是文件上传表单
//判断是不是上传文件的表单请求 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(); }
磁盘文件工厂《缓冲区》
DiskFileItemFactory
//设置工厂参数 //临时目录设置 factory.setRepository(temp); //设置临界值,单位是byte factory.setSizeThreshold(1024*1024);
文件解析器
ServletFileUpload
//设置解析器参数 //设置上传文件最大值 fileParse.setFileSizeMax(1024*1024*100); //设置请求最大值 fileParse.setSizeMax(1024*1024*110); //设置编码集 fileParse.setHeaderEncoding("utf-8");
遍历表单请求项,下载文件
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();
代码展示
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(); }