《学习内容》:

    //========学习内容=========
    EL表达式语言 (域对象取值)
    EL表达式语言(参数值+运算)
    JSTL核心标签
    JSTL标签+练习
    JSTL自定义
    文件上传(1)
    文件上传(2)
    文件下载

    《知识点—笔记》
    //=========================
    EL域对象取值:
    ${requestScope.存的key}
    ${sessionScope.存的key}
    ${applicationScope.存的key}

    JSTL遍历集合 数组

    中间内容进行拼接等操作

    文件上传
    //创建一个工厂
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(//需要Factory工厂);
    List fileItems = upload.parseRequest(request);可以解析当前的request对象 返回值是FileItems集合 存着每个组件

    《代码内容》:

    TestEL项目
    Index.jsp

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <script>
    4. window.onload = function () {
    5. window.location.href = "test"
    6. }
    7. </script>
    8. <body>
    9. </body>
    10. </html>

    TestCont**roller**

    1. package controller;
    2. import domain.User;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.util.ArrayList;
    9. public class TestController extends HttpServlet {
    10. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    11. String uname = "武伟";
    12. request.setAttribute("uname",uname);
    13. User user = new User("李雅芬","520");
    14. request.setAttribute("user",user);
    15. String[] unames = new String[]{"武伟","李雅芬","二胖"};
    16. request.setAttribute("unames",unames);
    17. ArrayList<User> list = new ArrayList<>();
    18. list.add(user);
    19. list.add(user);
    20. request.setAttribute("list",list);
    21. ArrayList<String> data = new ArrayList<>();
    22. data.add("'name'");data.add("'age'");data.add("'sex'");data.add("'value'");data.add("'dink'");
    23. request.setAttribute("data",data);
    24. ArrayList<Integer> echars = new ArrayList<>();
    25. echars.add(1);echars.add(2);echars.add(19);echars.add(25);echars.add(26);
    26. request.setAttribute("echars",echars);
    27. request.getRequestDispatcher("newJsp.jsp").forward(request,response);
    28. }
    29. @Override
    30. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    31. this.doPost(req,resp);
    32. }
    33. }

    newJsp.jsp

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@ page isELIgnored="false"%>
    3. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    4. <html>
    5. <head>
    6. <script type="text/javascript" src="./static/echarts-en.min.js"></script>
    7. </head>
    8. <body>
    9. <div align="center" id="main" style="width: 600px;height:400px;"></div>
    10. </body>
    11. <script>
    12. var myChart = echarts.init(document.getElementById("main"));
    13. option = {
    14. xAxis: {
    15. type: 'category',
    16. data: ${requestScope.data}
    17. },
    18. yAxis: {
    19. type: 'value'
    20. },
    21. series: [{
    22. data: ${requestScope.echars},
    23. type: 'line'
    24. }]
    25. };
    26. myChart.setOption(option)
    27. </script>
    28. </html>

    上传文件和下载文件项目
    downLoa**d.jsp**

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: ATanmo
    4. Date: 2021/3/16
    5. Time: 8:57
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>下载产品</title>
    12. <meta charset="UTF-8">
    13. </head>
    14. <body>
    15. <a href="download?filename=bj.png">下载</a>
    16. </body>
    17. </html>

    index.js**p**

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>文件上传与下载</title>
    6. </head>
    7. <body>
    8. <table align="center" width="60%" height="60%">
    9. <form action="testfile" method="post" enctype="multipart/form-data">
    10. <tr>
    11. <p>
    12. 用户名:<input type="text" name="username" value="">
    13. </p>
    14. <p>
    15. 请您选择上传的文件:<input type="file" name="filename" value="">
    16. </p>
    17. <p>
    18. <input type="submit" value="确认">
    19. </p>
    20. </form>
    21. </tr>
    22. </table>
    23. </body>
    24. </html>

    DownLoad**Controller**

    1. package controller;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.ServletOutputStream;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.FileInputStream;
    8. import java.io.IOException;
    9. import java.net.URL;
    10. import java.net.URLEncoder;
    11. public class DownLoadController extends HttpServlet {
    12. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    13. this.doGet(request,response);
    14. }
    15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    16. request.setCharacterEncoding("UTF-8");
    17. String filename = request.getParameter("filename");
    18. FileInputStream inputStream = new FileInputStream("D://test/" + filename);
    19. byte[] stream = new byte[1024];
    20. int length = inputStream.read(stream);
    21. String encode = URLEncoder.encode(filename, "UTF-8");
    22. System.out.println(encode);
    23. response.setContentType("application/x-msdownLoad");
    24. response.setHeader("Content-disposition","attachment;filename="+filename);
    25. //循环读取全部的字节 然后输出流写出去
    26. ServletOutputStream outputStream = response.getOutputStream();
    27. while (length != -1){
    28. outputStream.write(stream);
    29. outputStream.flush();
    30. length = inputStream.read(stream);
    31. }
    32. }
    33. }

    TestFileCo**ntroller**

    1. package controller;
    2. import org.apache.commons.fileupload.FileItem;
    3. import org.apache.commons.fileupload.FileItemFactory;
    4. import org.apache.commons.fileupload.FileUploadException;
    5. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    6. import org.apache.commons.fileupload.servlet.ServletFileUpload;
    7. import org.apache.taglibs.standard.lang.jstl.test.beans.Factory;
    8. import javax.servlet.ServletException;
    9. import javax.servlet.http.HttpServlet;
    10. import javax.servlet.http.HttpServletRequest;
    11. import javax.servlet.http.HttpServletResponse;
    12. import java.io.*;
    13. import java.util.List;
    14. public class TestFileController extends HttpServlet {
    15. @Override
    16. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    17. //创建一个工厂
    18. DiskFileItemFactory factory = new DiskFileItemFactory();
    19. //创建一个文件加载
    20. ServletFileUpload upload = new ServletFileUpload(factory);
    21. //加载request对象 进行包装
    22. try {
    23. System.out.println("文件上传中...");
    24. //解析后 里面有前端全部的组件
    25. List<FileItem> fileItems = upload.parseRequest(request);
    26. for (FileItem item : fileItems){
    27. //来判断他是一个普通的组件还是一个文件组件
    28. if (item.isFormField()){//如果他是一个普通的组件
    29. String fieldName = item.getFieldName();
    30. String paramValue = item.getString("UTF-8");
    31. System.out.println(fieldName+"===="+paramValue);
    32. }else {
    33. //如果走到了这里 那么说明他是一个文件组件
    34. request.setCharacterEncoding("UTF-8");
    35. String fieldName = item.getFieldName();
    36. String value = item.getString("UTF-8");
    37. String realFileName = item.getName();
    38. System.out.println(fieldName+"==="+value+"==="+realFileName);
    39. item.write(new File("D://test/"+realFileName));
    40. }
    41. }
    42. } catch (Exception e) {
    43. e.printStackTrace();
    44. }
    45. }
    46. }


    学习总结:
    学懂的:
    可以熟练的使用EL和JSTL,文件上传下载的具体写法,当时写的时候挺熟练的。
    有问题的地方:
    虽然写的功能没有什么问题,但是文件上传和下载虽然流程功能没有什么问题
    但是其中的设置缓存,最大多少,最小多少,进度条,自己没有去尝试,等待
    后期项目的时候用的时候勾起印象,进行进一步加深,JSTL的自定义标签和自定义EL
    都没有去练习。**