SpringMVC学习-1
SpringMVC 简介Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等。
@WebServlet中配置”/“,控制器拦截所有请求,但是不会拦截到.jsp文件
@WebServlet中配置”/*“,控制器拦截所有请求,包括拦截到.jsp文件
SpringMVC 中重要组件
DispatcherServlet:前端控制器,接收所有请求(如果配置/不包含jsp)
HandlerMapping:解析请求格式的.判断希望要执行哪个具体的方法.
HandlerAdapter:负责调用具体的方法.
ViewResovler:视图解析器,解析结果,准备跳转到具体的物理视图
SpringMVC运行原理图
12345678910111213 ...
JavaWeb-文件下载
文件下载浏览器默认下载文件的方式为inline即能打开就打开,不能打开就下载。通过给a标签href中的属性值赋值,可以完成对一些浏览器无法解析打开的文件进行下载。但是当要下载的文件浏览器能解析打开,要如何告诉浏览器进行下载此文件呢?
通知客户端浏览器: 这是一个需要下载的文件, 不能再按普通的 html 的方式打开.
12//即设置一个响应的类型: application/x-msdownloadresponse.setContentType("application/x-msdownload");
通知客户端浏览器: 不再有浏览器来处理该文件, 而是交由用户自行处理设置响应流中文件进行下载,attachment以附件形式下载,filename= 表示下载显示的下载文件名。
12//设置用户处理的方式: 响应头: Content-Dispositionresponse.setHeader("Content-Disposition", "attachment;filename=abc.txt");
12345678910 ...
JavaWeb-文件上传
文件上传1.普通表单提交默认enctype=”application/x-www-form-urlencoded”;但是当表单中存在文件类型时,需要设置enctype=”multipart/form-data”,它不对字符进行编码,用于发送二进制的文件(即所有文件类型,如视频、图片、音乐、文档都可以用此类型entype);还有一种enctype=”text/plain”用于发送纯文本内容。
2.表单请求方式必须为post。
3.接收时不能再用request.getParameter(),而是request.getInputStream()解析二进制流,得到ServletInputStream对象。
当我们使用request.getInput直接获取到的字节流,后续进行打印数据的时候。会自动加上许多表单,文件的属性和属性值,还有分隔符。上传的是纯文本文件时,打印出来还能看到清除文件内容。但当上传的是非文本文件的时候,自动加上的属性和属性值,会导致文件不能正常显示。这时候我们就需要解析request.getInpustream()。
FileUpload文件上传FileUplo ...
Java-IO流-8
处理流之三:标准输入、输出流System.in和System.out分别代表了系统标准的输入和输出设备
默认输入设备是:键盘,输出设备是:显示器
System.in的类型是InputStream
System.out的类型是PrintStream,其是OutputStream的子类 FilterOutputStream 的子类
重定向:通过System类的setIn,setOut方法对默认设备进行改变。
public static void setIn(InputStream in)
public static void setOut(PrintStream out)
从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。
处理流之四:打印流实现将基本数据类型的数据格式转化为字符串输出
打印流:PrintStream和PrintWriter 提供了一系列重载的print()和println()方法,用于多种数据类型的输出
PrintStream和PrintWriter的输出不会抛出IOE ...
Java-IO流-7
字符编码编码表的由来
计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识 别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。 这就是编码表。
常见的编码表
ASCII:美国标准信息交换码。 用一个字节的7位可以表示。
ISO8859-1:拉丁码表。欧洲码表 用一个字节的8位表示。
GB2312:中国的中文编码表。最多两个字节编码所有字符
GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码
Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。
UTF-8:变长的编码方式,可用1-4个字节来表示一个字符。
字符集和字符编码的区别1、字符,字符集,字符编码概念
字符:在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信息。即一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。
字符集:多个字符的集合。例如GB2312是中国国家标准的简体中文字符集,GB2312收录简化汉字(6763个)及一般符号、序号 ...
Java-IO流-6
处理流之二:转换流转换流提供了在字节流和字符流之间的转换
Java API提供了两个转换流:
InputStreamReader:将InputStream转换为Reader 字节输入流->字符输出流
OutputStreamWriter:将Writer转换为OutputStream 字符输入流->字节输出流
字节流中的数据都是字符时,转成字符流操作更高效。
很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能。
解码:字节、字节数组 —>字符数组、字符串
编码:字符数组、字符串 —> 字节、字节数组
InputStreamReader和OutputStreamWriterInputStreamReader
实现将字节的输入流按指定字符集转换为字符的输入流。 需要和InputStream“套接”。
常用构造器
1public InputStreamReader(InputStream in)
1public InputSreamReader(InputStream in,String charsetName)
如: Reader isr ...
Java-IO流-5
处理流之一:缓冲流处理流,就是“套接”在已有的流的基础上。
为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类 时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区。
当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓冲区
当使用BufferedInputStream读取字节文件时,BufferedInputStream会一次性从 文件中读取8192个(8Kb),存在缓冲区中,直到缓冲区装满了,才重新从文件中 读取下一个8192个字节数组。
缓冲流要“套接”在相应的节点流之上,根据数据操作单位可以把缓冲流分为:
BufferedInputStream 和 BufferedOutputStream
BufferedReader 和 BufferedWriter
向流中写入字节时,不会直接写到文件,先写到缓冲区中直到缓冲区写满,BufferedOutputStream才会把缓冲区中的数据一次性写到文件里。使用方法 flush()可以强制将缓冲区的内容全部写入输出流。
flush()方法的使用:手动将buffer中内容写入文 ...
Java-IO流-4
FileInputStreamFileInputStream是Java语言中抽象类InputStream用来具体实现类的创建对象。FileInputStream可以从文件系统中的某个文件中获得输入字节,获取的文件可用性取决于主机环境。(输入流 字节流 节点流)
FileInputStream通过打开与实际文件的连接来创建一个文件,该文件由文件系统中的File 对象命名file。
1public FileInputStream(File file)
FileInputStream通过使用文件描述符创建一个,该描述符 fdObj表示与文件系统中实际文件的现有连接。
1public FileInputStream(FileDescriptor fdObj)
FileInputStream通过打开与实际文件的连接来创建一个文件,该文件由name 文件系统中的路径名命名。
1public FileInputStream(String name)
FileInputStream操作文本文件时并在控制台打印时的问题
FileOutputStreamFileOutputStream流 ...
Java-IO流-3
IO流操作文件
创建源 File
选择创建流 InputStream OutputStream Reader Writer
读写操作 write() read()
关闭资源 close()
FileReaderFileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。可以通过以下几种构造方法创建需要的对象。(输入流 节点流 字符流 )
在给定从中读取数据的 File 的情况下创建一个新 FileReader。
1public FileReader(File file)
在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。
1public FileReader(FileDescriptor fd)
在给定从中读取数据的文件名的情况下创建一个新 FileReader。查看源码得知,当fileName不为空时,会调用new file(fileName)创建出一个file对象,从而简化代码。
1public FileReader(String fileName)
)
将的hello.txt文件内容读入 ...
Java-IO流-2
Java IO原理I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。
Java程序中,对于数据的输入/输出操作以“流(stream)” 的 方式进行。
java.io包下提供了各种“流”类和接口,用以获取不同种类的 数据,并通过标准的方法输入或输出数据
输入input:读取外部数据(磁盘、光盘等存储设备的数据)到 程序(内存)中。
输出output:将程序(内存) 数据输出到磁盘、光盘等存储设 备中。
流的分类按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
按数据流的流向不同分为:输入流,输出流
按流的角色的不同分为:节点流(文件流),处理流
Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个 抽象基类派生的。
由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。
节点流:直接从数据源或目的地读写数据
处理流:不直接连接到数据源或目的地,而是“连接”在已存 在的流(节点流或处理流)之上,通过对数据的处理为程序提 供更为强大的读写功能。
对于文本文件(.txt,.ja ...