1、Path总结 1、java项目 1 File file = new File(""); file.getAbsolutePath(); * 使用java命令,输出路径是,当前java命令停留的盘符 * F:\workspaces\20141123\demo\bin * 使用myeclipse或eclipse运行时 * F:\workspaces\20141123\demo 2 File file = new File("/"); file.getAbsolutePath(); * 获得当前盘符 * F: 3 URL url = Hello.class.getClassLoader().getResource(""); * 获得路径,使用类加载器 * F:/workspaces/20141123/demo/bin/ * 当前类被加载时,所在的文件根目录 4 URL url = Hello.class.getClassLoader().getResource("/"); * 不能使用 * null 2、web项目 1、通过servletcontext获得文件,WebRoot根目录下的文件 ServletContext sc = this.getServletContext(); * 获得实际路径 * sc.getRealPath("/1.html"); * 获得URL * URL url = sc.getResource("/1.html"); * 获得流【**】 * InputStream is = sc.getResourceAsStream("/1.html"); 如果要获取WebRoot/page/abc/2.html,则 InputStream is = sc.getResourceAsStream("/page/abc/2.html"); 2、web的相对路径 * 前提:相对当前的页面1.html * 使用分类: 1、abc:与当前页面同级的目录或servlet的名称 * <a href="c/c.html">c.html</a><br> 2、/abc:相对于web站点,%tomcat%/webapps/ * <a href="/day06_web/b/c/c.html">c.html</a><br> 3、./abc:当前目录,与第一种情况相同 * <a href="./c/c.html">c.html</a><br> 4、../abc:上一次目录 * <a href="../b/c/c.html">c.html</a><br> 总结:操作过程 当前页面:http://localhost:8080/day06_web/b/b.html 目标页面:http://localhost:8080/day06_web/b/c/c.html / -- webapps -- http://localhost:8080 2、ServletContext * 对当前web项目上下文的描述(对当前web项目所有内容的描述),由tomcat在启动时创建,tomcat关闭时销毁。说白了,也就是说可以管理WebRoot下的文件,比如读取WebRoot下的文件 * servlet -- > init(ServletConfig) --> config.getServletContext(); * 当前servlet的所在的项目 * tomcat为每一个web项目单独创建一个区域,用来管理整个项目。此区域成为ServletContext * 管理当前项目【*****】 ServletContext sc = this.getServletContext();//源码其实就是config.getServletContext() * 获得实际路径,要求必须/开头 * sc.getRealPath("/1.html");//得到WebRoot根目录下1.html的绝对路径 * 操作数据 * add set get remove delete * setAttribute/getAttribute/removeAttribute * ServletContext对象对所有的servlet共享数据 * 给当前web项目配置内容【**】 * 配置文件的位置:web.xml * 配置内容,例如配置数据库连接字符串 <context-param> <param-name>username</param-name> <param-value>root</param-value> </context-param> * 如何读取 //获得ServletConetxt ServletConetxt sc = this.getServletContext(); //获得所有的配置信息名称<context-param><param-name>username</param-name> Enumeration<String> names = sc.getInitParameterNames(); while(names.hasMoreElements()){ String value = sc.getInitParameter(name); System.out.println("context:"+name+":"+value); } * context root * 当前ServletContext所指web项目的根 * tomcat --> webapps/webName/ * myeclipse -->webName/WebRoot/ 3、ServletResponse * 服务器对浏览器做出的响应,将需要发送给浏览器的所有数据全部存放在此对象上。 * 发送数据,使用流操作,将所需要的数据,存放在指定的流中,数据将显示到浏览器中 HttpServletResponse response ; * 字符流 * response.getWriter(); * 字节流 * response.getOutputStream(); * 当使用getOutputStream时,不能使用getWriter * getOutputStream() has already been called for this response * 当使用getWriter时,不能使用getOutputStream * getWriter() has already been called for this response * 总结:两个流同时只能使用一个 * 字节流:getOutputStream,一般在程序中使用具有拷贝功能等 * 发送中文 * 不能发送 * out.print(data); 不能发送中文数据 * 异常信息:java.io.CharConversionException Not an ISO 8859-1 character: 中 * 可以发送 * out.write(data.getBytes("UTF-8")); * 字符流:getWriter,一般在程序中发送数据内容 * 发送中文 * out.println("中文"); * 乱码【****】 * response.setContentType("text/html;charset=utf-8"); * 通知tomcat和浏览器发送数据的编码 * 注意: * 设置编码时,必须放置在需要输出语句之前,建议放置在doGet或doPost第一行 4、ServletRequest * 浏览器向服务器的请求(浏览器将数据发送给服务器时,数据存放的地方) * 请求方式:GET和POST * GET:发送的数据,追加在请求的URL之上 * POST:发送的数据在HTTP请求体中 * 浏览器发送数据 * 表单form, * method属性:指定的请求方式 * action属性:接收数据的程序路径 * 服务器获得浏览器发送的数据 * 获得单个数据 * request.getParameter("username"); 获取input type="radio"时,获取的是选中的值 * 获得一组数据 * request.getParameterValues("love"); 获取input type="checkbox"时,获取的是选中的值 * 处理中文乱码 * request.setCharacterEncoding("UTF-8"); * 注意: * 此方法只对POST请求有效,GET需要单独处理 * 需要放置在获得数据之前,建议放在第一个行 一般建议将处理doGet的方法交给doPost进行处理,在doPost中获取 request.setCharacterEncoding("UTF-8"); String userName = request.getParameter("userName"); 如果非要在doGet中获取,可以使用以下代码: 第一种方式: String userName = new String(request.getParameter("userName").getBytes("ISO-8859-1"),"UTF-8"); 第二种方式: //得到参数字符串 String query = request.getQueryString(); //解码 String q = URLDecode.decode(query,"UTF-8"); 结果:q:uername=中文
时间: 2024-10-06 02:23:30