如果是servlet 则可以通过servletContext 读取web资源文件
如果不是servlet则只能通过类装载器去读取了(类装载器有弊端,文件不能太大,二不能及时更新)
web工程中,对于java类我们是无法直接读取web资源的,因此如果想要java程序读取web资源,我们通常使用类装载器(UserDao)为任意src下的java文件
java文件运行的话,服务器通过类装载器去装载classes目录下的所有java类(src目录下的内容发布的时候会发布到web工程下的classes目录中)的所有资源文件
我们可以通过UserDao.class.getClassLoader().getResourceAdStream("fileName");/、通过任何一个类,我们可以获得加载该类的类装载器,通用的应该只有一个吧????,可以加载所有的资源文件
对于某些资源,如数据库连接的数据,我们只需要加载一次就可以了,这是我们可以把加载数据库相关的代码,放到静态代码块中
在web工程中,类装载器对类的加载只加载一次,如果以前加载过该类并且没有销毁,则不会再次加载该类
注意以下两种方式的区别,第一种是类加载器的方式,第二种是普通的输入流的方式,如果在程序运行期间改变properties中的内容,第一种方式获取是还是以前的内容,第二种方式是改变后的内容
程序以什么码表输出到客户端,就在respond中指定客户端浏览器以什么样的编码读取这些数据
<meta>标签可以模拟http相应头,我们可以用<meta>标签来控制浏览器的行为
,如指定编码格式
out.write("<meta http-wquiv='content-type' content='text/html' cahrset=UTF-8>");这和在respond添加header头信息是一样的(如上图)
respond.setHeader("content-type","text/html.charset=UTF-8")//注意这样写访问servlet时会下载文本
printWriter 字符流输出,只能输出字符串
outputStream 字节流,可以输出所有的内容形式
setContentType("text/html;charset=UTF-8")//这句话可以代替上边两句话,内部调用了上边两个函数.解决乱码问题
第一句话控制respond以什么编码格式写出数据
第二句话控制浏览器以什么编码格式打开返回的数据
服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment:
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.txt");
文件下载时,如果文件文成是中文,则需要把中文经过URL编码
URLEncoder.encode(filename,encodetype);
URLEncoder.encode(filename,"UTF-8");
重定向:
respond.setStatus(302);
respond.setHeader("location","/error.html");
OR
respond.setRedirect("error.html");//特点放两次请求,地址会变
注意重定向和转发的区别,转发不会改变地址栏,
重定向的用处,登陆和购买
获取rquest数据的几种方式
web servlet一般不输出数据跳转到jsp输出数据, 跳转后一定要return,否则可能出现异常
forword时会清空respond 中的数据,respond头信息仍然有效
respond可以实现转发,
request也可以实现转发
web中各种地址的写法
书写地址时主要看改地址是谁要使用
对于1,我们知道是请求转发,转发到另一个servlet中处理,因此是在web工程中使用,因此书写时应相对于当前web应用根目录
2,sendRedirect我们知道是重定向,让浏览器去发送另一个请求,是浏览器要调用改资源地址,因此是相对于tomcat容易而言的
3,4相对于web应用根目录而言的
5表单,点击是浏览器发送一个请求,是浏览器调用的,因此是相对于tomcat目录而言的