(四十五)、HTML and Servlet

HTML

HTML的概念

HTML(Hyper Text Markup Language 超文本标识语言 ) 是一种用来制作超文本文档的简单标记语言。

用HTML编写的超文本文档称为HTML文档。
HTML 文件是包含一些标签的文本文件。
这些标签告诉 WEB 浏览器如何显示页面。
HTML 文件必须使用 htm 或者 html 作为文件扩展名。

HTML文档结构

<html>
    <head>
        <title></title>
        <meta>
    </head>
    <body>.
                HTML 文件的正文
    </body> 
</html>

元素:是HTML语言的基本部分。元素总是成对出现,每一对元素一般都有一个开始的标记(如),也有一个结束的标记(如)。元素的标记要用一对尖括号括起来,并且结束的标记总是在开始的标记前加一个斜杠。

HTML表单

  •  HTML表单是HTML页面与浏览器端实现交互的重要手段。利用表单可以收集客户端提交的有关信息。
  •  在HTML里,我们可以定义表单,并且使表单与服务器端的表单处理程序配合。
  •  表单是网页上的一个特定区域。这个区域是由一对元素定义的。

表单中的元素

</form><form></form>元素:
1)  action:用来定义表单处理程序(一个ASP、CGI等程序)的位置(相对地址或绝对地址)。
2)  Method:定义表单结果从浏览器传送到服务器的方法,一般有两种方法:get、post。
3)  id:给定元素名称以便将来通过Javascript访问。 
   表单的基本语法:
        <form action="url" method=”#” type=text/plain>
... 
 <input type=submit>
 <input type=reset>
</form> 
    #=GET或POST  注意:GET有数据量限制,POST无以上限制,以文件形式传输

   Form表单中的元素:
1)  文本框:<input name=?  type=*  value=**  size=*** maxlength=??>
 name 文本框的名字type输入框的类型,常见的有:text,password,hidden…,value 默认值,在页面上指该输入框里的值。Size输入框显示的宽度。maxlength允许输入的最大字符长度

2)  文本域:<textarea name=? rows=** cols=**> ...</textarea>可以输入多行文本

3)  按钮:包括普通按钮、重置按钮和提交按钮<input type="submit" value="提交" name=“B1">   <input type="reset" value="重置" name=“B2">

4)  复选框(Checkbox) 在一个表单里的所有多选框可以有一个或多个被选中。<input type=checkbox > <input type=checkbox checked><input type=checkbox value=**>

5)  图象域: <input type=image src=url>

6)  单选框(RadioButton):一个表单里的所有变量名相同的单选框只能够有一个被选中。<input type=radio name=sex value=**><input type=radio name=sex value=** checked>各个选项的name必须一样才能达到预期效果

7)  下拉列表: 
<select name=*>
<option selected>说明1</option>
    <option value=**>说明2 </option>
</select>
列表框的长度
<select size=**>
允许多选
<select size=** multiple = “true”>

Http协议

    超文本传送协议 (HTTP-Hypertext transfer protocol) 定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。重点学习这两个格式。

请求协议

请求协议的格式:
*  请求行 例:GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif文件。

  •  请求头 例:Accept-Language: en(很多请求头)

  •  空行 必须的,服务通过这个空行来区别出请求头和请求体

  •  请求体 有时候也叫消息体,是可选的,get请求时无请求体,post请求会有。

浏览器向服务器发送请求时必须依据该格式,否则服务器无法识别。http协议中的请求行中可以有8种请求方法,但是目前为止,通用和大家都在用的只有两种:post请求和get请求。

响应协议

  • 响应格式

    响应协议的格式:
    响应行;
    响应头信息;
    空行;
    响应体。

  • 响应说明

    HTTP/1.1 200 OK 响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释;
    Server: Apache-Coyote/1.1服务器的版本信息;
    Content-Type: text/html;charset=utf-8响应体使用的编码为UTF-8;
    Content-Length: 757 响应体长度 单位字节
    Date: Mon, 17 Nov 2014 13:20:47 GMT 响应时间

  • 常见响应码

    • 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
    • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
    • 500:请求资源找到了,但服务器内部出现了错误;
    • 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
    • 304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html内容,以及最后响应时间缓存下来。当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间,If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个,您看看现在的index.html最后修改时间是不是这个,如果还是,那么您就不用再响应这个index.html内容了,我会把缓存的内容直接显示出来。而服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对,如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修改,服务器会响应200。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>注册</title>
    </head>
    <body>
        <h1>请填写信息</h1>
        <form action="/java_day21/MyServlet" method="post">
            用户名:<input name="name"> <br/>
            密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="pwd"> <br/><input type="radio" checked="checked" name="sex" value="man"><input type="radio" name="sex" value="woman"><br/>
            爱好<br/>
            看书<input type="checkbox" checked="checked" value="book"/>看电影<input type="checkbox" value="movie"/>
            听音乐<input type="checkbox" value="music"/>玩游戏<input type="checkbox" value="game"/><br/>
            国籍<br/>
            <select name="country">
                <option value="1">中国</option>
                <option value="2">美国</option>
                <option value="3">日本</option>
                <option value="4">韩国</option>
            </select><br/>
            <textarea rows="5" cols="50"></textarea><br/>
            <input type="submit" value="注册"><input type="reset" value="重新填写">

        </form>
    </body>
</html>

Servlet

用于接收请求(客户端,浏览器),做出响应的,服务器端的java类

  • doGet(request,response):接收get方式提交的请求

  • doPost(request,response):接收post方式提交的请求

  • 获取请求参数的值:request.getParameter(“username”);

  • 做出响应:

    PrintWriter pw = response.getWriter();
    pw.println(“xxxxx”);//返回给请求者
    pe.close();

  • 乱码解决:

    get/post方式提交的表单里中文可以用[万能的] new String(str.getBytes(“ISO-8859-1”),”utf-8”)进行转码

MyServlet.java

/**
 * Servlet implementation class MyServlet
 */
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MyServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet...");
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        name = parse(name);
        pwd = parse(pwd);
        System.out.println(name + ":" + pwd);
        // 解决响应乱码(get,post通用)
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println(name + "注册成功");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // 解决post乱码
        request.setCharacterEncoding("utf-8");
        doGet(request, response);
    }

    // 解决请求乱码
    private String parse(String s) throws UnsupportedEncodingException {
        return new String(s.getBytes("iso-8859-1"), "utf-8");// 解决post和get乱码
    }
}

sqlite

SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准。
sql 结构化查询语言。

SQLite在使用前不需要安装设置,不需要进程来启动、停止或配置,而其他大多数SQL数据库引 擎是作为一个单独的服务器进程,被程序使用某种内部进程通信(典型的是TCP/IP),完成发送请求到服务器和接收查询结果的工作,SQLite不采用这 种工作方式。使用SQLite时,访问数据库的程序直接从磁盘上的数据库文件读写,没有中间的服务器进程。

SQLite的主要应用场景有作为手机应用的数据库以及小型桌面软件的数据库。Android系统内置sqlite数据库

安装sqlite数据库

sqlite的官方下载地址为http://www.sqlite.org/download.html,上面提供了多种版本的sqlite,我选择下载名称为sqlite-shell-win32-x86-3080803.zip 的版本。下载后就直接解压到磁盘上,可以看到解压后只有sqlite3.exe这个文件。
用这个工具,来生产 数据库文件(.db), 数据文件中都是表格,记录
接下来需要将sqlite加入到path环境变量中(加入环境变量是为了更加方便地使用sqlite),右键我的电脑-属性-高级系统设置-环境变量,在系统变量中找到Path,将解压的文件夹目录加入到后面(注意是文件夹目录)。

常见操作

命令行进入到要创建db文件的文件夹位置
使用命令创建数据库文件: sqlite3 数据库文件名 //如果有就打开,如果没有就会在将来创建
使用命令查看已附加的数据库文件: .databases

常用语句

1、使用数据库:sqlite3 db_name sqlite的 操作
2、创建表: create table table_name(filed1Name filed1Property,filed2Name filed2Property);
3、显示数据库中的表:.table
4、显示表结构:.schema table_name
或者select * from sqlite_master where type=”table” and name=”emperors”;
5、删除表: drop table table_name
6、Alter table 表名 add column 字段 数据类型;
7、退出:.exit
8、插入记录:insert into table_name values(‘key’,’value’);
9、查找记录:select * from table_name;
10、分页查找:从第3条记录开始查询10条记录:select * from table_name limit 3,10;
一些常见的聚合函数:
总数:select count(*) from table1;
求和:select sum(field1) from table1;
平均:select avg(field1) from table1;
最大:select max(field1) from table1;
最小:select min(field1) from table1;

排序:select 字段 from table1 order by 字段(desc或asc) ;(降序或升序)
分组:select 字段 from table1 group by 字段,字段… ;
限制输出:select 字段 from table1 limit x offset y;
= select 字段 from table1 limit y , x;

11、删除记录:delete from table_name where field1=value;
12、更新操作:update table_name set name=’rainkey’ where id=1;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值