一.路径问题
如果是在浏览器端请求服务器的数据(超链接,js的src),那么加/代表在Tomcat的webapp目录,不加/的话通常不考虑,实际上不加/在浏览器端也是当前项目目录(但是开发中通常必须要写/)
如果是在服务器端请求的服务器的数据,那么加/代表在项目的webcontent下面,而不加/是一样的.
getServletContext和getClassLoader.getResourceAsStream()的区别.
getServletContext寻找的范围要大于getClassLoader.getResourceAsStream()的范围.getServletContext是从webContent下面寻找的,而getResourceAsStream是从classes下面寻找的,不在classes下面的文件找不到.
例如,想要获取src下包为com.xyy下的a.txt文件,可以用下面的两行代码:

this.getClass().getClassLoader().getResourceAsStream("/com/xyy/a.txt");//从classpath(即classes文件夹下找)
this.getServletContext().getResoureAsStream("/WEB-INF/classes/com/xyy/a.txt");//从webcontent下找.加不加/都一样

常用方法总结:

  Java应用 JavaWeb应用
ServletContext.getRealPath() 不适合 可以读取应用中的任何位置上的任何文件
ResourceBundle 适合  适合:只能读取类路径中的properties文件.注意:只传资源名,利用ResourceBundler的静态方法传入文件名(不带扩展名获取对象,再通过getObject/getString方法获取值)
ClassLoader 适合  适合:只能读取类路径中的任何文件。注意:不要加载特别大的文件。虚拟机内存有限制。      

二.Servlet常用的接口

1.ServletConfig接口:

Servlet是发布在web应用程序上运行的,此web应用程序称之为Servlet容器.Servlet引擎将代表Servlet容器的对象和Servlet的配置参数的信息一并封装到一个ServletConfig对象中,并且在初始化Servlet实例对象时,传递给该Servlet.传递的方法是通过调用init(ServletConfig)方法传入参数.而在servlet中还提供getServletConfig方法来获取到该对象的引用.

getInitparameteNames():获取所有参数的参数名,参数在web.xml中的<init-param>标签中配置.

getServletContext():在servlet程序中,每个web应用程序(servlet容器)都用一个ServletContext的对象来表示,ServletConfig对象中包含对ServletContext对象的引用,而getServletContext方法则返回该引用.

2.ServletContext接口:
常用的方法:getInitParameter():取得全局初始化配置的参数.
getRealPath/getResourceAsStream():取得一个资源的路径或者一个输入流,和Classloader.getResourceAsStream()只能找寻在classpath路径下的资源不同,该方法可以找寻webcontent目录,也就是在tomcat的项目目录下的任意资源.注意这里的参数最好填绝对路径,即以/开头./代表当前项目的webcontent目录.
域对象,又称为application类型的域对象.四大域对象中范围最大,代表整个应用范围,可以被多个servlet所应用.
setAttribute(当设置某键值对值为null的时候,效果等同于removeAttribute).removeAttribute(),getAttribute()
实现Servlet的转发:

三.编码问题的解决方法.
1.解决写出利用response.getWriter()写出中文乱码的问题
解决方式1:

response.setCharacterEncoding("UTF-8");    //设置服务器向response中写入的编码
response.setHeader("content-type","text/html;charset=UTF-8");//设置浏览器读取的编码
response.getWriter().write("你在干嘛");

解决方式2:

response.setContentType("text/html;charset=UTF-8");//同时设置服务器和浏览器的编码
response.getWriter().write("你在干嘛");

2.解决post请求提交到服务器端出现乱码问题.
由于浏览器通常情况下会设置meta头为charset=UTF-8,因此通常情况下,浏览器会直接将post请求携带的参数编成UTF-8,而我们需要设置的是在Tomcat中读取数据的码表.因此只需要通过一个方法设置即可.即设置request.setCharacterEncoding("UTF-8");设置完毕后,可以正常获取post请求的参数.

3.解决get请求提交到服务器发生的乱码问题.
get直接在地址栏输入中文的时候,不同浏览器编码不同和post请求不同(post请求编码和浏览器解码一致)
第一种:在客户端进行两次编码,即encodeURI(encodeURI("中国","UTF-8"),"UTF-8");这种方式进行编码后,第一次将"中国"变成UTF-8(带%的字符串),而第二次则在此基础上进行了再次编码,对字符串进行了编码.这里要注意UTF-8和一些常见的编码方式如ISO8859和GBK等方式对英文的编码都是一致的.
随后将编好的码通过网络流传输到服务器.服务器收到编码后,再调用request.getParameter获取参数的时候,会默认解一次码,因为UTF-8和服务器解码方式(Tomcat为ISO8859)解码得到的字符串一致,因此可以用Tomcat默认的解码方式解码,随后再用URLDecoder进行解码即可.这样就不会乱码了,代码如下:
浏览器端:

<script>
location.href="/store/LoginServlet?name="+encodeURI(encodeURI("中国","UTF-8"),"UTF-8");
</script>

服务器端:

String name=request.getParameter("name");//采用ISO8859解码(等同于UTF-8)
name=URLDecoder.decode(name,"UTF-8");//采用UTF-8解码

第二种:在浏览器端不对中文进行编码,由于之后服务器在request.getParameter的时候,会对浏览器进行解码,采用的是服务器(这里是Tomcat)内置的码表,ISO8859-1,这样子就会发生乱码.此时可以先对得到的乱码字符串进行用ISO8859-1解码,在用UTF-8进行编码,即可获取到中文参数.示例如下:
浏览器端

<script type="text/javascript">
location.href="/day14_servlet4/EncodeServlet?name=我爱吃饭"
</script>

服务器端

String name=request.getParameter("name");
System.out.println(new String(name.getBytes("ISO8859-1"),"UTF-8"));

servlet学习笔记_3的更多相关文章

  1. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

  2. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  3. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  4. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  5. jsp&servlet学习笔记

    1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...

  6. Servlet 学习笔记

    Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...

  7. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  8. Servlet学习笔记(七)—— 自己定义过滤器的编写改进:自己定义实现FilterChain

    笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,可是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤.最后response过滤,而且中间几项过滤的顺序不能动态改变.所 ...

  9. Servlet学习笔记(八)—— 文件下载

    一.文件下载概述 比如图片或者HTML这类静态资源,仅仅要在浏览器中打开正确的网址就行下载.仅仅要资源放在应用程序文件夹或者其下的子文件夹中,但不在WEB-INF下.Servlet/JSP容器就会将资 ...

随机推荐

  1. HDU 5458 Stability(双连通分量+LCA+并查集+树状数组)(2015 ACM/ICPC Asia Regional Shenyang Online)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 Problem Description Given an undirected connecte ...

  2. 将HTML5封装成android应用APK文件的几种方法(转载)

    越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...

  3. 查看SQL语句在SQL Server上的执行时间

    set statistics profile onset statistics io onset statistics time ongo--begin <这里写上你的语句...>  se ...

  4. HTML5表单那些事

    //一般写法 <form method="post" action="http://xxx:port/form"></form> //高 ...

  5. 物理引擎-Physx的源代码去哪里找

    前几天无意中看到了Physx开源了,就连自己的领导也高兴了一下,让本道士去下载源代码琢磨一下,顺便做几个例子跑起来.结果没成想这个nvidia的github上的源代码被移除了,而且csdn,pudn上 ...

  6. Scala学习笔记之二--基本数据类型

    前言 本篇主要讲Scala的基本数据类型,更多教程请参考:Scala教程 基本数据类型 Scala一共提供了9中数据类型,Scala的基本数据类型与java中的基本数据类型是一一对应的,这是Scala ...

  7. 非常好的Oracle教程【转】

    http://www.blogjava.net/kiant/articles/234781.html Oracle 笔记(四).SQL 几个要点 附录: 1.SQL 简介 2.SQL 操作符 3.Or ...

  8. 如何通过Azure Service Management REST API管理Azure服务

    通过本文你将了解: 什么是Azure Service Management REST API 如何获取微软Azure 订阅号 如何获取Azure管理证书 如何调用Azure Service Manag ...

  9. sum data

    $('.group_header').each(function(){ ; $(this).nextUntil('tr.group_header').find('.num').each(functio ...

  10. Js 拖动效果

    <!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>j ...