zoukankan      html  css  js  c++  java
  • JavaWeb——Servlet开发2

    1、HttpServletRequest的使用

     获取Request的参数的方法。

    • 方法getParameter将返回参数的单个值
    • 方法getParameterValues将返回参数的值的数组
    • 方法getParameterMap将返回包含了所有参数名值对的java.util.Map<String,String[]>
    • 方法getParameterNames方法将返回所有可用参数的名字的枚举

     确定与内容相关的信息

    • getContentType将返回请求的MIME内容类型,例如text/html、application/javascript等等
    • getContentLength和getContentLong都将返回请求正文的长度,区别是getContentLong用于内容超过2GB的
    • getCharacterEncoding将返回请求内容的字符编码

     读取请求的内容

    • getInputStream将返回一个javax.servlet.ServletInputStream,用于读取请求中的二进制内容
    • getReader将返回一个java.io.BufferedReader,用于读取字符编码

         要注意的是不能在统一请求上同时使用这两个方法,调用了其中一个方法之后,再调用另一个方法将触发异常

     读取请求特有的数据

    • getRequestURL,返回客户端同于创建请求的完整URL,包括协议、服务器名、端口号和服务器路径,不包括查询字符串,例如http://localhost:8080/hello-world/first?user=a%20user,该方法将返回http://localhost:8080/hello-world/first

    • getRequestURI,只返回URL的服务器路径部分,对于上面的例子来说,该方法将返回/hello-world/first
    • getServletPath,只返回Servlet映射的URL部分/first
    • getHeader,返回指定名字的头数据,传入参数的大小写不必与头名称大小写一致,所以getHeader("contenttype")可以匹配Content-Type头,如果多个头使用了相同的名字,将只返回第一个值如果不指定参数名,将返回所有值的枚举

    • getHeaderNames:返回请求中所有头数据的枚举
    • getDateHeader:对于可以表示有效时间戳的头数据,将返回一个Unix时间戳

    2、使用HttpServletResponse

     编写响应正文

    • getOutputStream将返回一个javax.servlet.ServletOutputStream,将用于编写二进制数据
    • getWriter将返回一个java.io.PrintWriter,使用这个方法可以向客户端返回HTML或者其他基于字符编码的文本。

      同样不能对同一个响应对象同时使用这两个方法,调用了其中一个方法之后,再调用另一个方法将触发异常

    • setContentType和setCharacterEncoding将用于设置内容类型和编码格式

     设置头和其他响应属性

    • setHeader、setIntHeader、setDateHeader等方法可以设置几乎所有的头数据,如果现有的响应头中已经包括了同名的头、该头数据将被覆盖。
    • 为了防止覆盖可以使用addHeader、addIntHeader、addDateHeader等方法,这些方法不会覆盖原有的头数据,会添加一个额外的值。
    • 还可以使用getHeader、getIntHeader、getDateHeader等方法判断是否已经在响应中设置过某个响应头

      另外还可以使用

    • setStatus 用于设置HTTO响应状态码
    • getStatus 判断当前响应的状态
    • sendError 设置状态码,表示一条可选的错误消息将会输出到响应数据中,重定向到Web容器为客户端提供错误页面,并清空缓存

    sendRedirect 将客户端重定向至另一个URL

    3、使用参数和接受表单提交

      上面记录了很多方法,接下来就是使用的时候了

      在我自己实现的HelloServlet中我修改了doGet和doPost方法:

        private static final String DEFAULT_USER = "Guest";
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String user = req.getParameter("user");
            if(user == null){
                user = HelloServlet.DEFAULT_USER;
            }
            resp.setContentType("text/html");
            resp.setCharacterEncoding("UTF-8");
    
            PrintWriter writer = resp.getWriter();
            writer.append("<!DOCTYPE html>
    ")
                    .append("<html >
    ")
                    .append("   <head>
    ")
                    .append("       <title>hello user application</title>
    ")
                    .append("   </head>
    ")
                    .append("   <body>
    ")
                    .append("       Hello, ").append(user).append("!<br/><br/>
    ")
                    .append("         <form action="first" method="POST">")
                    .append("              Enter your name:<br/>
    ")
                    .append("              <input type="text" name="user"/><br/>
    ")
                    .append("              <input type="submit" value="Submit"/>
    ")
                    .append("         </form>
    ")
                    .append("     </body>
    ")
                    .append("</html>
    ");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req,resp);
        }

      这里的实现的具体逻辑是:

    • 检查请求中是否包含user参数,如果没有包含的话,就设置为我提前设置好的常量
    • 将响应的内容类型设置为text/html,将字符编码设置为UTF-8
    • 从响应中获取一个PrintWriter,然后调用append方法编写响应正文

      这里的HTML中的表单方法设置为POST,不过在doPost中只是简单的调用了doGet方法,因为这里的表单将读取我们输入的数据并赋值给user变量。

      这是直接访问这个URL的效果。

      在URL中添加字符串user=niko,变成http://localhost:8080/hello-world/first?user=niko

      在输入框中输入xx,点击Submit

    然后我修改了一下,试用了上面的大部分代码,比较乱,代码是:

        private static final String DEFAULT_USER = "Guest";
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String user = req.getParameter("user");
            if(user == null){
                user = HelloServlet.DEFAULT_USER;
            }
            resp.setContentType("text/html");
            resp.setCharacterEncoding("UTF-8");
    
            PrintWriter writer = resp.getWriter();
            writer.append("<!DOCTYPE html>
    ")
                    .append("<html >
    ")
                    .append("   <head>
    ")
                    .append("       <title>hello user application</title>
    ")
                    .append("   </head>
    ")
                    .append("   <body>
    ")
                    .append("       Hello, ").append(user).append("!<br/><br/>
    ")
                    .append("         <form action="first" method="POST">
    ")
                    .append("              用户名:<input type="text" name="user"/><br/>
    ")
                    .append("              密码 :<input type="text" name="pwd"><br/>
    ")
                    .append("              性别:<input type="radio" name="sex" value="boy" checked="checked">男
    ")
                    .append("                    <input type="radio" name="sex" value="girl">女<br/>
    ")
                    .append("              爱好:<input type="checkbox" name="hobby" value="game" >打游戏
    ")
                    .append("                    <input type="checkbox" name="hobby" value="book" >看书
    ")
                    .append("                    <input type="checkbox" name="hobby" value="music" >听音乐
    ")
                    .append("                    <input type="checkbox" name="hobby" value="coding" >编程<br/>
    ")
                    .append("               所在学校:<select name="school">
    ")
                    .append("                        <option>---请选择---</option>
    ")
                    .append("                        <option value="yz">一中</option>
    ")
                    .append("                        <option value="ez">二中</option>
    ")
                    .append("                        <option value="bz">八中</option>
    ")
                    .append("                        </select><br/>
    ")
                    .append("               <input type="submit" value="点击提交">
    ")
                    .append("         </form>
    ")
                    .append("     </body>
    ")
                    .append("</html>
    ");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String user = req.getParameter("user");
            String pwd = req.getParameter("pwd");
            String sex = req.getParameter("sex");
            String[] hobby = req.getParameterValues("hobby");
            String school = req.getParameter("school");
            Map<String,String[]> paramMap = req.getParameterMap();
            Enumeration<?> paramNames = req.getParameterNames();
            Enumeration<?> HeaderNames = req.getHeaderNames();
            this.doGet(req,resp);
    
            PrintWriter writer = resp.getWriter();
            if(user != null){
                writer.append("用户名 = ").append(user).append("<br/>");
            }
            if(pwd != null){
                writer.append("密码 = ").append(pwd).append("<br/>");
            }
            if(sex != null){
                writer.append("性别 = ").append(sex).append("<br/>");
            }
            if(hobby != null){
                writer.append("爱好 = ").append(Arrays.toString(hobby)).append("<br/>");
            }
            if(school != null){
                writer.append("学校 = ").append(school).append("<br/><br/>");
            }
            if(paramMap != null){
                writer.append("paramMap:").append("<br/>");
                for (Map.Entry<String,String[]> entry : paramMap.entrySet()) {
                    writer.append(entry.getKey()).append(" = ").append(Arrays.toString(entry.getValue())).append("<br/>");
                }
            }
            if(paramNames != null){
                writer.append("paramNames: ");
                while(paramNames.hasMoreElements()){
                    String value = (String)paramNames.nextElement();
                    writer.append(value).append(", ");
                }
                writer.append("<br/>");
            }
            writer.append("getContentType:  ").append(req.getContentType()).append("<br/>");
            writer.append("getContentLength:  " + req.getContentLength()).append("<br/>");
            writer.append("getCharacterEncoding:  ").append(req.getCharacterEncoding()).append("<br/>");
            writer.append("getRequestURL:  ").append(req.getRequestURL()).append("<br/>");
            writer.append("getRequestURI:  ").append(req.getRequestURI()).append("<br/>");
            writer.append("getDateHeader:  " + req.getDateHeader("")).append("<br/>");
            if(HeaderNames != null){
                writer.append("HeaderNames: ");
                while(HeaderNames.hasMoreElements()){
                    String value = (String)HeaderNames.nextElement();
                    writer.append(value).append(", ");
                }
                writer.append("<br/>");
            }
        }

      具体效果:

  • 相关阅读:
    Linux文件名匹配
    Linux的常用命令
    百度飞桨学习笔记【Windows下用anaconda安装飞桨】
    在python中调用shell命令获得返回值
    使用sratoolkit下载NCBI数据
    perl 打开gz压缩文件 输出gz压缩文件
    jupyter notebook安装教程,打开ipynb文件
    生物信息学相关网站和博客资源
    R的循环补齐功能
    perl 遍历目录并且对目录中的文件进行操作
  • 原文地址:https://www.cnblogs.com/xxbbtt/p/8349963.html
Copyright © 2011-2022 走看看