美文网首页
javaweb_3_MVC设计模式

javaweb_3_MVC设计模式

作者: 老北瓜 | 来源:发表于2020-05-29 16:15 被阅读0次

    MVC设计模式

    Jsp(处理用户请求) + JavaBean(数据封装和处理) 简单web程序
    Servlet(处理用户请求) + Jsp(数据显示) + JavaBean(数据封装) 复杂web程序

    Servlet缺陷
    1, 需要配置
    2,显示html元素的时候很复杂 --- > Jsp

    JSP缺陷
    封装和处理数据麻烦 ---- >javaBean

    Jsp + JavaBean :
    因为Jsp中的代码很难复用,可以在 Bean 中定义方法,然后在Jsp中调用bean方法。
    优点:
    1,jsp显示数据
    2,Javabean封装和处理数据

    Servlet + JSP + Javabean
    M: Model模型层 -- javaBean
    V: View视图层 -- JSP
    C: Controller控制层 -- Servlet
    由C统一调度JavaBean (M) 分装和助力数据,由JSP(V)进行数据的显示。
    Mvc工作流程:
    客户端发送请求, 由Servlet接收,Servlet调用javabeans来分别处理封装数据,JavaBean将数据的处理的结果 通过Jsp响应给客户端。

    模拟登录注册功能

    注册时上传头像,表单上传文件的条件

    • 表单必须是post提交方式
    • 表单中必须有文件上传项,文件上传项必须有name属性和值
    • 表单的 enctype属性必须设置为 multipart/form-data
     <form action="/reg_login/RegistServlet" method="post" enctype="multipart/form-data">
            <table>
                <tr>
                    <td class="td1">上传头像</td>
                    <td><input type="file" id="photo" name="upload"></td>
                </tr>
            </table>
        </form>
    

    因为 enctype的属性已经变了,所以就不可以再使用传统的request.getParmter("")来获取到参数值了,需要引入第三方组件来接收参数。

    数据接收 - 文件上传的基本流程
    引入jar包 fileupload.jar

    try {
                //  创建一个磁盘文件项工厂文件
                DiskFileItemFactory factory = new DiskFileItemFactory();
                // 创建一个核心解析类
                ServletFileUpload upload = new ServletFileUpload(factory);
                // 解析Request 请求,返回的是一个 FileItem 类型的集合
                List<FileItem> list = upload.parseRequest(request);
                //遍历集合,判断属于普通表单项还是文件上传项
                for (FileItem fileItem : list) {
    
                    if (fileItem.isFormField()) {
                        // 获取表单项 name属性
                        String name = fileItem.getFieldName();
                        // 解决中文乱码问题, value值
                        String value = fileItem.getString("UTF-8");
    
                        System.out.println(name + "    " + value);
                    } else {
    
                    
              }
    } catch (FileUploadException e) {
           e.printStackTrace();
     }
    

    获取 checkbox的值, 因为 表单种 一个 checkbox可以对应多个名字,所以 hobby对应多个value.

    List<String> hobbyValues = new ArrayList<String>();
    if ("hobby".equals(name)) {
        String hobbyValue = fileItem.getString("UTF-8");
        hobbyValues.add(hobbyValue);
    }
    

    文件上传问题
    解决文件名重复问题, 使用UUID.random(fileName);

    Cookie
    用来存储用户登录信息。cookie默认关掉浏览器就没有啦,所以我们要设置一个有效时间

    相关文章

      网友评论

          本文标题:javaweb_3_MVC设计模式

          本文链接:https://www.haomeiwen.com/subject/rjzvnhtx.html