• 使用request对象实现注册示例,get/post的编码问题


    0、项目环境的建立:

      参考博客:https://www.cnblogs.com/cq0143/p/10674637.html

    1.jsp基础知识:

    JSP的页面元素:

    •   HTML:
    •   java代码(脚本Scriptlet):
    •   指令:
    •   注释:

    1.1.脚本Scriptlet
      i.
        <%
          局部变量、java语句
        %>

      ii.
        <%!
          全局变量、定义方法
        %>

      iii.

        <%=输出表达式 %>

    例子程序:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
        hello index.jsp
        <%="我是大傻逼2" %>
            <%
                    String kk = "张三";
                    out.print(kk);
                    init();
            %>
        <%="我是大傻逼1" %>
        
            <%!
                public String name;
                public void init(){
                    name = "。。java 书。。";
                }
            %>
    
        iii.
    
            <%="我是大傻逼" %>
    </body>
    </html>

    jsp代码是从上往下依次执行。

    打开tomcat,从浏览器访问这段代码的输出如下:

    TIPS:

    •   <%="输出表达式" %> 等价于 out.print("输出表达式");
    •   注意前者,最后没有分号;后者最后有分号。
    •        一般而言,修改web.xml、配置文件、java 需要重启tomcat服务,但是如果修改 Jsphtmlcssjs ,不需要重启。
    •       out.println()不能回车; 要想回车得加“<br/>”,如out.println("name"+"<br/>"),又如 <%="he<br/>llo" %>,即out.print(表达式) 和<%= 表达式%> 可以直接解析 【表达式】中的html代码。

    1.2.指令


      page指令    <%@ page ....%>

      page指定的属性:

    • language:jsp     页面使用的脚本语言
    • import:       导入类
    • pageEncoding:     jsp文件自身编码 jsp ->java
    • contentType:     浏览器解析jsp的编码

    例子:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.Date" %>

    1.3.注释

    • html注释          <!-- --> ,可以被客户 通过浏览器查看源码 所观察到
    • java注释     // /*...*/
    • jsp注释           <%-- --%>

    1.4.JSP内置对象:

      (自带的,不需要new 也能使用的对象。总共有九个,这里介绍两个。)

    • out:    输出对象,向客户端输出内容
    • request:  请求对象;存储“客户端向服务端发送的请求信息”
    • request对象的常见方法:
    •       String getParameter(String name) :根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)
    •       String[] getParameterValues(String name): 根据请求的字段名key ,返回多个字段值value (checkbox)
    •       void setCharacterEncoding("编码格式utf-8") :设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
    •       getRequestDispatcher("b.jsp").forward(request,response) ; :请求转发 的方式跳转页面 A - > B
    •       ServletContext getServerContext():获取项目的ServletContext对象

    2.使用request对象实现注册示例:

    2.1、在MyJspProjet/WebContent下新建两个jsp文件:register.jsp 、show.jsp。

      小技巧:

        右键项目==》new==》other(也可以右键项目后直接ctrl+N,可以打开文件创建向导,可以通过搜索的办法创建想要的文件类型。

    register.jsp(注意编码格式,这里统一设置为utf-8):

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
        <form action="show.jsp" >
            用户名:<input type="text" name="uname"><br/>
            密码:<input type="password" name="upwd"><br/>
            年龄:<input type="text" name="uage"><br/>
            爱好:<br/>
            <input type="checkbox" name="uhobbies" value="足球">足球
            <input type="checkbox" name="uhobbies" value="篮球">篮球
            <input type="checkbox" name="uhobbies" value="乒乓球">乒乓球<br/>
            <input type="submit" name="注册">
        </form>
    </body>
    </html>

    show.jsp(注意编码格式,这里统一设置为utf-8):

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            request.setCharacterEncoding("utf-8");
            String name = request.getParameter("uname");
            int age = Integer.parseInt(request.getParameter("uage"));
            String pwd = request.getParameter("upwd");
            String [] hobbies = request.getParameterValues("uhobbies");
        %>
        获得的信息如下:
        爱好:<%=name %><br/>
        密码:<%=pwd %><br/>
        年龄:<%=age %><br/>
        <%
        for(String temp:hobbies){
            out.print(temp+"<br/>");
        }
        %>
    </body>
    </html>

    TIPS:

    <form action="show.jsp" >:默认为get方式,也可以显示设置为get/post:    <form action="show.jsp"  method="get/post">

     get与post请求方式的区别:

    • a. get方式 在地址栏显示 请求信息 (但是地址栏能够容纳的 信息有限,4-5KB;如果请求数据存在大文件,图片等 会出现地址栏无法容纳全部的数据而出错) ;post不会显示。
    • b. 文件上传操作,必须是post推荐使用post

    2.2、统一request请求的编码 :
    get方式请求 如果出现乱码,下面办法来解决:
      a.统一每一个变量的 编码 (不推荐)
        //new String( 旧编码,新编码);
        变量名= new String(变量名.getBytes("iso-8859-1"),"utf-8");

      b. 修改server.xml ,一次性的 更改tomcat默认get提交方式的编码 (utf-8),

    •     <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"  URIEncoding="utf-8"/>
    •     建议 使用tomcat时, 首先在server.xml中 统一get方式的编码.. URIEncoding="UTF-8"
    •     tomcat7 (默认iso-8859-1)
    •     tomcat8(默认utf-8)

     post方式:

      在show.jsp中,增加如下:request.setCharacterEncoding("utf-8");

  • 相关阅读:
    系统管理玩玩Windows Azure
    元素集合Bloom Filter
    软考之编译原理
    保存位图位图保存时上下颠倒?
    委托函数《重构》处理概括关系
    运营商网络物联网操作系统再思考Hello China操作系统的运营商网络协同机制
    文件文档文档的词频反向文档频率(TFIDF)计算
    sphinx全文索引开源
    [转载]c#委托事件简单例子
    [转载]在C#事件处理中灵活应用泛型
  • 原文地址:https://www.cnblogs.com/cq0143/p/10675316.html
Copyright © 2020-2023  润新知