黑马程序员技术交流社区

标题: 【石家庄校区】day15-request和response [打印本页]

作者: 账号随机生成    时间: 2018-5-21 11:47
标题: 【石家庄校区】day15-request和response
day15-request和response读取WEB工程下的文件使用ServletContext对象读取WEB项目下的文件使用getResourceAsStream读取/**         * 使用ServletContext中的getResourceAsStream读取.         * @throws FileNotFoundException         * @throws IOException         */        private void test2() throws FileNotFoundException, IOException {                        // 获得ServletContext:                ServletContext context = this.getServletContext();                InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");                Properties properties = new Properties();                properties.load(is);                                String driverClass = properties.getProperty("driverClass");                String url = properties.getProperty("url");                String username = properties.getProperty("username");                String password = properties.getProperty("password");                                System.out.println(driverClass);                System.out.println(url);                System.out.println(username);                System.out.println(password);        }使用getRealPath读取文件/**         * 使用ServletContext中的getRealPath读取.         * @throws FileNotFoundException         * @throws IOException         */        private void test3() throws FileNotFoundException, IOException {                // 获得ServletContext:                ServletContext context = this.getServletContext();                String realPath = context.getRealPath("/WEB-INF/classes/db.properties");                // 获得该文件的磁盘绝对路径.                System.out.println(realPath);                InputStream is = new FileInputStream(realPath);                                Properties properties = new Properties();                properties.load(is);                                String driverClass = properties.getProperty("driverClass");                String url = properties.getProperty("url");                String username = properties.getProperty("username");                String password = properties.getProperty("password");                                System.out.println(driverClass);                System.out.println(url);                System.out.println(username);                System.out.println(password);        }
总结:ServletContxt的功能:【功能一:读取全局初始化参数】String getInitParameter(String name)Enumeration getInitParameterNames()
配置全局初始化参数:
<context-param>          <param-name>username</param-name>          <param-value>root</param-value>  </context-param>    <context-param>          <param-name>password</param-name>          <param-value>123</param-value>  </context-param>
代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {                String username = this.getServletContext().getInitParameter("username");                String password = this.getServletContext().getInitParameter("password");                                System.out.println(username+"    "+password);                                Enumeration<String> e = this.getServletContext().getInitParameterNames();                while(e.hasMoreElements()){                        String name = e.nextElement();                        String value = this.getServletContext().getInitParameter(name);                        System.out.println(name+"    "+value);                }        }【功能二:获得文件的MIME的类型】String getMimeType(String file) 获得文件的MIME类型
代码实现:
/**         * 获得文件的MIME的类型         */        private void test2() {                String type = this.getServletContext().getMimeType("1.html");                System.out.println(type);        }【功能三:作为域对象存取数据】【功能四:读取web项目下的文件】类加载器读取文件public static void readFile() throws IOException{                // 使用类的加载器来读取文件.                // 类的加载器用来加载class文件,将class文件加载到内存.                InputStream is = ReadFileUtils.class.getClassLoader().getResourceAsStream("db.properties");                Properties properties = new Properties();                properties.load(is);                                String driverClass = properties.getProperty("driverClass");                String url = properties.getProperty("url");                String username = properties.getProperty("username");                String password = properties.getProperty("password");                                System.out.println(driverClass);                System.out.println(url);                System.out.println(username);                System.out.println(password);        }登录成功后,完成文件的下载
在登录成功后,页面跳转文件下载的列表的页面,点击列表中的某些连接,下载文件.
Response的概述Response的常用API
针对一个key对应多个value的头信息.
void addDateHeader(String name,long date)
void addHeader(String name,String value)
void addIntHeader(String name,int value)
针对一个key对应一个value的头信息.
void setDateHeader(String name,long date)
void setHeader(String name,String value)
void setIntHeader(String name,int value)
ServletOutputStream getOutputStream()
PrintWriter getWriter()
【文件下载的方式】代码实现public class DownloadServlet extends HttpServlet {        private static final long serialVersionUID = 1L;        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {                // 1.接收参数                String filename = request.getParameter("filename");                // 2.完成文件下载:                // 2.1设置Content-Type头                String type = this.getServletContext().getMimeType(filename);                response.setHeader("Content-Type", type);                // 2.2设置Content-Disposition头                response.setHeader("Content-Disposition", "attachment;filename="+filename);                // 2.3设置文件的InputStream.                String realPath = this.getServletContext().getRealPath("/download/"+filename);                InputStream is = new FileInputStream(realPath);                // 获得response的输出流:                OutputStream os = response.getOutputStream();                int len = 0;                byte[] b = new byte[1024];                while((len = is.read(b))!= -1){                        os.write(b, 0, len);                }                is.close();        }        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {                doGet(request, response);        }}文件下载的核心思想:
IO的读/写
InputStream in = new FileInputStream("服务器上的路径");
OutputStream os = response.getOutputStream();
模板代码读,写
int len = 0;byte[] b = new byte[1024];while((len = is.read(b)) != -1) {    os.write(b,0,len);}is.close();中文文件的下载/** * 文件下载的Servlet */public class DownloadServlet extends HttpServlet {        private static final long serialVersionUID = 1L;        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {                // 1.接收参数                String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");                System.out.println(filename);                // 2.完成文件下载:                // 2.1设置Content-Type头                String type = this.getServletContext().getMimeType(filename);                response.setHeader("Content-Type", type);                // 2.3设置文件的InputStream.                String realPath = this.getServletContext().getRealPath("/download/"+filename);                                // 根据浏览器的类型处理中文文件的乱码问题:                String agent = request.getHeader("User-Agent");                System.out.println(agent);                if(agent.contains("Firefox")){                        filename = base64EncodeFileName(filename);                }else{                        filename = URLEncoder.encode(filename,"UTF-8");                }                                // 2.2设置Content-Disposition头                response.setHeader("Content-Disposition", "attachment;filename="+filename);                                InputStream is = new FileInputStream(realPath);                // 获得response的输出流:                OutputStream os = response.getOutputStream();                int len = 0;                byte[] b = new byte[1024];                while((len = is.read(b))!= -1){                        os.write(b, 0, len);                }                is.close();        }                public static String base64EncodeFileName(String fileName) {                BASE64Encoder base64Encoder = new BASE64Encoder();                try {                        return "=?UTF-8?B?"                                        + new String(base64Encoder.encode(fileName                                                        .getBytes("UTF-8"))) + "?=";                } catch (UnsupportedEncodingException e) {                        e.printStackTrace();                        throw new RuntimeException(e);                }        }        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {                doGet(request, response);        }}response输出响应内容的方法
向页面响应的方法:
使用字符流输出中文:
输出中文乱码的处理:
字符流输出中文:
***** 简化的写法:response.setContentType(“text/html;charset=UTF-8”);
完成用户注册的功能
网站首页上点击注册的链接,跳转到注册页面,在注册页面中输入信息.完成注册:(将数据保存到数据库中).
Request的概述
Request 代表用户的请求.
Request的API
功能一:获得客户机相关的信息
功能二:获得从页面提交的参数:
功能三:作为域对象存取数据:
演示request获得客户机的信息public class RequestServlet extends HttpServlet {        private static final long serialVersionUID = 1L;        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {                // 获得请求方式:                String method = request.getMethod();                System.out.println("请求方式:"+method);                // 获得客户机的IP地址:                String ip = request.getRemoteAddr();                System.out.println("IP地址:"+ip);                // 获得用户的请求的路径:                String url = request.getRequestURL().toString();                String uri = request.getRequestURI();                System.out.println("获得请求的URL:"+url);                System.out.println("获得请求的URI:"+uri);                // 获得发布的工程名:                String contextPath = request.getContextPath();                System.out.println("工程名:"+contextPath);                        }        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {                doGet(request, response);        }}代码实现处理request接收参数的中文乱码的问题
现在无论是GET还是POST提交中文的时候,都会出现乱码的问题.
解决
Request作为域对象存取数据
使用request对象存取数据:
request的作用范围:
重定向和转发的区别:(redirect和forward的区别)





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2