• Servlet笔记


    1.什么是servlet?
    sun公司制定的一种用来扩展web服务器功能的组件规范。
    (1)扩展web服务器功能
    web服务器通常只能处理静态资源的请求(即事先先将html文件准备好),可以使用servlet来扩展(即web服务器可以通过调用servlet来处理动态资源的请求,比如访问数据库)。
    (2)组件规范
    1)什么是组件?
    符合一定规范,实现部分功能,并且需要部署到相应的容器里面才能运行的软件模块。servlet是一个组件,需要部署到相应的servlet容器里面才能运行。
    tomcat就是一个容器,提供了servlet的运行环境。
    2.如何写一个servlet?
    step1,写一个java类,实现servlet接口或者继承HttpServlet抽象类。
    注:通常选择继承的方式。
    step2,编译
    step3,打包
    创建一个具有如下结构的文件夹:
    appname(应用名)
    WEB-INF(固定不可变名)
    classes(放class文件)
    lib(可选,放jar文件)
    web.xml(部署描述文件)
    step4,部署
    将step3创建好的整个文件夹拷贝到servlet容器响应的位置。
    注:可以使用jar命令将step3创建好的整个文件夹压缩成一个".war"为后缀的文件,然后拷贝。
    step5,启动容器,访问servlet
    http://ip:port/appname/url-pattern
    http://localhost:8080/xxx/xxx
    注:url-pattern在web.xml文件中定义。
    3.Tomcat的安装(www.apche.org)
    4.servlet是如何运行的?
    比如,在浏览器地址栏输入:
    http://ip:port/web01/hello
    step1,浏览器根据ip,port建立连接
    step2,浏览器将相关数据(比如请求参数)打包,然后发送请求。
    step3,容器解析请求数据包,并且将解析得到的数据封装到request对象,同时创建一个response对象。
    step4,容器创建servlet对象,然后调用该对象的servlet方法。
    注:容器会将request和response作为参数传递进来,可以通过request获得请求参数,也可以将处理结果写到response。
    step5,容器读取response中的处理结果,然后将处理结果打包发送给浏览器。
    step6,浏览器解析响应数据包,生成相应的页面。
    5.常见问题
    (1)404
    注:404是一个状态码(是一个三位数字,由W3C定义,表示服务器处理请求的一种状态)。
    1)含义
    服务器根据你的请求地址找不到对应的资源。
    2)产生的原因
    a.没有部署该应用
    b.<servlet-name>不一致
    c.请求地址写错
    按照http://ip:port/appname/url-pattern
    检查请求地址。
    (2)500
    1)含义:系统出错
    2)产生的原因
    程序在运行过程当中出错。
    a.没有继承HTTPServlet
    b.<servlet-class>写错。
    (3)405
    含义:找不到处理方法

    HTTP协议:
    (1)什么是HTTP协议
    是由W3C制定的一种网络应用层协议,规定了如何通信以及相应的数据包的格式。
    1)如何通信
    step1,建立连接
    step2,发送请求
    step3,发送响应
    step4,关闭连接
    2)特点
    一次请求,一次连接
    即如果浏览器需要发送新的请求,就需要建立新的连接。这样设计,优点是,服务器可以利用有限的连接为尽可能多的请求服务。
    (2)数据包的结构
    1)请求数据包
    请求行(请求方式 请求资源路径 协议类型和版本)
    消息头
    是一些键值对(使用":"隔开),表示特定的含义,比如,浏览器可以发送"user-agent"消息头,告诉服务器,浏览器的类型和版本。
    实体内容
    只有当请求方式为post时,实体内容里面才会有数据(请求参数)。
    2)响应数据包
    状态行(协议类型和版本 状态码 状态描述)
    200 正确
    500 系统出错
    404 找不到对应资源
    消息头
    服务器也可以发送一些消息头给浏览器,比如,发送"content-type"消息头,告诉浏览器,服务器返回的数据类型。
    实体内容
    程序的处理结果,浏览器会解析其中的数据,
    生成相应的页面。
    (3)两种请求方式
    1)get请求
    a.哪一些情况下,浏览器会发送get请求
    直接输入某个地址;
    点击链接地址;
    表单默认提交的方式。
    b.特点
    会将请求参数添加到请求资源路径的后面,
    只能提交少量的数据。
    会将请求参数显示在浏览器地址栏,不安全。
    注:
    比如路由器就会记录包含了请求参数的请求地址。
    2)post请求
    a.哪一些情况下,浏览器会发送post请求
    设置表单method="post"
    b.特点
    会将请求参数添加到实体内容里面,可以提交
    大量的数据。
    不会将请求参数显示在浏览器地址栏,相对安全。
    注:
    不会将请求参数加密。


    servlet输出中文
    (1)为什么会有乱码?
    out.println方法在默认情况下,会使用“ISO-8859-1”来解码。
    来编码。
    (2)如何解决
    response.setContentType("text/html;charset=utf-8");


    表单包含有中文参数值
    (1)为什么会有乱码
    表单提交时,浏览器会对表单中的中文参数值进行编码。
    注:
    会按照打开该表单所在的页面时的字符集来编码。服务器端默认情况下,会使用“ISO-8859-1”来解码。
    (2)解决方式
    step1,保证表单提交时,按照指定的字符集来编码。
    HTML文件中添加:
    <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
    step2,服务器端使用对应的字符集来解码。
    方式一:
    request.setCharacterEncoding("utf-8");
    注:
    使用此方式必须以post的方式提交,只针对post请求有效。
    方式二: 
    先还原得到浏览器发送过来的字节数组,然后再使用正确地字符集来解码。
    uname = new String
    ((uname.getBytes("iso-8859-1")),"utf-8");
    注:
    get和post都适用。
    读取请求参数值
    (1)String request.getParameter(String paramName);
    注:
    a.paramName必须与实际发送过来的参数名一致,如果不一致,会获得null。
    b.有可能会得到空字符串。
    (2)String[] request.getParameterValues(String paramName);
    注:
    a.当有多个参数名相同时,使用该方法。
    b.对于多选框和单选框,如果不选择任何选项的话,会获得null。
    使用JDBC访问数据库
    step1,需要将JDBC驱动(jar文件)拷贝到WEB-INFlib下。
    step2,使用JDBC提供的一套API来访问数据库。

  • 相关阅读:
    C# NPOI 导入与导出Excel文档 兼容xlsx, xls(xf13中已经引用了xlsx的npoi)
    ASP.Net超时时间已到解决办法-
    解决SqlDataSource连接超时的问题
    SqlDataSource控件超时的困惑
    Redis+Keepalived
    Linux Ubuntu 16.04 安装步骤+远程环境
    JDK 安装
    Maven 安装
    CAT 默认密码修改
    CAT 监控搭建
  • 原文地址:https://www.cnblogs.com/crazypokerk/p/8986732.html
Copyright © 2020-2023  润新知