使用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服务,但是如果修改 Jsp\html\css\js ,不需要重启。
  •       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");

posted @ 2019-04-09 10:23  奇婆子  阅读(615)  评论(0编辑  收藏  举报