昨天晚上练习代码,遇到个错误,排了一个多小时才排出来。而且错误还十分可笑。今天早上郁闷,向老冯诉苦了下。
老冯告诉我们,这样的情况很正常,在实际开发中就是这样——“20%的时间写代码,80%的时间来排错”! 此话经典,铭记!
今天将的内容比之前两天要容易些,主要讲了web开发中文件的上传和下载,以及国际化。下面就来做今天的总结了。
一. 基于表单的文件上传
文件上传在web站点应用中是非常常见的一个功能,例如我们在邮箱中要上传邮件附件,在校内里上传个人相片等。这些上传功能,我们能看到的页面形式大致如下
上传页面
此形式的上传都是基于表单的文件上传,因此一般要在相关的jsp页面中加入<input type="file" >标签,此外还要设置entype属性为multipart/form-data表示表单以二进制传输数据。
然后便是利用apache公司出品的commons-fileupload 和commons-io组件在相关的servlet程序中实现表单文件上传的功能。
FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的 request请求也就是一个FileItem的有序组合,FileUpload
组件可以解析该request,并返回一个一个的FileItem。而对每一个FileItem,FileUpload组件可以判断出它是普通form表单域还是文件file域,从而根据不同的类型,采取不同的操作--如果是
表单域,就读出其值,如果是文件域,就保存文件到服务器硬盘上或者内存中。
二. 文件下载
文件下载有两种方式:一种是直接一个超链接指向工程中的文件即可,这种下载的方式这所以可行,是靠浏览器自带有下载功能。第二种方式是用程序编码实现下载,其在web站点的应用更广泛,而且有如下两个有点:
可以增加安全访问控制,只对经过授权认证的用户提供下载
可以从任意位置提供下载的数据
秀下笔记,看看该程序如何编写
*设置两个报头
当报出错误找不到类的时候,有一种可能是服务器没自动生成class文件的时候,到下面的页面挑上所有选项,让服务器重新找到开发工具。
*获取输入流字节流
*获取输出流
*从输入字节流中读取信息写到输出字节流中
*设置下载的文件名
*最后的效果
三.文件上传下载的综合练习
1. 工程功能演示
2. 功能实现
l 前期工作
*在数据库中建立个表
*创建user.jsp
l 先处理上传
*创建UserUploadServlet.java`-
*解决乱码
*定义存放普通表单域的map集合,在里面放入相关信息
*定义存放文件域的map集合,在里面放入相关信息
l 存入数据库
*定义一个javabean.UserInfo,把页面的信息封装到其中
*创建工厂类,调用dao层,将数据存入数据库
*在dao.imp层实现功能
l 查看功能
*创建ListUserInfoServlet,调用dao层方法的查看功能
* 在dao.impl层完成功能
*定义list.jsp显示查看功能。通过<c:choose>处理list为null情况
l 下载
还能用urlencoding解决
*解码在apache-tomcat-6.0.20/conf/server
*创建DownUseInfoServlet.java
在里面完成下载功能,并处理保存文件时会出现的中文乱码问题
四.国际化
1.基本概念
软件的本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯。
软件的国际化:软件开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。
本地信息敏感数据:随用户区域信息而变化的数据称为本地信息敏感数据。例如数字,货币等数据。
应用程序的国际化:就是在应用软件的设计阶段,使软件能够支持多个国家和地区的用户的使用习惯。
国际化又称为 i18n:internationalization
2.一个软件国际化的特征
对于程序中的本地信息敏感的数据(日期,货币等)能根据当前所在的国家或地区的文化习惯进行显示
对于文本元素(错误提示信息,状态信息等)不是直接写在应用程序中,而是存储在应用程序外部的资源文件中,在应用程序中通过程序代码来动态获得这些数据
无需修改和重新编译程序就能支持新的国家或地区的用户使用
3.java国际化解决方案
文本信息不能硬编码在程序代码中,而是需要将它们从应用程序中分离出来,在软件运行时根据本地信息读取相应的文本内容进行显示,
用资源包
l 资源包介绍
*所谓资源包就是*.proerties文件
*对应不同的信息要定义专门的资源包,当要执行的语言类别找不到对应的资源包则执行默认的资源包
*资源文件的命名
*文件放置位置,都放到src下(java应用工程还是javaweb工程)
*写资源文件时候,中文的资源文件,要到src文件夹下去改,否则会有乱码
*读的时候用ResourceBundle类中的方法来获取资源包
*乱码处理,问题分析,超链接是get方式,会在查看页面出现的中文乱码该如何解决呢?
l 中文需要转化字符编码
*使用jdk下的native2ascii.exe
*改动资源文件后缀名
*写个批处理文件 run.bat,在里面设定好字符编码
*然后删除原资源文件
*设置环境变量里
*以后点击run.bat文件,直接会生成一个资源文件
数值货币时间日期等本地敏感数据可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。
Java中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)
l LOCAL类代表一个特定的区域
Locale locale=new Locale("zh","CN");
l DateFormat类转化日期/时间格式
*字符串转化为日期
逆向思维。
l NumberFormat类数值格式转化
l MessageFormat类提供了一种参数替换模式字符串中的占位符的方式
4.Web 应用程序的国际化
l 要实现 web 应用的国际化,首先要获得客户端浏览器的本地信息。在 Servlet 程序中,调用 HttpServletRequest 对象的方法获得代表客户端本地信息的 Locale 对象
*用jsp实现
*用国际化标签库实现
在做这个练习的时候,被里面的中文乱码的解决搞得有点晕,特此阅览了坏女杀手一遍专门说中文乱码的文章,感觉说得比较透彻了。中文乱码