回顾:
http::
超文本传输协议
请求和响应
servlet:
运行在服务器端的一个java小程序,本质就是一个类
接受请求,处理逻辑,生成动态内容
编写步骤:
1.编写一个类
继承HttpServlet
重写doGet或者doPost方法
2.编写路径
<servlet>
<serlvet-name>
<serlvet-class> <servlet-mapping>
<serlvet-name>
<url-pattern>
3.测试
http://主机:端口号/项目名/路径
servlet的体系结构:
Servlet--->GenericServlet-->HttpServlet
HttpServlet:
实现了service方法,强转了两个参数,调用了重载的service方法
重载的service方法中,获取请求的方式,根据请求方式的不同调用相应的doXxx方法
doGet():处理get请求的逻辑
doPostt():处理post请求的逻辑 (只有表单提交的时候把method设置成post的时候)
servlet的生命周期:
init(ServletConfig config):
service(ServletRequest request,ServletResponse response):
destroy():
/////////////////////
url-pattern的配置:
完全匹配 /a/b
目录匹配 /a/b/*
后缀名匹配 *.jsp
优先级:完全匹配 >目录匹配 >后缀名匹配
一个路径对应一个servlet
一个servlet可以对应多个路径
//////////////////////
load-on-startup:修改servlet的初始化时机
////////////////////////
当我们的项目处理不了请求的时候,服务器里面defaultservlet来处理.
//////////////////////////
路径的写法:
相对路径
绝对路径:(常用)
带主机和协议的路径(访问站外资源)
不带主机和协议的路径(最常用的)
/项目名/资源路径
////////////////////////////
servletConfig:(了解)
servlet的配置对象
作用:
获取servlet的名称
获取servlet初始化参数
★获取全局管理者
servletContext:
上下文(全局管理者)
作用:
1.获取全局的初始化参数
2.共享资源
3.获取资源
4.获取文件的mime类型
获取:
在servlet中直接调用 getServletContext()
常用方法:
String getInitParameter(String key):根据key获取指定的初始化参数
<context-param>
<param-name>
<param-value> String getRealPath(String 文件路径):获取的指定文在在tomcat上的绝对路径
文件路径从项目的根目录往后写
InputStream getREsourceAsStream(String 文件路径):以流的形式返回一个文件 String getMimeType(文件名):格式 大类型/小类型 /////////////////////////////////////
域对象:
创建:在服务器启动的时候,服务器会为每一个项目创建一个全局管理者,servletcontext就是当前项目的引用
销毁:在项目被移除或者服务器关闭的时候销毁
常用的方法:
xxxAttribute()
setAttribute(String key,Object value)
Object getAttribute(String key)
removeAttribute(String key)
//////////////////////////////////////////
通过类加载器获取文件的路径(处于classes目录下的文件)
类.class.getClassLoader().getReource("文件路径").getPath()
类.class.getClassLoader().getReourceAsStream("文件路径")
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
要求:会使用request和response
案例1-文件下载案例
技术分析:
response
文件下载
//////////////////////
response:响应
作用:
往浏览器写东西
组成部分:
响应行 响应头 响应体
操作响应行
格式:
协议/版本 状态码 状态码说明
状态码:
1xx:已发送请求
2xx:已完成响应
200:正常响应
3xx:还需浏览器进一步操作
302:重定向 配合响应头:location
304:读缓存
4xx:用户操作错误
404:用户操作错误.
405:访问的方法不存在
5xx:服务器错误
500:内部异常
常用方法:
setStatus(int 状态码):针对于 1 2 3
了解 :
sendError(int 状态码):针对于 4xx和5xx
操作响应头
格式:key/value(value可以是多个值)
常用的方法:
setHeader(String key,String value):设置字符串形式的响应头
了解:setIntHeader(String key,int value):设值整形的响应头
了解:setDateHeader(String key,long value):设值时间的响应头 addHeader(String key,String value):添加置字符串形式的响应头 之前设置过则追加,若没有设置过则设置
了解:addIntHeader(String key,int value):添加整形的响应头
了解:addDateHeader(String key,long value):添加时间的响应头
常用的响应头:
location:重定向
refresh:定时刷新
content-type:设置文件的mime类型,设置响应流的编码及告诉浏览器用什么编码打开
content-disposition:文件下载 重定向:
方式1:
★response.sendRedirect("/day10/loc2");
方式2:
response.setStatus(302);
respooen.setHeader("location","/day10/loc2"); 定时刷新:
方案1:设置头 refresh 昨天做过
respooen.setHeader("refresh","秒数;url=跳转的路径");
方案2:http的meta标签
<meta http-equiv="refresh" content="3;url=/day10/refresh2.html"> /////////////////////
操作响应体:
页面上要展示的内容
常用方法:
Writer getWriter():字符流
ServletOutputStream getOutputStream() :字节流 自己写的东西用字符流,其他一概用字节流. 处理响应中文乱码:
方式1:★
response.setContentType("text/html;charset=utf-8");
方式2:理解
response.setHeader("content-type", "text/html;charset=utf-8"); 注意:
两个流互斥
当响应完成之后,服务器会判断一下流是否已经关闭,若没有关闭,服务器会帮我们关闭.(底层使用的缓冲流)
//////////////////////////////
文件下载:
下载方式:
1.超链接下载
<a href="/day10/download/day10.txt">下载 day10.txt</a>
若浏览器能解析该资源的mime类型,则打开;若不能接下则下载;
2.编码下载 通过servlet完成
<a href="/day10/download?name=day10.txt">下载 day10.txt</a>
a.设置文件的mime类型
String mimeType=context.getMimeType(文件名)
response.setContentType(mimeType); b.设置下载头信息 content-disposition
response.setHeader("content-disposition", "attachment;filename="+文件名称); c.提供流
response.getOutputStream(); 扩展:使用commons-io工具类
对拷流:
IOUtils.copy(is,os);
/////////////////////////////
扩展:
通过response生成验证码
验证码:
作用:防止暴力攻击
点击换一张的js代码:
function changeImg(obj){
//操作src属性
obj.src="/day10/code?i="+Math.random();
//alert(1)
}
//////////////////////////////////////////////
案例2-完成用户注册操作
需求:
在一个表单页面上填写用户数据,点击提交,将所有的数据提交的服务器上,通过java代码最终保存到数据库中.
技术分析:
表单
request
////////////////////////////////
request:请求
作用:获取浏览器发送过来的数据
组成部分:
请求行 请求头 请求体
操作请求行
格式:
请求方式 请求资源 协议/版本
常用方法:HttpServletRequest
掌握
String getMethod():获取请求方式
String getRemoteAddr():获取ip地址
String getContextPath() :在java中获取项目名称 (/day10) 了解:
getRequestURI():获取的是 从项目名到参数之前的内容 /day10/regist
getRequestURL():获取的带协议的完整路径 http://localhost/day10/regist
String getQueryString():get请求的所有参数 username=tom&password=123
String getProtocol():获取协议和版本 例如:请求行
GET /day10/row?username=tom&password=123 HTTP/1.1
//////////////////
操作请求头
格式:key/value(value可以是多个值)
常用方法:
★String getHeader(String key):通过key获取指定的value (一个) 了解:
Enumeration getHeaders(String name) :通过key获取指定的value(多个)
Enumeration getHeaderNames() :获取所有的请求头的名称
int getIntHeader(String key):获取整型的请求头
long getDateHeader(String key):获取时间的请求头
重要的请求头:
user-agent:浏览器内核 msie firefox chrome
referer:页面从那里来 防盗链 ///////////////////
操作请求参数 ★
username=tom&password=123&hobby=drink&hobby=sleep
常用方法:
String getParameter(String key):获取一个值
String[] getParameterValues(String key):通过一个key获取多个值
Map<String,String[]> getParameterMap():获取所有的参数名称和值 username:tom
---------values---------
hobby:[drink, sleep]
=====map=======
username::[tom]
password::[123]
hobby::[drink, sleep]
//////////////////////
请求的中文乱码:
对于get请求:参数追加到地址栏,会使用utf-8编码,服务器(tomcat7)接受到请求之后,使用iso-8859-1解码,所以会出现乱码
对于post请求,参数是放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码 通用的方法:
new String(参数.getBytes("iso-8859-1"),"utf-8");
针对于post请求来说:只需要将请求流的编码设置成utf-8即可
request.setCharacterEncoding("utf-8");
/////////////////////////////////////////////////////////////
域对象:
request:
创建:一次请求来的时候
销毁:响应生成的时候
作用:
一次请求里面的数据
请求转发(请求链,请求串)
request.getRequestDispatcher("内部路径").forward(request,response);
///////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////// 案例2-步骤分析:
1.数据库和表(day09)
2.页面(表单)
给每个字段添加name属性
还需修改表单提交的路径 method=post
3.表单提交到一个servlet(RegistServlet)
4.RegistServlet:
操作:
接受数据,封装成一个user
调用UserSerivce完成保存操作 int regist(User user)
判断结果是否符合我们预期
若int=1; 插入成功
若int!=1; 插入失败
相应的提示信息在当前的servlet不做处理,将信息转发给另一个servlet展示(MsgServlet);
5.UserService
调用dao
6.userdao 通过dbutils在数据库中插入一条记录.
//////////////////
封装对象:
apache提供的一个工具类
BeanUtils
封装数据
使用步骤:
1.导入jar包
2.调用 BeanUtils.populate(Object bean,Map<> 参数); /////////////////////////////////////////////
/////////////////////////////////////////////
请求转发和重定向区别:
重定向发送两次请求,请求转发一次请求 重定向地址栏发生该表,请求转发不变 重定向是从浏览器发送,请求转发是服务器内部 重定向不存在request域对象,请求转发可以使用request域对象 重定向是response的方法,请求转发是request的方法 重定向可以请求站外资源,请求转发不可以 /////////////////////////////////////////////
/////////////////////////////////////////////
扩展:
URLEncoder.encode(s, "utf-8"); 指定编码
URLDecoder.decode(s8, "iso8859-1");指定解码
文件下载扩展:
中文名称的文件名下载的时候名称会出现问题
常见的浏览器需要提供文件名称的utf-8编码
对于火狐来说需要提供文件名称的base64编码
方案1:使用工具类
方案2:网上的方式(8成好使)
new String(filename.getByte("gbk"),"iso8859-1"); ///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////// 上午回顾:
response:
操作响应行
状态码
常用方法:
setStatus(int code) 针对的1xx 2xx 3xx
操作响应头:
setHeader(String key,String value):设置
addHeader(String key,String value):添加 常用的响应头:
location:重定向:
response.sendRedirect("跳转路径");
refresh:定时刷新
response.setHeader("refresh","秒数;url=路径");//java
meta标签//html代码
content-type:设置文件的mimeType,及设置响应流的编码并且通知浏览器用什么编码打开
response.setContentType("text/html;charset=utf-8");
content-disposition:设置文件下载
response.setHeader("content-disposition","attachment;filename="+文件名称);
操作响应体
getWriter():
getOutputStream():
注意:俩流互斥,服务器帮我们关闭此流
响应的中文乱码:
response.setContentType("text/html;charset=utf-8");
////////////////////////////////
文件下载:
1.超链接下载
2.编码下载(两个头一个流)
设置文件的mimetype
设置下载头信息
对拷流
扩展:
文件名称中文问题:
方法1:
firefox :base64
其他:utf-8
方法2:(八九成可以使用)
new String(filename.getBytes("gbk"),"iso8859-1");
////////////////////////////////
request:请求 获取浏览器发送过来的数据
操作请求行
getMethod():请求方式
getContextPath():获取项目名称
getRemoteAddr():获取请求的ip地址 操作请求头
String getHeader(String key)
常见的头信息:
user-agent:获取浏览器内核
referer:页面从那里跳转过来的
操作请求参数
String getParameter(String key):
String[] getParameterValues(String key):
Map<String ,String[]> getParameterMap(); 请求的中文乱码:
对于get请求:参数追加到地址栏,会使用utf-8编码,服务器(tomcat7)接受到请求之后,使用iso-8859-1解码,所以会出现乱码
对于post请求,参数是放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码 通用的方法:
new String(参数.getBytes("iso-8859-1"),"utf-8");
针对于post请求来说:只需要将请求流的编码设置成utf-8即可
request.setCharacterEncoding("utf-8");
域对象:request
请求转发:
request.getRequestDispatcher("内部路径").forward(request,response);
request生命周期:
一次请求
////////////////
扩展:封装数据:
apache的BeanUtils
1.导入两个jar包
2.调用 BeanUtils.populate(Object bean,map);

day10-(rr)的更多相关文章

  1. [原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?

    Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...

  2. TCP协议学习记录 (三) Ping程序 RR选项 记录路由hop

    一开始想直接在上个程序改,自己构造IP包头,但后来发现不行,微软不让干了,所以后来选用libcap库来收发包 代码写的很乱.. #pragma pack(4) #define ECHO_REQUEST ...

  3. MySQL 中隔离级别 RC 与 RR 的区别

    1. 数据库事务ACID特性 数据库事务的4个特性: 原子性(Atomic): 事务中的多个操作,不可分割,要么都成功,要么都失败: All or Nothing. 一致性(Consistency): ...

  4. linux进程调度之 FIFO 和 RR 调度策略

    转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html    linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18 ...

  5. python_way day10 python和其他语言的作用域 、 python2.7多继承和3.5多继承的区别 、 socket 和 socketserver源码(支持并发处理socket,多进程,多线程)

    python_way day10 1.python的作用域和其他语言的作用域 2.python2.7多继承和3.5多继承的区别 3.socket和socketserver源码(并发处理socket) ...

  6. Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期

    Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期 昨天主要介绍了SparkStreaming中对于Receiver的生命周期管理,下面让我们进入到Re ...

  7. DB2 SQL RR/RS/CS/UR四个级别《转载》

    1.RR隔离级别:在此隔离级别下, DB2会锁住所有相关的纪录.在一个SQL语句执行期间,所有执行此语句扫描过的纪录都会被加上相应的锁.具体的锁的类型还是由操作的类型来决定,如果是读取,则加共享锁:如 ...

  8. SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录

    14.5.2.4 Locking Reads 锁定读: 如果你查询数据然后插入或者修改相关数据在相同的事务里, 常规的SELECT 语句不能给予足够的保护. 其他事务可以修改或者删除你刚查询相同的记录 ...

  9. RR区间锁 不是唯一索引,即使区间内没值,也锁

    +--------- +---------------------------------------------------------------------------------------- ...

  10. RR模式下利用区间锁防止幻读,RC模式没有区间锁会出现幻读

    Session 1: mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> select * from ...

随机推荐

  1. 学习 Spring (十六) AOP API

    Spring入门篇 学习笔记 Spring AOP API 是 Spring 1.2 历史用法,现在仍然支持 这是 Spring AOP 基础,现在的用法也是基于历史的,只是更简便了 Pointcut ...

  2. 5.cgroup资源控制

    控制组( CGroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离.限制.审计等. 只有将分配到容器的资源进行控制,才能避免多个容器同时运行时对宿主机系统的资源竞争.每个控制组是一组 ...

  3. MailUtils类:用于发送激活邮件

    该类用于发送激活邮件 package com.itheima.utils; import java.util.Properties; import javax.mail.Authenticator; ...

  4. django---一对多和多对多字段的操作训练

    建表准备: django项目models.py建表 from django.db import models class Myclass(models.Model): cname = models.C ...

  5. windows 动态库的封装以及调用

    1.一个程序从源文件编译生成可执行文件的步骤:预编译 -->  编译 -->  汇编 --> 链接(1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开.处 ...

  6. C#常忘语法笔记(C#程序设计基础1-4章)

    1.1 const:声明一个常量 1.2强转: double->int eg1: int i=(int)3.0; eg2: double d=3.0; int i=(int)d+1; strin ...

  7. 趣味网站5个,小鸡词典/中国配色/名著地图/海洋之音/LOGO设计

    一.小鸡词典 很多流行的词语还没有收录到各大词典,却可以在小鸡词典搜索到,小鸡词典是最全的网络流行词语词典. 不少词条搞笑无厘头,撰写词条还会获得红包. 访问地址:https://jikipedia. ...

  8. X问题 HDU - 1573(excrt入门题)

    X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. Fiddler中显示IP方法

    如何在fiddler查看到请求的IP地址?就像下面这样 打开fiddler, 快捷键Ctrl+R  或者  菜单->Rules->Customize Rules…,然后在CustomRul ...

  10. 脚本监控web服务器,工作不正常发邮件提醒

    背景介绍公司有多个web网站,没有配置监控服务,每天都需要定时检查服务器是否工作正常.低效耗时. 代码片段 #!/bin/bash # Author Jerry.huang (Email:Jerry. ...