javaweb
web服务器 (tomcat)用来接收客户发来的请求和响应客户请求
目录结构
bin 存放启动和停止等命令和且其他脚本文件。 config 存放服务器的配置文件 lib 存放服务器的jar包 logs 存放服务器的日志文件 webapps web应用的部署目录 temp 存放tomcat的临时文件 work tomcat的工作目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
编辑器配置好tomcat运行环境
添加好一个server实例
servlet (处理请求和发起响应,为了实现动态页面而衍生出来的)
servlet 生命周期
- 加载类
- 初始化
- init
- service
- destory
servlet与Tomcat之间的关系
- tomcat是web应用服务器,是一个servlet/Jsp容器,负责把请求传递给Servlet,并将Servlet的响应传递给客户。
- servlet是服务器上的一个组件,
在web.xml中定义servlet与访问网址之间的匹配关系
```xml
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>test01.servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
可以在web.xml中配置load-on-startup=1 服务器启动时初始化servlet对象
servlet初始化参数
1 | <servlet> |
getInitParameterNames() 获取在servlet中的所有初始化参数的名字
重定向
1 | response.sendRedirect("重定向的地址") |
转发
1 | request.getDispatcher("转发的地址").forWard(request,response) |
JSP页面(java server pages)本质也是一个servlet
html中写jsp标签,jsp标签中写java代码
<% java代码%> <%= java变量%>
html,java代码块,jsp标签组成
JSP中的内置对象
- out(jspWriter) :相当于respons.getWriter()获取的对象,用于在页面中显示信息。
- config (servletConfig): servlet 中的 servletConfig对象。
- page (Object) : 对应当前的servlet对象,实际上就是this
- pageContext (PageContext) : 当前页面的上下文,也是一个域对象。
- exception (Trowable): 错误页面中的异常对象
- request (HttpServletRequest): HttpServletRequest对象
- response (HttpServletResponse) : HttpServletResponse对象
- application (ServletContext) : ServletContext对象
- session(HttpSession): HttpSession对象
EL表达式 自动类型转换
EL是jsp内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。
EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作
1 | EL表达式语法 |
EL取值的四个域:
pageScope
requestScope
sessionScope
applicationScope
EL表达式与JSTL的比较
- EL表达式为了简化jsp中传统的取值操作。 ${requst.pwd} <%= request.getAttribute(“pwd”)%>
- JSTL是 (java server pages standard Tag library)
- EL表达式多用于取值操作,而JSTL则可以方便我们对集合进行遍历,对数据进行判断等操作
JavaScript
avaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应
BOM
①Borwser Object Model 浏览器对象模型
②浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象
③常用的对象(window的子对象)
document history location screen navigator frames
DOM
①Document Object Model 文档对象模型
②document对象: window对象的一个属性,代表当前HTML文档,包含了整个文档的树形结构。获 取document对象的本质方法是:window.document,而“window.”可以省略。
document.getElementById(“id值”)
document.getElementsByTagName(“标签名”)
document.getElementsByName(“name值”)
Ajax
XMLHttpRequest对象是AJAX中非常重要的对象,所有的AJAX操作都是基于该对象的。
Xhr对象的方法
- ①open(method,url,async) open()用于设置请求的基本信息,接收三个参数
- ①method
请求的方法:get或post
接收一个字符串 - ②url
请求的地址,接收一个字符串 - ③Assync
发送的请求是否为异步请求,接收一个布尔值。
true 是异步请求
false 不是异步请求(同步请求)
- ①method
- ②send(string)
send()用于将请求发送给服务器,可以接收一个参数- ①string参数
该参数只在发送post请求时需要。
string参数用于设置请求体
- ①string参数
- ③setRequestHeader(header,value)
用于设置请求头- ①header参数
字符串类型,要设置的请求头的名字 - ②value参数
字符串类型,要设置的请求头的值
- ①header参数
XMLHttpRequest对象的属性
readyState
①描述XMLHttpRequest的状态
②一共有五种状态分别对应了五个数字:
0 :请求尚未初始化,open()尚未被调用
1 :服务器连接已建立,send()尚未被调用
2 :请求已接收,服务器尚未响应
3 :请求已处理,正在接收服务器发送的响应
4 :请求已处理完毕,且响应已就绪。
2)status
①请求的响应码
200 响应成功
404 页面为找到
500 服务器内部错误
3)onreadystatechange
①该属性需要指向一个函数
②该函数会在readyState属性发生改变时被调用
4)responseText
①获得字符串形式的响应数据。
5)responseXML(用的比较少)
①获得 XML 形式的响应数据。
使用JQuery框架来发送异步请求
JQuery是当前比较主流的 JavaScript 库,封装了很多预定义的对象和实现函数,
JQuery的对象的本质就是dom对象的数组/集合
JQuery对象与dom对象的相互转换
JS转JQuery: var jObj = $(dObj);
JQuery转JS: var dObj = jObj[0] 或者 var dObj = jObj.get(0)
Cookie
HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出的。假如在我们进行网购时,买了一条裤子,又买了一个手机。由于http协议是无状态的,如果不通过其他手段,服务器是不能知道用户到底买了什么。而Cookie就是解决方案之一。
Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。
创建cookie
Cookie mycookie = new Cookie(‘key’,’value’);
mycookie.setPath(‘设置cookie的路径’);
mycookie.setMaxAge(‘设置cookie的时间’);
request.addCookie(mycookie);
读取cookie
Cookie[] cookie = request.getCookie();
Session
使用cookie是有局限的,如果cookie很多会增加数据传输量,浏览器也会对cookie的数量有限制,于是session出现。
Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。
Session的工作原理
①Session的创建时机是在request.getSession()方法第一次被调用时。
②Session被创建后,同时还会有一个名为JSESSIONID的Cookie被创建。
③这个Cookie的默认时效就是当前会话。
④简单来说,Session机制也是依赖于Cookie来实现的使用
HttpSession session = request.getSession();
时效性
可以在web.xml中进行设置 30分钟
1
2
3<session-config>
<session-timeout>30</session-timeout>
</session-config>
URL重写
因为session还是需要cookie实现的,如果cookie禁用,则session无法使用,所以我们需要一些备用的手段,如RUL重写。
URL重写其实就是将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx
实现方式
String url = “targetServlet”;
String encodeURL = response.encodeURL(url)
response.sendRedirect(encodeURL)
主页面访问权限控制 (过滤器 字符转码)
对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息。WEB资源可能包括Servlet、JSP、HTML页面等
当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给服务器。
使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14class myFilter implement Filter{
public void destroy(){
}
public void doFilter(ServletRequest arg0,Servlet response arg1,FilterChain arg2) throws IOException,ServletException {
}
public void init(FilterConfig arg0) throws ServletException{
}
}在xml中配置
1
2
3
4
5
6
7
8<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.atguigu.servlet.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在线人数统计(监听器)
- Listener用于监听JavaWeb程序中的事件。
- 例如:ServletContext、HttpSession、ServletRequest的创建、修改和删除
- 监听器的类型分为
①生命周期
②数据绑定
xml
xml用来传输和存储数据,xml没有预定义标签,均为自定义标签。
- 配置文件
JavaWeb中的web.xml
C3P0中的c3p0-config.xml - 数据交换格式
Ajax
WebService - 数据存储
保存关系型数据
xml组成
- XML文档组成
①XML声明
version属性指定XML版本,固定值是1.0
encoding指定的字符集,是告诉解析器使用什么字符集进行解码,而编码是由文本 编辑器决定的
②CDATA区
当XML文档中需要写一些程序代码、SQL语句或其他不希望XML解析器进行解析 的内容时,就可以写在CDATA区中
XML解析器会将CDATA区中的内容原封不动的输出
CDATA区的定义格式: - 语法规则
①XML声明要么不写,要写就写在第一行,并且前面没有任何其他字符
②只能有一个根标签
③标签必须正确结束
④标签不能交叉嵌
⑤严格区分大小写
⑥属性必须有值,且必须加引号
⑦标签不能以数字开头
⑧注释不能嵌套
xml解析
XML解析是指通过解析器读取XML文档,解释语法,并将文档转化成对象
常用的解析方式
DOM(Document Object Model)
SAX(Simple API for XML)Dom4j解析示例
1
2
3SAXReader saxreader = new SAXReader();
Document document = saxreader.read("students.xml")
Element root = document.getRootElement();
JSON
- AJAX一开始使用的时XML的数据格式,XML的数据格式非常简单清晰,容易编写,但是由于XML中包含了过多的标签,以及十分复杂的结构,解析起来也相对复杂,所以目前来讲,AJAX中已经几乎不使用XML来发送数据了。取而代之的是一项新的技术JSON。
- JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式。
- JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。
JSON通过6种数据类型来表示
- 字符串
- 例子:”字符串”
- 注意:不能使用单引号
- 数字:
- 例子:123.4
- 布尔值:
- 例子:true、false
- null值:
- 例子:null
- 对象
- 例子:{“name”: ”sunwukong”, ”age”: 18}
6.数组 - 例子:[1,”str”,true]
在JS中操作JSON
- 创建JSON对象
- var json = {“name1”: ”value1”,”name2”: ”value2” , “name3”: [1,”str”,true]};
- var json = [{“name1”: ”value1”},{“name2”: ”value2”}];
- JSON对象转换为JSON字符串
- JSON.stringify(JSON对象)
- JSON字符串转换为JSON对象
- JSON.parse(JSON字符串)
在Java中操作JSON
在Java中可以从文件中读取JSON字符串,也可以是客户端发送的JSON字符串,所以第一个问题,我们先来看如何将一个JSON字符串转换成一个Java对象。
首先解析JSON字符串我们需要导入第三方的工具,目前主流的解析JSON的工具大概有三种json-lib、jackson、gson。三种解析工具相比较json-lib的使用复杂,且效率较差。而Jackson和gson解析效率较高。使用简单,这里我们以gson为例讲解。
Gson是Google公司出品的解析JSON工具,使用简单,解析性能好。
Gson中解析JSON的核心是Gson的类,解析操作都是通过该类实例进行。
JSON字符串转换为对象
1
2
3
4
5
6String json = "{\"name\": \"张三\",\"age\": 18}";
Gson gson = new Gson();
// 转换为集合
Map<String,Object> stuMap = gson.fromJson(json,Map.class);
// 转换为类
Student student = gson.fromJson(json,Student.class);
6.对象转json
1 | Student stu = new Student("李四", 23); |
dao层
service层
web层
- model 需要向页面加载的数据 一般为javaBean
- view 页面模板 一般为jsp
- controller 加载哪些数据然后跳转哪个页面 一般为servlet