ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java学习周笔记(第七周)

2021-04-18 13:29:12  阅读:131  来源: 互联网

标签:java 第七 color 标签 笔记 type 请求 Servlet 属性


java学习周笔记

html

概念:Hyper Text Markup Language(超文本标记语言)

  • 超文本:页面内可以包含图片、连接,甚至音乐、程序等非文字元素
  • 标记:标签,不同的标签实现不同的功能
  • 语言:人与计算机的交互工具

书写规范

  • HTML标签是以尖括号包围的关键字
  • HTML标签通常是成对出现的,有开始就有结束
  • HTML通常都有书写,格式:书写=‘属性值’(多个属性之间用空格隔开)
  • HTML标签不区分大小写,建议全小写

HTML基本标签

结构标签

<html>:根标签       
    <head>:网页头标签
   		<title></title>:页面的标题      
    </head>      
    <body></body>:网页正文
</html>
属性名代码描述
text< body text="#f00"></ body>设置网页正文中所有文字的颜色
bgcolor< body bgcolor="#00f"></ body>设置网页的背景色
background< body background=“1.png”></ body>设置网页的背景图

颜色的表示方式:

  • 第一种方式:用表示颜色的英文单词,例,red green blue
  • 第二种方式:用16进制表示颜色,例,#000000 #ffffff #325687 #377405

排版标签

  • 可用于实现简单的页面布局
  • 注释标签:
  • 换行标签:< br>
  • 段落标签:< p>文本文字</ p>
    • 特点:段与段之间有空行
    • 属性:align对齐方式(left、center、right)
  • 水平线标签:< hr/>
    • 属性:
      • ​ width:水平线的长度(两种:第一种:像素表示;第二种,百分比表示)
      • ​ size: 水平线的粗细 (像素表示,例如:10px)
      • ​ color:水平线的颜色
      • ​ align:水平线的对齐方式

块标签
使用CSS+DIV是现下流行的一种布局方式

标签代码描述
div< div></ div>行级块标签,独占一行,换行
span< span></ span>行内块标签,所有内容都在同一行

基本文字标签
font标签处理网页中文字的显示方式

属性名代码描述
size< font size=“7”></ font>用于设置字体的大小,最小1号,最大7号
color< font color="#f00"></ font>用于设置字体的颜色
face< font face=“宋体”></ font>用于设置字体的样式

文本格式化标签

标签代码描述
b< b></ b>粗体标签
strong< strong></ strong>加粗
em< em></ em>强调字体
i< i></ i>斜体
small< small></ small>小号字体
big< big></ big>大号字体
sub< sub></ sub>上标标签
sup< sup></ sup>下标标签
del< del></ del>删除线

标题标签

标签代码描述
h1< h1></ h1>1号标题,最大字号
h2< h2></ h2>2号标题
h3< h3></ h3>3号标题
h4< h4></ h4>4号标题
h5< h5></ h5>5号标题
h6< h6></ h6>6号标题,最小字号

列表标签
无序列表:使用一组无序的符号定义, < ul>< /ul>

<ul type="circle">
    <li></li>
</ul>
属性值描述用法举例
circle空心圆< ul type=“circle”>< /ul>
disc实心圆< ul type=“disc”>< /ul>
square黑色方块< ul type=“square”>< /ul>

有序列表:使用一组有序的符号定义, < ol>< /ol>

<ol type="a" start="1">
    <li></li>
</ol>
属性值描述用法举例
1数字类型< ul type=“1”>< /ul>
A大写字母类型< ul type=“A” >< /ul>
a小写字母类型< ul type=“a”>< /ul>
I大写古罗马< ul type=“I”>< /ul>
i小写古罗马< ul type=“i”>< /ul>

列表嵌套:无序列表与有序列表相互嵌套使用

代码举例:
	<ol>
		<li></li>
        <li></li>
        <li>
        	<ul>
                <li></li>
            </ul>
        </li>
	</ol>

图形标签
在页面指定位置处中引入一幅图片, < img />

属性名描述
src引入图片的地址
width图片的宽度
height图片的高度
border图片的边框
align与图片对齐显示方式
alt提示信息
hspace在图片左右设定空白
vspace在图片的上下设定空白

链接标签

  • 在页面中使用链接标签跳转到另一页面

    • 标签: < a href="">< /a>

    • 属性:href:跳转页面的地址(跳转到外网需要添加协议)

  • 设置跳转页面时的页面打开方式,target属性

    • _blank在新窗口中打开
    • _self在原空口中打开
  • 指向同一页面中指定位置
    • 定义位置: < a name=“名称”>< /a>
    • 指向: < a href="#名称">< /a>

表格标签

<table>
	<tr>
		<td></td>
	</tr>
</table>

表格的列标签(th):内容有加粗和居中效果

<table>
	<tr>
		<th></th>
	</tr>
</table>

表格的列合并属性(colspan):在同一行内同时合并多个列

<table>
	<tr>
		<td colspan=""></td>
	</tr>
</table>

表格的行合并属性(rowspan):在同一列跨多行合并

<table>
	<tr rowspan="">
		<td></td>
	</tr>
</table>

HTML表单标签

html表单用于收集不同类型的用户输入数据
form元素常用属性

  • action表示动作,值为服务器的地址,把表单的数据提交到该地址上处理
  • method:请求方式:get 和post
    • get:
      • 地址栏,请求参数都在地址后拼接 path?name=“张三”&password=“123456”
      • 不安全
      • 效率高
      • get请求大小有限制,不同浏览器有不同,但是大约是2KB;一般情况用于查询数据
    • post:
      • 地址栏:请求参数单独处理。
      • 安全可靠些
      • 效率低
      • post请求大小理论上无限;一般用于插入删除修改等操作
  • enctype:表示是表单提交的类型
    • 默认值:application/x-www-form-urlencoded 普通表单
    • multipart/form-data 多部分表单(一般用于文件上传)​

input元素
作为表单中的重要元素,可根据不同type值呈现为不同状态

属性值描述代码
text单行文体框< input type=“text”/>
password密码框< input type=“password”/>
radio单选按钮< input type=“radio”/>
checkbox复选框< input type=“checkbox”/>
date日期框< input type=“date”/>
time时间框< input type=“time”/>
datetime日期和时间框< input type=“datetime”/>
email电子邮件输入< input type=“email”/>
number数值输入< input type=“number”/>
file文件上传< input type=“file”/>
hidden隐藏域< input type=“hidden”/>
range取值范围< input type=“range”/>
color取色按钮< input type=“color”/>
submit表单提交按钮< input type=“submit”/>
button普通按钮< input type=“button”/>
reset重置按钮< input type=“reset”/>
image图片提交按钮< input type=“image”/>

select 元素(下拉列表)

  • 单选下拉列表:< select>< /select>
  • 默认选中属性:selected=“selected”
<select>
    <option selected="selected">内容</option>
    ...
    <option></option>
</select>
  • 多选下拉列表属性: < select></ select>
  • 多选列表:multiple=“multiple”
<select multiple="multiple">
    <option></option>
</select>

textarea元素(文本域)
多行文本框: < textarea cols=“列” rows=“行”>< /textarea>

html框架标签

  • 通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面。每份HTML文档称为一个框架,并且每个框架都独立于其他的框架。
  • 使用框架的缺点:
    • 开发人员必须同时跟踪更多的HTML文档
    • 很难打印整张页面

框架结构标签frameset

  • 框架结构标签( < frameset>< /frameset>)用于定义如何将窗口分割为框架
  • 每个 frameset 定义了一系列行或列
  • rows/columns 的值规定了每行或每列占据屏幕的面积
    • <frameset rows="">< /frameset>
    • <frameset cols="">< /frameset>

框架标签frame
每个frame引入一个html页面

<frameset cols="*,*">
    <frame src="info1.html" />
    <frame src="info2.html" />
</frameset>

注意事项

  • 不能将 < body>< /body> 标签与 < frameset>< /frameset> 标签同时使用
  • 假如一个框架有可见边框,用户可以拖动边框来改变它的大小。为了避免这种情况发生,可以在< frame>标签中加入:noresize=“noresize”。

其他标签

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<!--该网页的描述-->
<meta http-equiv="description" content="this is my page">
 <!--该网页的编码-->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!-- href:引入css文件的地址-->
<link rel="stylesheet" type="text/css" href="./styles.css">
<!--src:js的文件地址-->
<script type="text/javascript" src=""></script>

css

  • CSS :全称:Cascading Style Sheets 层叠样式表,定义如何显示HTML元素
  • 多个样式可以层层覆盖叠加,如果不同的css样式对同一html标签进行修饰,样式有冲突的
    应用优先级高的,不冲突的共同作用

语法:选择器{属性:值;属性:值…}

CSS导入方式

  • 内嵌方式(内联方式)
    把CSS样式嵌入到html标签当中,类似属性的用法
 <div style="color:blue;font-size:50px">This is my HTML page. </div>
  • 内部方式
    在head标签中使用style标签引入css
<style type=“text/css”> //告诉浏览器使用css解析器去解析
	div{color:red;font-size:50px}
</style>
  • 外部方式
    将css样式抽成一个单独文件,使用者直接引用
创建单独文件 div.css
内容示例:div{color:green;font-size:50px}
引用语句写在head标签内部
	<link rel="stylesheet" type="text/css" href=“div.css"></link>
    rel:代表当前页面与href所指定文档的关系
    type:文件类型,告诉浏览器使用css解析器去解析
    href:css文件地址
  • @import方式
    在页面中引入一个独立的单独文件
  <style type="text/css">
       @import url("div.css")
  </style>
 该内容放在head标签中

link和@import方式的区别:

  • link所有浏览器都支持,@import某些版本低的IE不支持
  • @import是等待html加载完成才加载
  • @import不支持js动态修改

CSS选择器

  • 基本选择器

    • 元素选择器:在head中使用style标签引入在其中声明元素选择器:html标签{属性:属性值}
<style type="text/css">
    span{color: red;font-size: 100px}
</style>  
  • id选择器: 给需要修改样式的html元素添加id属性标识,在head中使用style标签引入在其中声明id选择器: #id值{属性:属性值}
创建id选择器:
	<div id="s1">hello,everyone!</div>
	<div id="s2">hello,everyone!</div>
    <div id="s3">hello,everyone!</div>
根据id选择器进行html文件修饰 
    <style type="text/css">
		#s1{color: red;font-size: 100px}
		#s2{color: green;font-size: 100px}
		#s3{color: blue;font-size: 100px}
    </style>
  • class选择器:给需要修改样式的html元素添加class属性标识,在head中使用style标签引入在其中声明class选择器: .class名{属性:属性值}
创建class选择器:
    <div class="s1">hello,everyone!</div>
    <div class="s2">hello,everyone!</div>
    <div class="s3">hello,everyone!</div>
根据id选择器进行html文件修饰:
    <style type="text/css">
        .s1{color: purple;font-size: 100px}
        .s2{color: pink;font-size: 100px}
        .s3{color: yellow;font-size: 100px}
    </style>
  • 属性选择器
    - 根据元素的属性及属性值来选择元素。在head中使用style标签引入在其中声明
    - 格式为:
    - htm标签[属性=‘属性值’]{css属性:css属性值;}
    - html标签[属性]{css属性:css属性值;}
body内容:
	<form name="login" action="#" method="get">
        <font size="3">用户名:</font>
        <input type="text" name="username" value="zhangsan"><br>
		<font size="3">密码:</font>
        <input type="password" name="password" value="123456"><br/>
        <input type="submit" value="登录">
	</form>
head中书写:
    <style type="text/css">
        input[type='text'] {
            background-color: pink;
        }
        input[type='password'] {
            background-color: yellow;
        }
        font[size] {
            color: green
        }
        a[href] {
            color: blue;
        }
	</style>
  • 伪元素选择器
    - 主要是针对a标签
    - 语法:
    - 静止状态 a:link{css属性}
    - 悬浮状态 a:hover{css属性}
    - 触发状态 a:active{css属性}
    - 完成状态 a:visited{css属性}
代码:
	<a href="https://hao.360.cn/">点我吧</a>
样式:
    <style type="text/css">
        <!--静止状态 -->
        a:link {color: red;}
        <!--悬浮状态 -->’
        a:hover {color: green;}
        <!--触发状态 -->
        a:active {color: yellow;}
        <!--完成状态 -->
        a:visited {color: blue;}
    </style>
  • 层级选择器
    父级选择器 子级选择器….,具体示例如下:
 <div id="div1">
     <div class="div11">
         <span>span1-1</span>
     </div>
     <div class="div12">
         <span>span1-2</span>
     </div>
</div>
<div class="div2">
    <div id="div22">
        <span>span2-1</span>
    </div>
    <div id="div23">
        <span>span2-2</span>
    </div>
</div>
<style type="text/css">
    #div1 .div11{color:red;}
    #div1 .div12{color:purple;}
    .div2 #div22{color:green;}
    .div2 #div23{color:blue;}
</style>

CSS属性

文字属性

属性名取值描述
font-size数值设置字体大小
font-family默体、宋体、楷体等设置字体样式
font-stylenormal正常; italic斜体;设置斜体样式
font-weight100~900数值;bold;bolder;粗体样式

文本属性

属性名取值描述
color十六进制;表示颜色的英文单词;设置文本颜色
text-indent5px缩进5像素;20%缩进父容器宽度的百分之二十;缩进元素中文本的首行
text-decorationnone;underline;overline;blink;文本的装饰线
text-alignleft;right;center文本水平对齐方式
word-spacingnormal;固定值;单词之间的间隔
line-heightnormal;固定值;设置文本的行高
text-shadow四个取值依次是: 水平偏移;垂直偏移;模糊值;阴影颜色;设置阴影及模糊效果

背景属性

属性名取值描述
background-color16进制;用于表示颜色的英语单词;设置背景色
background-imageurl(‘图片路径’)设置背景图片
background-repeatrepeat-y;repeat-x;repeat;no-repeat;设置背景图的平铺方向
background-positiontop;bottom;left;right ; center;改变图像在背景中的位置

列表属性

属性名取值描述
list-style-typedisc等改变列表的标识类型
list-style-imageurl(“图片地址”)用图像表示标识
list-style-positioninside;outside标识出现在列表项内容之外还是内部

尺寸属性

  • width:设置元素的宽度
  • height:设置元素的高度
    显示属性
    显示属性display ,以下是常用取值:
  • none:不显示
  • block:块级显示
  • inline:行级显示
    轮廓属性
    绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。常用属性:
    | 属性名 | 取值 | 描述 |
    | :-----------: | :-------------------------------------: | :------------: |
    | outline-style | solid(实线)/dotted(虚线)/dashed(虚线)等 | 设置轮廓的样式 |
    | outline-color | 16进制;用于表示颜色的英文 | 设置轮廓的颜色 |
    | outline-width | 数值 | 设置轮廓的宽度 |
    浮动属性float
  • 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。
取值描述
left在左侧不允许浮动元素。
right在右侧不允许浮动元素。
both在左右两侧均不允许浮动元素。
none默认值。允许浮动元素出现在两侧。
inherit规定应该从父元素继承 clear 属性的值。

定位属性
相对定位(relative):元素框偏移某个距离,元素仍保持其未定位前的形状,它原本所占的空间仍保留。

<head>
	<style type="text/css">
		h2.pos_left {
			position: relative;
			left: -20px
		}
        h2.pos_right {
			position: relative;
			left: 20px
		}
	</style>
</head>
<body>
    <h2>这是位于正常位置的标题</h2>
	<h2 class="pos_left">这个标题相对于其正常位置向左移动</h2>
	<h2 class="pos_right">这个标题相对于其正常位置向右移动</h2>
	<p>相对定位会按照元素的原始位置对该元素进行移动。</p>
	<p>样式 "left:-20px" 从元素的原始左侧位置减去 20 像素。</p>
	<p>样式 "left:20px" 向元素的原始左侧位置增加 20 像素。</p>
</body>

绝对定位(absolute):元素框从文档流完全删除,并相对于其包含块进行定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框。

<html>
    <head>
		<meta charset="utf-8" />
		<style type="text/css">
			h2.pos_abs {
				position: absolute;
				left: 100px;
				top: 150px
			}
		</style>
	</head>
	<body>
		<h2 class="pos_abs">这是带有绝对定位的标题</h2>
		<p>通过绝对定位,元素可以放置到页面上的任何位置。下面的标题距离页面左侧 100px,距离页面顶部 150px。</p>
	</body>
</html>

固定定位(fixed):元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			#left {
				width: 200px;
				height: 200px;
				background-color: red;
				position: fixed;
				left: 0px;
				bottom: 0px;
			}
			
			#right {
				width: 200px;
				height: 200px;
				background-color: green;
				position: fixed;
				right: 0px;
				bottom: 0px;
			}
			#middle{
				width: 200px;
				height: 200px;
				background-color: blue;
				position: fixed;
				left: 0px;
				bottom: 50%;
			}
			
		</style>
	</head>
	<body>
		<div id="left">左下</div>
		<div id="right">右下</div>
		<div id="middle">中间</div>
	</body>
</html>

CSS盒子模型

盒子模型
边框相关属性

属性名取值描述
border-stylesolid;double;dashed;dotted等设置边框的样式
border-color16进制;用于表示颜色的英文;设置边框的颜色
border-width数值设置边框的粗

外边距相关属性
margin:外间距,边框和边框外层的元素的距离

属性名取值描述
margintop;right;bottom;left四个方向的距离
margin-top数值上间距
margin-bottom数值下间距
margin-left数值左间距
margin-right数值右间距

内边距相关属性
padding:内间距,元素内容和边框之间的距离((top right bottom left))

属性名取值描述
paddingtop;right;bottom;left四个方向的距离
padding-top数值上间距
padding-bottom数值下间距
padding-left数值左间距
padding-right数值右间距

CSS3扩展属性

border-radius创建圆角
box-shadow:用于向方框添加阴影
background-size: 属性规定背景图片的尺寸
background-image:为指定元素使用多个背景图像
text-shadow: 可向文本应用阴影。

servlet

概念:

  • Servlet:Server Applet的简称,是服务器端的程序(代码、功能实现),可交互式的处理客户端发送到服务端的请求,并完成操作响应
  • 动态网页技术
  • javaWeb程序开发的基础,javaEE规范(一套接口)的一个组成部分

作用

  • 接收客户端请求,完成操作
  • 动态生成网页
  • 将包含操作结果的动态网页响应给客户端

HTTP协议

概念:超文本传输协议(HTTP)是互联网上应用最为广泛的一种网络协议,是一个基于请求与响应模式的、无状态的、应用层的协议,运行于TCP协议基础之上

  1. 在网络中传递信息都是以二进制形式存在的
  2. 接收方【浏览器/服务器】在接收信息后,会将二进制文件进行编译,编译成【文字、图片、视频、命令】等
  3. 传递信息数据量往往比较大,导致接收方很难在一组连续二进制数据中得到对应的数据
  4. 而网络协议包是一组有规律的二进制数据,这组数据中存在一个固定空间,每一个空间专门存放特定的信息。这样接收方在接收网络协议包之后就可以到固定空间得到对应信息,大大降低了接收方对接收到的二进制的数据的编译难度
    【0000(IP地址) 0000(端口号) 0000(资源文件名) 0000】

特点:

  • 支持客户端(浏览器)/服务器模式
  • 简单快速:客户端只向服务器发送请求方法和路径,服务器即可响应数据,因而通信速度很快。请求方法常用的有GET、POST等
  • 灵活:HTTP允许传输任意类型的数据,传输的数据类型由Content-Type标识
  • 无连接:无连接指的是每次TCP连接只处理一个或多个请求,服务器处理完客户的请求后,即可断开连接。采用这种方式可以节省传输时间。
    • Http1.0办事是一个请求响应之后,就直接断开了。称为短连接
    • Http1.1版本不是响应后就直接断开了,而是等待几秒钟,这几秒钟之内有新的请求,那么还是通过之前的连接通道来接收消息,如果过了这几秒钟用户没有发送新的请求,就会断开连接。称为长连接
  • 无状态:Http协议是无状态协议,对事物处理没有记忆功能,但会返回事物处理的状态(404,500等)

常用的网络协议包

  • FTP网络协议包
  • Http网络协议包
    在基于B/S结构下互联网通信过程中,所有在网络中传递的信息都是保存在http网络协议包中

Http协议通信流程

  • 客户端与服务器建立间接(三次握手)
  • 客户端向服务器发送请求
  • 服务器接收请求,并根据请求返回相应文件作为应答
  • 客户端与服务器关闭连接(四次挥手)

请求报文和响应报文

请求报文
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,http请求信息由4部分组成

  1. 请求行:请求地址url、请求方式method(get/post)、uri(统一资源标识符)协议/版本
  2. 请求头:请求参数信息,填充条件为请求方式为get
  3. 空白行:没有任何作用,用于隔离请求头和请求体
  4. 请求体:请求参数信息,填充条件为请求方式为post

请求报文

Http响应报文
与请求报文相似

  1. 状态行:Http状态码
  2. 响应头:content-type:指定浏览器采用对应编译器,对响应体二进制数据进行解析(通俗的来说就是告诉浏览器要怎么去解析文件,比如图片的话就进行图片解析,文本文件就进行文本解析,如果是文本文件的话,还需要设置编码格式。)
  3. 空白行:没有任何内容,起到隔离作用
  4. 响应体:可能是被访问的静态资源文件内容、 可能是被访问的静态资源文件命令、 可能是动态资源文件的运行结果

响应报文

Servlet详解

Servlet核心接口和类

在Servlet体系机构中,除了实现Servlet接口,还可以通过继承GenericServlet(只需重写Service方法)或HttpServlet(需重写doget()、dopost()方法)类,完成编写

Servlet接口

在ServletAPI中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类
改接口包括一下五个方法:

  • Init(ServletConfig config):仅仅在创建Servlet时才调用,用于初始化
  • ServletConfig getServletConfig():返回一个ServletConfig对象,其中包含此servlet的初始化和启动参数
  • service(ServletRequest req,ServletResponse res):这个方式是在Servlet生命周期中被多次调用的唯一方法,同时也是执行实际任务的只要方法。用于处理客户端的请求。每当服务器接口到对servlet的请求时,服务器将产生一个新线程并调用服务。service()方法检查http请求类型(get、post、put、delete等),并根据需要调用方法
  • String getServletInfo():返回有关servlet的信息,如作者,版本和版权
  • destroy():在servlet生命周期结束时,该方法由Servlet容器调用,只会调用一次

GenericServlet抽象类

GenericServlet 是编写Servlet变得更容易。它提供生命周期方法init和destroy的简单实现,要编写一般的servlet,只需重写抽象service方法即可

HttpServlet类

HttpServlet是继承GennericServlet的基础上进一步的扩展。提供将要被子类化以创建适用于Web站点的HTTP servlet的抽象类。HttpServlet的子类至少必须重写一个方法,该方法通常是一下这些方法之一:

  • doget
  • dopost
  • doput
  • dodelete

Servlet两种创建方式

1.实现接口Servlet

/**
 * Servlet创建的第一种方式:实现接口Servlet
 * */
public class HelloServlet2 implements Servlet{

	@Override
	public void destroy() {
	}

	@Override
	public ServletConfig getServletConfig() {
		return null;
	}

	@Override
	public String getServletInfo() {
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
	}
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		System.out.println("OK");
		response.getWriter().println("welcome use servlet");
	}
}

2.继承HttpServlet

/**
 * Servlet implementation class HelloServlet
 * Servlet的第二种创建方式,继承HttpServlet.也是开发中推荐的
 * 
 */
public class HelloServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.getWriter().print("welcome use servlet");
	}
    
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

Servlet两种配置方式

1.使用web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>Web_Day11</display-name>
  <!--Servlet配置  -->
  <servlet>
  <!--名称  -->
    <servlet-name>hello2</servlet-name>
    <!--Servlet的全称类名  -->
    <servlet-class>com.qf.web.servlet.HelloServlet</servlet-class>
    <!--启动的优先级,数字越小越先起作用  -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!--映射配置  -->
  <servlet-mapping>
  <!--名称  -->
    <servlet-name>hello2</servlet-name>
    <!--资源的匹配规则:精确匹配  -->
    <url-pattern>/hello2</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>login.html</welcome-file>
  </welcome-file-list>
</web-app>

配置属性

url-pattern定义匹配规则,取值说明:
精确匹配     /具体的名称		只有url路径是具体的名称的时候才会触发Servlet
后缀匹配     *.xxx		   只要是以xxx结尾的就匹配触发Servlet
通配符匹配   /* 			   匹配所有请求,包含服务器的所有资源
通配符匹配   /             匹配所有请求,包含服务器的所有资源,不包括.jsp

load-on-startup 
1元素标记容器是否应该在web应用程序启动的时候就加载这个servlet。
2它的值必须是一个整数,表示servlet被加载的先后顺序。
3如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
4如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。

2.使用注解(Servlet3.0后支持)

/**
 * Servlet implementation class HelloServlet
 * 演示Servlet注解式配置
 */
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.getWriter().print("OK");
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

@WebServlet注解常用属性

  • name:Servlet名字
  • value:配置url路径,可以配置多个
  • urlPatterns:配置url路径,和value作用一样,不能同时使用
  • loadOnStartup:配置Servlet的创建时机,如果是0或者正数,启动程序时创建,如果是负数,则访问时创建。数字越小优先级越高

Servlet应用

在Servlet中用来处理客户端请求需要用doGet或doPost方法的request对象

get提交方法特点

  • 提交的参数数量(大小)最大为4kb,超过大小会截断
  • 会在浏览器地址栏上将请求参数信息展示出来
  • 会将请求参数信息保存在http请求协议包中
  • 接受到服务器返回的资源文件内容后,会将资源文件内容保存在浏览器的缓冲中

浏览器以GET方式发送的请求内容在到达http服务器后,会由服务器进行解码,此时如果http服务器是Tomcat的话,会默认使用utf-8来解码,所以在参数有中文的情况下不会乱码

浏览器以POST方式发送的请求内容在到达http服务器后,会由请求对象(request)来进行解码,默认使用【iso-8859-1】来解码,所以在参数有中文的情况会乱码。需要设置编码类型为utf-8(setCharacterEncoding(utf-8))

post方法特点

  • post方法是吧提交的数据放在Http包的body中(请求体)
  • 密文传递数据,数据量大,安全
  • 效率没有get高
  • 对应的Servlet的方法是dopost

request主要方法

方法名说明
String getParameter(String name)根据表单组件名称获取提交数据
void setCharacterEncoding(String charset)指定每个请求的编码
setCharacterEncoding(charset)进行编码设置

response主要方法

方法名称作用
setHeader(name,value)设置响应信息头
setContentType(String)设置响应文件类型、响应式的编码格式
setCharacterEncoding(String)设置服务端响应内容编码格式
getWriter()获取字符输出流

转发和重定向

转发:作用在服务端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理
语法:request.getRequsetDispatcher(“目标url-pattern”).forward(request,response)
使用forward跳转时,是在服务器内部跳转,地址栏不发生变化,属于同一次请求

数据传递
request作用域:拥有存储数据的空间,作用范围是一次请求有效(一次请求可以经过多次转发)
可以将数据存入request后,在一次请求过程中的任何位置进行获取
可以传递任何类型的数据
存数据:request.setAttribute(key,value)
取数据:request.getAttribute(key,value)

转发特点

  • 转发是服务器行为
  • 浏览器只做了一次请求
  • 转发浏览器地址不变
  • 转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递
  • 转发只能将请求转发给同一个Web应用中的组件

重定向:重定向作用在客户端,客户端将请求发送给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送请求
语法:response.sendRedirect(“目标uri”)

sendRedirect跳转时,地址栏改变,代表客户端重新发送的请求。属于两次请求

  • response没有作用域,两次request请求中的数据无法共享
  • 传递数据:通过uri的拼接信息数据传递(“uri/?username=tom”);
  • 获取数据:request.getParameter(“username”);

重定向特点

  • 重定向是客户端行为
  • 重定向是浏览器做了至少两次的访问请求
  • 重定向浏览器地址改变
  • 重定向两次跳转之间传输的信息会丢失
  • 充定向可以指向任何的资源,包括当前应用程序中的其他资源、同一个站点上的其他应用程序中的资源、其他站点的资源

当两个Servlet需要传递数据时,选择forward转发。不建议使用sendRedirect进行传递

Servlet生命周期

  1. 实例化
    当用户第一次访问Servlet时,由容器调用Servlet的构造器创建具体的Servlet对象。也可以在容器启动之后like穿件实例。使用如下代码可以设置Servlet是否在服务器启动时就创建
  2. 初始化
    在初始化阶段,init()方法会被调用。这个方法在javax.servlet.Servlet接口中定义。其中,方法以一个ServletConfig类型的对象作为参数
  3. 服务
    当客户端有一个请求时,容器就会将请求ServletRequest与响应ServletResponse对象转给Servlet,以参数的形式传给service方法
  4. 销毁
    当Servlet容器停止或者重启启动都会引起销毁Servlet对象并调用destroy方法

Servlet特性

Servlet在访问之后,会执行实例化操作,创建一个Servlet对象。而我们Tomcat容器可以同时多个线程并发访问同一个Servlet,如果在方法中对成员变量做修改操作,就会有线程安全的问题

如何保证线程安全

  • synchronized:将存在线程安全问题的代码放到同步代码块中(拖慢运行速度)
  • 实现SingleThreadModel接口:servlet实现SingleThreadModel接口后,每个线程都会创建servlet实例,这样每个客户端请求就不存在共享资源的问题,但是servlet响应客户端请求的效率太低,所以已经淘汰。
  • 尽可能使用局部变量

状态管理

现有问题

  • HTTP协议是无状态的,不能保存每次提交的信息
  • 如果用户发来一个新的请求,服务器无法知道它是否与上次的请求有联系
  • 对于那些需要多次提交数据才能完成的Web操作,比如登录来说,就成问题了

概念:将浏览器与web服务器之间多次交互当做一个整体来处理,并且将多次交互所涉及的数据(状态)保存下来
状态管理分类

  • 客户端状态管理技术:将状态保存在客户端。代表性的是Cookie技术
  • 服务器状态管理技术:将状态保存在服务器。代表性的数session技术(服务器传递sessionID时需要使用Cookie的方式)

标签:java,第七,color,标签,笔记,type,请求,Servlet,属性
来源: https://blog.csdn.net/weixin_39705529/article/details/115619438

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有