servlet和jsp学习(二)

2017/07/18 Servlet Jsp

Posted by WangXiaoDong on July 18, 2017

时间:2017年7月18日 天气:晴


Author:冬之晓:angry:
Email: 347916416@qq.com

1,http是什么(超文本传输协议)?

hypertext transfer protocol 由w3c制订的一种网络应用层协议,它规定了浏览器与web服务器之间如何通信以及通信 所使用的数据格式。

(1)如何通信

  • step1,建立连接
  • step2,浏览器将请求数据打包,发送
  • step3,web服务器将响应数据打包,发送
  • step4,web服务器关闭连接

  • 特点:一次请求,一次连接。
  • 优点:web服务器可以利用有限的连接资源为尽可能多的客户端服务。
  • 缺点:无状态。

(2)数据格式

  • 1)请求数据包 - a,请求行:请求方式 请求资源路径 协议类型和版本 - b,若干消息头:请求数据的描述—- 一般是由w3c定义的一些健值对,浏览器与web服务器之间可以通过发送这些消息头来传递一些特定的信息。 比如,浏览器可以发送”user-agent”消息头,告诉web服务器浏览器的类型和版本。 - c,实体内容:具体的业务数据—- 只有当发送post请求时,才会有数据(请求参数)。
  • 2)响应数据包 - a,状态行: 协议类型和版本 状态码 状态描述 注: 状态码是一个三位数字,由w3c定义,表示web服务器处理请求的一种状态。 - 200: 正确 - 500: 系统错误 - 404: 依据请求地址找不到对应的资源 - b,若干消息头:响应数据的描述—- 服务器也可以发送一些消息头给浏览器, 比如,”content-type”消息头,告诉浏览器服务器返回的数据类型。 - c,实体内容:具体的返还数据 程序处理的结果

(3)对开发者的要求

  • 1)不用开发者处理的地方 - 浏览器自动打包请求数据 - 浏览器自动发送请求数据 - 服务器自动打包响应数据 - 服务器自动发送响应数据
  • 2)需要开发者处理的地方 - 提供具体的请求中的业务数据 - 提供具体的响应中的返还数据 - 通过ruquest处理请求数据,通过response处理响应数据 > 开发者会使用request和response就行了

2.两种请求方式

(1)get方式

  • 1)哪一些情况下,会发送get请求
    • a,直接输入某个地址
    • b,点击链接
    • c,表单默认提交方式
  • 2)get请求的特点
    • a,会将请求参数添加到请求资源路径的后面,只能提交少量的数据(因为请求行最多只能存放大约2k左右的数据)
    • b,会将请求参数显示在浏览器地址栏,不安全,比如,路由器会记录请求地址。
  • 3)所有请求默认都是get请求

(2)post方式

  • 1)采用实体内容传参
  • 2)操作方式:在form上面加上属性method=”post”。
  • 2)post请求的特点
    • a,会将请求参数添加到实体内容里面,可以提交大量的数据。
    • b,不会将请求参数显示在浏览器地址栏,相对安全(要注意,不管是什么请求,都不会对请求数据加密,一般使用https协议)。

3.servlet中文乱码问题

(1)传入服务器的内容由乱码

为什么会有乱码?—-当表单提交时,浏览器会检查请求参数值,如果是中文,会按照打开该表单所在的页面时的字符集来编码(比如,按照”utf-8”来编码)。 服务器默认情况下,会使用”iso-8859-1”来解码。

解决方案:

  • setp1: 保证浏览器使用指定的字符集来打开页面。 (注意setp1和下面的step2没有内在联系,setp1是默认都这样做)
  • setp2: 服务器端使用对应的字符集去解码。
    • 1)在接收到内容后先反解码,再解码,比如浏览器是utf-8编码形式,我们按照ISO8859-1解码了,就需要以下代码
        byte[] bs = userName.getBytes("ISO8859-1");//按照ISO8859-1反解码
        userName = new String(bs,"utf-8");//按照utf-8编码
      
    • 2)在Tomcat的配置文件server.xml里面的标签内加入属性URIEncoding="utf-8"
      • 优点:简单
      • 缺点,只对get访问有效(因为get是路径编码形式,post就不是啦)
    • 3)在接收参数前加req.setCharacterEncoding("utf-8");//声明实体内容的编码为utf-8
      • 优点:简单
      • 缺点:只对post访问有效 ** 总结:setp2里面的2)和3)结合使用! **

(2)客户端接收的网页有乱码

为什么会有乱码?—-因为out.println输出中文时,默认会使用”ISO8859-1”去编码。

解决方案:

  • response.setCharacterEncoding(“utf-8”);//让服务器使用utf-8编码
  • response.setContentType(“text/html;charset=utf-8”);//浏览器使用utf-8解码 注:上面两句话写一句即可,另一个会默认相同!一般选择写第二个!!

4.常见的错误及处理方式

(1)404

  • 1)错误原因:
    • a,应用没有部署。
    • b,请求地址写错。 按照http://ip:port/appname/url-pattern
    • c,不一致。

      (2)500

  • 1)错误原因 - a,程序运行时出错。 - b,写错。

    (3)405

  • 1)错误原因 服务器找不到处理方法。

5.如何获得请求参数值?

(1)String request.getParameter(String paramName);

注意:

  • a,paramName必须与实际传递的参数名一致,否则会获得null。
  • b,有可能获得空字符串。

(2)String[] request.getParameterValues(String paramName);

对于多选框和单选框,如果不选择任何选项,会获得null值。

6.servlet如何使用jdbc来访问数据库

  • step1,将jdbc驱动拷贝到WEB-INF\lib下。 注: 服务器一般都提供了自己的类加载器(比如tomcat 就提供了自己的类加载器),这些类加载器会从 WEB-INF\lib下查找字节码文件。
  • step2,在servlet类里面,使用jdbc 提供的 方法来访问数据库,要注意异常的处理。

7.mysql数据库的简单使用

  • (1)登录mysql mysql -uroot; root用户登录mysql数据库管理系统
  • (2)查看当前有哪些数据库 show databases;
  • (3)创建一个新的数据库(同时设置字符集为utf-8) create database jsd1407 default character set utf8;
  • (4)使用指定的数据库 use jsd1407;
  • (5)查看当前数据库有哪些表 show tables;
  • (6)建表
      create table emp(
          id int primary key auto_increment,
          name varchar(50),
          salary double,
          age int
      );	
      insert into emp(name,salary,age) 
      values('Sally',20000,32);
    

    auto_increment: 自增长列,当插入记录时, 数据库自动为该列赋一个自动增长的值。