浏览器的网址: URL URl
第一部分Host部分负责找到对应的服务器
第二部分 WEB应用名
第三部分 Servlet的网址
第四部分 参数(GET模式)
http://localhost/WEB/Login?key1=value....
整个网址的长度不能超过255个字节
1 Java Web 工作原理
tcp协议的升级 http协议是一种超文本传输协议 应用层 请求/相应 Request/Response是一种无状态的协议 与上次相应没有关系
web服务器只能向客户端提供静态网页内容 没有互动
增加一个辅助应用
公共网关接口 CGI技术 高并发 严重消耗服务器资源极大地限制了一个服务器可以支持的并发CGI用户数量
微软的ASP和ASP.NET技术
基于Java的Servlet/JSP技术 多线程技术 与Web容器 servlet的业务逻辑
Web容器给处于容器中的应用程序提供一个环境 实现J2EE规范中Web规范
应用服务器 实现J2EE所有规范
servlet容器
Tomcat
Jboss RedHat
WebLogic
webShere IBM
Oracle9i As
Web容器负责管理和运行Servlet
配置文件
静态文件和JSP
类文件和包
开放状态 就绪状态
2 Servlet 基础
第一部分 host部分负责找到相应的服务器
第二部分 工程部分
第三部分 servlet部分 3使用Servlet 处理HTTP 响应
servlet生命周期 默认参数配置下 当你第一次通过网址访问时创建一个实例,调用它的构造方法。调用一次init()初始化方法,然后调用get()post()方法,下次访问就去调用线程里面的实例,如果servlet长时间没有人调用,它就销毁,调用一次destory()方法;或者关闭服务器时,调用一次destory()方法,销毁servlet。
容器装载并实例化Servlet 默认第一次通过网址访问Servlet 可以通过参数改写
容器触发 init()方法装载资源 只会调用一次
请求到达触发Service方法,处理请求产生响应
容器丢弃Servlet调用destory()方法
初始化参数有2种
写在servlet标签,init-param标签,对当前这个的 servlet有效
用ServletConfig对象的getInitParamer()
全局初始化参数:写在 webapp标签,context-param标签,对所有的 servlet有效
用ServletContext对象的getInitParamer()
自定义Servlet类:继承自HttpServlet
ServletConfig:在Servlet里面调用getServletConfig()得到
ServletContext:通过ServletConfig对象调用getServletContext()得到
HttpServletRequest:从doGet或者doPost方法的参数中传入
HttpServletResponse: 从doGet或者doPost方法的参数中传入
getRealPath("/")把项目的虚拟路径 映射为绝对路径将相对路径转换为绝对路径
如果浏览器发送是GET请求,那么会激活对应的Servlet的doGet方法
如果浏览器发送是POST请求,那么会激活对应的Servlet的doPost方法
1,在浏览器的地址栏里面输入网址,并且回车,发送GET请求
2,点击超链接,发送 GET请求
3,网页上写了一个form,里面有提交按钮,这个时候,看form的 method属性,method写了get属性,发出就是GET请求; method写了post属性,发出就是POST请求;
4,通过网址知道你调用哪一个 servlet,调用service()方法发出请求 发出回应
4 使用 Servlet 处理HTTP请求
一,Servlet响应
1,正常返回内容,客户端可以收到并显示
文本/超文本:
respnose.setContentType("text/html");
response.getWriter();//得到文本流,并且用文本流输出
二进制内容:()
respnose.setContentType("image/jpg");//这是图片,其他视频
response.getOutputStream();//得到二进制流
1设置参数 格式
2,返回错误信息,客户端显示错误信息
response.sendError()
HTTP状态码
300-399:表示用于已经移走的资源文件,指示新的地址
400-499:表示由客户端引发的错误
500-599:表示由服务器引发的错误。
3,重定向
302错误
response.sendRedirect();//浏览器会发起两次请求,地址栏会显示重定向的地址
4,定时刷新
response.setHeader("Refresh","time(秒); URL=网址");
网址如果是当前页面的网址,那么这是定时刷新
如果不是,相当于 延时重定向
二,Servlet请求
客户端的请求
request——HttpServletRequest
request是客户端发送的参数的代表对象,可以通过对request的操作获取客户端发送的信息
1,获取所有的客户端传过来的参数
request.getParameter(参数名); 记得做数据类型转换
//指的是Form里面那些控件的name属性
request.getMethod();//判断是get或者post方法
request.getRequestURI();//得到客户端请求的网址
2,这些参数是网页的from里面的控件提交出来的。
传输字符串的有:text
password //传输密码
textarea
键盘输入的内容
传输value里面的值:radio select/option submit button hidden
传输字符串数组:checkbox request.getParameterValues(参数名);
3.汉字乱码问题
前提条件 :Web项目的编码默认是GBK
Servlet里面写:response.setCharacterEncoding("GBK");输出的标签里面,在head里面增加meta标签,属性是 charset=’GBK’
JSP解决汉字乱码
4.如何把jar包放到WEB项目中
通过我的电脑找到jar包,把它拖Web项目的WebRoot/Web/WEB-INF/lib目录中。
5.起吗的三层的Java开发模式
视图层 | Register.html Register(Servlet) xxx.jsp | <form>.....</form> JSP的脚本和表达式 注册界面,注册成功后的提示 收集数据提交 显示处理结果 |
控制层 | Register(Servlet) | 业务流程控制 doPost() |
持久层 | StaffDAO BaseDAO | 与数据库打交道 负责维护: |
数据库 | SQLServer | 数据的持久保存 |
5 Web 应用程序状态管理
Session和Cookie
1,Session是会话。
某一个浏览器第一次访问网站的动态器,就创建一个Session在服务器上。Session超时 ,默认30分钟。每一个Session都有一个sessionID,服务器会通过response把 sessionID交给浏览器。之后浏览器访问服务器的内容时,都会在request里面带上这个sessionID
2,什么时候session会失效呢?
三种情况:关闭浏览器;session超时;代码控制强制失效;服务器关闭。
3,session 可以用来携带数据
setAttribute
public void setAttribute(java.lang.String name,
java.lang.Object value)
用指定的名字将一个对象绑定到一个会话。
removeAttribute
public void removeAttribute(java.lang.String name)
从会话中删除绑定到指定名字的对象。
getCreationTime
public long getCreationTime()
返回会话建立的时间,在格林威治时间1970年1月1日子夜开始计算,单位是milliseconds。
返回值:
返回一个长整数,以描述会话建立的时间,在格林威治时间1970年1月1日子夜开始计算,单位是毫秒。
getAttribute
public java.lang.Object getAttribute(java.lang.String name)
返回在本会话中绑定了指定名字的对象,当没有所要求的对象时,返回一个空值。
参数
name - 一个指定对象名字的字符串。
返回值:
返回带有指定名字的对象。
setAttribute("名字", 对象);
invalidate
public void invalidate()
指明一个会话并将所有绑定其上的对象解绑。
4,Cookie本意是“小饼干”文本文件,存在硬盘上面。这是由浏览器控制,里面保存的内容以“键-值对”的形式保留。还有一个指标叫有效时间。
5,它是由一个 servlet发送给 Web浏览器的一定数量的信息,它由浏览器保存,并在之后重新发送给服务器。一个cookie的值能唯一的标示一个客户机,因此cookie通常用于会话管理。
6,写人cookie
new 一个cookie对象
Cookie ck = new Cookie("键","值");
ck.setMaxAge();
response.addCookie(ck);
读入Cookie这么做?
resquest.getCookies()得到一个cookie数组
7,request重定向
//输入重定向 会产生程序控制的转移
/*
* 是服务器私下授权 没有告诉浏览器
* 通过这种方式 是一个动作的连续请求
* 返回一个作为位于给定路径的资源资源的封装器的 RequestDispatcher 对象。
* RequestDispatcher 对象可以被用于向一个资源转发请求
* ,或者,用于在一个响应中包含该资源。该资源可以是动态的也可以是静态的。
*/
6 对象作用域与Servlet 事件监听器
对象作用域
可以保存数据,且数据被一个或多个请求共享的对象
servlet上下文监听器 ServletContext 整个Web应用程序
servlet会话监听器 HttpSession 一次会话交互过程
servlet请求监听器 ServletRequest 一次请求过程
生命周期不一样
ServletContext事件
HttpSession事件
ServletRequest事件
8个监听器
7 过滤器
过滤器:本质还是一个类,拦截客户端发来的请求
对类有什么要求?
实现Java.servlet.Filter接口,并且重写里面所有的方法。init(),destroy(),doFilter()
init 有一个参数FilterConfig可以用来读取初始化参数。getInitParameter
doFilter有3个参数,分别是request,response.下一个Filter
注意
request和response要做强制数据类型转换
过滤器不拦截,放过:filterChain.doFilter(request, response);
要想写好的过滤器发挥作用,应该这么做?在web.xml里面,增加filter和filter-mapping标签
filter标签里面,给出filter-name和filter-class两个子标签,分别是filter的名字和对应的类代码
filter-mapping标签里面,给出的filter-name和(url-pattern或者servlet-name二选一)两个子标签。url-pattern标签表示想要拦截的请求,可以用通配符。servlet-name标签,表示想要拦截的servlet。
8 JSP 基础
JSP本质还是一个Servlet Java服务器页面 服务器活动页最新版本2.4
对象关系映射 ORM
1 JSP翻译成Servlet类。work 里面。
每次修改JSP都将开启一个新的Servlet
2编译
3加载
4创建实例
5调用jspInit()
6服务阶段,调用service()方法
7完成任务JSP任务,调用jspDestory()方法,销毁装载的资源
JSP页面由哪些成分组成
脚本元素、动作、指令、注释。
a JSP新增注释
<%-- --%>
b HTML注释
<!-- --!>
c Java本身的注释 单行注释// 多行注释/**/ 文档注释/** */
脚本
a Scriplet <%%> 翻译后成为Servler中的jspService()方法中
b 表达式 <%= %>里面不要放分号
脚本表达式的值将送给HTTP响应流
c 声明 <! >定义一些变量和方法
指令 <%@ %> 关键字 page include taglib 属性
a pagelanguage="java" pageEncoding="GBK" 代码编码 import="" 相当于Java的import语句
b includefile=""相对路径 以当前文件所在位置为准
c taglib 引用一个标签库 prefix="前缀" uri="标签库定义标准"
动作
a 动作<jsp:XXX XXX="XXX"> 20个
include<jsp:include page=""> 运行阶段
forward<jsp:forward page=""></jsp:forward> =request.getRequestDispatch("").forward(request,response);
JSP 9大隐式对象
1 request HttpServletRequest
2 response HttpServletResponse
3 out PrintWriter response.getWriter();
4 session HttpSession
5 page this
6pageContext removeAttribute pageContextsetAttribute("",Object,pageContext.常量)
7 config ServletConfig
8 application ServletContext
9 exception 用来处理错误页面
getRealPath
public java.lang.String getRealPath(java.lang.String path)
返回包含给定的虚拟路径的真实路径的字符串。
例如,虚拟路径"/index.html"有一个在服务器的文件系统中无论什么文件都会被一个对"/index.html"的请求服务的真实路径。
参数
path - 一个指定虚拟路径的字符串。
返回值:
一个指定真实路径字符串,如果转换不能完成,就会返回一个空值。
Statement
execute 增加insert 删除delete 改update 查 select 返回值是boolean对象
executeQuery 查询select 返回ResultSet
executeUpdate 增删改,返回int,受影响的行数
excuteBatch 一次执行多条语句,每一个结果都保留下来
9 Java Web 开发模式
JSP内置对象不能用在声明中 表达式中可以用
请求转发 forward
应用名+网址 URI
URI是URL 的一部分 只有第二部分和第三部分
服务器的响应信息 HTTP请求
状态行 | 响应头 | 空白行 | 消息体 |
请求行 | 请求头 | 空白行 | 信息体 |
10 编写无脚本的 JSP 页面
EL表达式
简化很多编码方式 JSP标签里面或者标签内容里面
1、只能用在JSP页面的标签属性值和标签内容里不能写在JSP指令和动作里面
2、EL表达式只用来读取和运算 JavaBean 的属性
3、如果对应的JavaBean不存在,那么它的做法是忽略
4、JSP页面上的隐式对象,EL里面基本都存在,都是很多丢掉了附近功能
pageContext-->pageScoperequest--> request-->requestScope
session-->sessionScopeapplication-->applicationScope
以上只有Attribute
param-->request.getParamter(request.getParamter("userpwd")param.userpwd)
paramValues-->request.getParamterValues()
header-->request.getHeader
headerValues
cookie
格式 ${ } 安全可靠
JSTL 标准标签库
JSP页面上的标签,分为两类:
1.静态标签:HTML标签包括doctype,服务器原封不动发给客户端
2.动态标签:每个标签都代表一系列的Java代码,要在服务器上执行的,典型的是JSP动作<jsp:forword>
JSP标签里面允许自定义标签,是指哪种?动态标签
JTSL标签库:
1 | 核心标签库 core |
2 | XML标签库 xml |
3 | SQL标签库 sql |
4 | 国际化标签库 I18N I自动显示各国语言 |
5 | 函数标签库 fn |
标签 | 含义 |
c:out value | Value 里面的内容输出到标签所在的位置上 |
c:set var value scope | Scope.setAttribute(var,value) |
c:remove var scope | Scope.removeAttribute(var) |
c:if text | Test属性是否成立,成立就执行标签内容 |
c:choose | 配合 c:when c:otherwise c:when标签可以重复,相当于连环if判断 |
c:when test | 和 c:if相当 |
c:otherwise | 相当于else |
c:foreach | 相当于for循环 |
C:forEach items var | Items 里面用EL表达式,获取要循环的用Var变量取名集合里面每一个都会赋值给变量 |
11 匈牙利命名法
变量命名用 前缀加英文单词组成,多个英文单词也可以,首字母大写,前缀小写,代表数据类型
常用前缀
srt s 字符串
i n 整数
f float
d double
b boolean
ch char
JFream frm
JPanel pnl
JLabel jbl
JTextField txt
JTable tbl