Java web基础知识 第九节 JSP开发模型与MVC设计模式

一、JSP开发模型

  1. sun公司开发jsp技术后,也提供了jsp两种开发模型,第一种是jsp Model1,第二种是jsp Model2.
    Jsp Model1.
  2. Jsp Model1 = Jsp + JavaBean
    (PS:web服务器中,jsp收集浏览器输入数据,将数据提交给JavaBean,JavaBean连接数据库进行操作,将数据返回给jsp,jsp显示在浏览器中。)
  3. jsp负责业务操作及数据显示,JavaBean负责处理数据。
    优点:简单快捷,对开发人员要求不高,应用小型web项目。
    缺点:不适合比较复杂的web项目,且所有操作在jsp中完成,不便于后期项目维护与升级。
  4. Jsp Model2:在开发模型1基础上而来,这种开发模型添加了Servlet技术。
  5. Jsp Model2 = Jsp + JavaBean + Servlet
  6. web服务器中,
    Servlet接收用户请求、处理相应(Controller)
    jsp负责数据的显示(View)
    JavaBean接收Servlet处理的用户数据,之后JavaBean连接数据库进行操作(Model),将数据返回给Servlet显示在浏览器中。
    优点:分层明显,便于后期代码维护和升级。开发人员可以分工合作,适合复杂的开发项目。
    缺点:开发难度大,对开发人员要求较高。

二、MVC设计模式:(Model、View、Controller)

  1. 概述:80年代,研究中心根据功能对软件进行模块划分(分层)。三个模块:模型、视图、控制器。

  2. 模型:管理应用程序的业务数据、定义访问控制、修改数据的业务规则。
    当模型状态发生改变时,会通知视图重新展示数据。

  3. 视图:负责用户交互。从模型中获取数据向用户展示,同时也将数据传递给控制器处理。
    当模型里面封装的数据发生改变,视图回同步更新用户界面,目的是和模型中数据保持一致。

  4. 控制器:负责应用程序的用户交互部分,接收从视图传递过来的数据,并向模型发送数据。
    接受用户请求(提交请求参数),响应数据。

  5. MVC优点:耦合性低()容易改变项目数据层和业务规则、重用性高(可以通过不同样式的试图访问同一个服务器代码)、部署快,生命周期成本低、可维护性高。

  6. 拓展:Java web开发的三层架构:
    三成架构:web层、service层、dao层。

    1. web层:包含jsp,servlet,javabean的相关内容。(负责与用户交互(提交请求参数),处理请求、数据,响应数据给用户。)
    2. service层:称之为bussiness,作用是处理业务逻辑(转账:保障转帐前与转账后总额不变)操作、不包含web层内容
    3. Dao层:数据层,DataBase access Object数据库持久化对象,作用是对数据库crud操作(增删改查)。

三、Java web与MVC的区别

  1. Java web是分层式的开发架构,适合任何项目。

  2. MVC是一个设计模式,不一定适合所有项目。

  3. 开发前首先确定项目架构,确定后,才会确定项目采用哪种设计模式
    (PS:房子架构对应项目架构、房子的装修风格对应项目设计模式。)


四、Model2实现注册功能

  1. 实现:
    0、准备jsp页面:resister.jsp、loginSuccess.jsp
    1、准备JavaBean:UserBean:封装用户提交注册基本参数(用户名、密码、邮箱)。
    2、RegisterFromBean:封装用户提交的注册参数(用户名、密码、确认密码、邮箱),进行后端代码校验.
    (前端校验,校验用户输入格式正确;后端校验:校验数据库格式正确(如数据是否重复))
    3、DBUtil:模拟数据库
    4、注册成功,直接跳转到主页面:loginSuccess.jsp

五、实现文件上传:

  1. 文件上传:把本地文件上传到服务器端(服务器也需要安装到本地硬盘)
  2. 文件上传也是通过表单传递的,要求:
    1. 必须有file输入项<input type="file" name="filename" />

    2. 表单提交方式必须是post,enctype属性必须是multipart/form-data
      (注:没设置enctype属性时,默认值为:application/x-www-form-urllencode)
      (注:服务器端不可以使用request.getParamter的相关方法)

    3. commons-fileupload.jar——提交参数的jar包(表单提交,enctype属性——FileItem)
      commons-io.jar——获取提交参数的jar包


六、文件上传相关API介绍:

  1. 文件上传基本步骤:
    1、创建上传项工厂对象:DiskFileUploadFactory factory = new DiskFileUploadFactory();
    2、通过工厂对象的到解析器:ServletFileUpload sf = new ServletFileUpload(factory);
    3、解析请求对象,得到上传表单项:List list = sf.parseRequest(request);

    【注:用于将请求消息实体中的文件封装成FileItem对象的是:DiskFileItemFactory类】


七、 list集合中包含普通表单项与文件上传表单项

  1. FileItem接口:(常用方法)
    方法一:boolean f= isFormFiled(); //如果是true,代表普通项,否则是文件上传项
    方法二:String filename=getName(); //表示获取文件的名称,比如不同浏览器提交(拓展名)的不同。
    方法三:String name=getFieldName(); //返回的就是表单中name的属性
    方法四:write(File file); //主要应用于文件上传时,把文件保存到服务器端(服务器所安装的硬盘)
    方法五:String value=getString(); //主要用于获取字符串,获取用户输入的值()
    方法六:String type=getContentType(); //获取文件的MIME类型,如“image/jpeg”
    方法七:boolean f=isInMemory(); //判断上传的文件存在内存中,还是临时文件中
    方法八:void delete(); //文件上传完毕后,删除临时文件
    方法九:InputStream in=getInputStream(); //获取上传的字节输入流
    方法十:long getSize(); //获取上传文件的大小

  2. DiskFileItemFactory:(常用方法)

    方法一:setSizeThreshold(int sizeThreshold)和getSizeThreshold()
    set方法用来设置上传文件临界值
    如:setSizeThreshold(1024); //如果文件上传超出了1024,就启用临时文件

    方法二:setRepository(java.io.File repository)和getRepository()
    上传文化大小超出了setSizeThreshold方法设置的大小,就启用临时文件,把上传文件内容临时保存在临时文件中。

  3. ServletFileUpload类:(常用方法)
    作用是解析Request对象,把request对象里封装的表单数据解析成表单项
    方法一:List list = parseRequest(request);
    方法二:setSizeMax:设置上传文件的总大小
    方法三:setFileSizeMax:设置单个文件的大小

八、文件上传具体代码

  1. 步骤:
    1、创建项目,导入jar包
    2、准备上传页面:from.jsp //enctype要设置为:“multipart/from-data”
    3、创建Servlet,处理上传请求:UploadServlet.Java
    4、…

九、文件下载具体代码

  1. 文件下载:从服务器端把文件保存到本地

  2. 文件下载:一个流两个头
    一个流:文件的字节输入流
    两个头:响应头

  3. (Content-Type:对应文件的MIME类型,可以理解为文件的扩展名;Content-Dispostion:以下载框的方式)

  4. 实现文件下载:
    步骤:
    1、创建一个下载页面:download.jsp
    2、创建一个servlet,处理下载需求:DownloadServlet

  5. 解决下载文件名称中文乱码问题:

    第一种:页面中对中文进行url编码,在DownloadServlet进行url编码。
    		<a href="/chapter12/DownloadServlet?filename=<%=URLEncoder.encode("文件名.jsp","utf-8")%>">文件下载</a>
    / 注:URLEncoder.ecode:编码;URLDecoder.decode:解码;
    		response.addHeader("ContentDisposition","attachment;filename="+URLEncoder.encode(filename,"utf-8"));
    / 注:能解决IE浏览器,不能解决火狐浏览器。
    
    第二种:根据浏览器的不同,处理响应文件的中文乱码问题(间DownUtils工具类)
    / 处理get请求中文乱码问题:
    		filename = new String(Filename.getBytes("iso-8859-1"),"utf-8");
    

End.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值