0%

javaweb

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
2
3
4
5
6
7
8
9
10
11
12
<servlet>
<servlet-name>Myservlet</servlet-name>
<servlet-class>test01.MyServlet</servlet-class>
<init-param>
<param-name>haha</param-name>
<param-value>这是Servlet中的初始参数</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

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
2
EL表达式语法
${ 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 不是异步请求(同步请求)
  • ②send(string)
    send()用于将请求发送给服务器,可以接收一个参数
    • ①string参数
      该参数只在发送post请求时需要。
      string参数用于设置请求体
  • ③setRequestHeader(header,value)
    用于设置请求头
    • ①header参数
      字符串类型,要设置的请求头的名字
    • ②value参数
      字符串类型,要设置的请求头的值

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)

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。

  1. Session的工作原理
    ①Session的创建时机是在request.getSession()方法第一次被调用时。
    ②Session被创建后,同时还会有一个名为JSESSIONID的Cookie被创建。
    ③这个Cookie的默认时效就是当前会话。
    ④简单来说,Session机制也是依赖于Cookie来实现的

  2. 使用

    HttpSession session = request.getSession();

  3. 时效性

    可以在web.xml中进行设置 30分钟

    1
    2
    3
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>

URL重写

​ 因为session还是需要cookie实现的,如果cookie禁用,则session无法使用,所以我们需要一些备用的手段,如RUL重写。

  1. URL重写其实就是将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx

  2. 实现方式

    String url = “targetServlet”;

    String encodeURL = response.encodeURL(url)

    response.sendRedirect(encodeURL)

主页面访问权限控制 (过滤器 字符转码)

  1. 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息。WEB资源可能包括Servlet、JSP、HTML页面等

  2. 当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给服务器。

  3. 使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class myFilter implement Filter{
    @override
    public void destroy(){

    }
    @override
    public void doFilter(ServletRequest arg0,Servlet response arg1,FilterChain arg2) throws IOException,ServletException {

    }
    @override
    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>

在线人数统计(监听器)

  1. Listener用于监听JavaWeb程序中的事件。
  2. 例如:ServletContext、HttpSession、ServletRequest的创建、修改和删除
  3. 监听器的类型分为
    ①生命周期
    ②数据绑定

xml

​ xml用来传输和存储数据,xml没有预定义标签,均为自定义标签。

  1. 配置文件
    JavaWeb中的web.xml
    C3P0中的c3p0-config.xml
  2. 数据交换格式
    Ajax
    WebService
  3. 数据存储
    保存关系型数据

xml组成

  1. XML文档组成
    ①XML声明
    version属性指定XML版本,固定值是1.0
    encoding指定的字符集,是告诉解析器使用什么字符集进行解码,而编码是由文本 编辑器决定的
    ②CDATA区
    当XML文档中需要写一些程序代码、SQL语句或其他不希望XML解析器进行解析 的内容时,就可以写在CDATA区中
    XML解析器会将CDATA区中的内容原封不动的输出
    CDATA区的定义格式:
  2. 语法规则
    ①XML声明要么不写,要写就写在第一行,并且前面没有任何其他字符
    ②只能有一个根标签
    ③标签必须正确结束
    ④标签不能交叉嵌
    ⑤严格区分大小写
    ⑥属性必须有值,且必须加引号
    ⑦标签不能以数字开头
    ⑧注释不能嵌套

xml解析

  1. XML解析是指通过解析器读取XML文档,解释语法,并将文档转化成对象

  2. 常用的解析方式
    DOM(Document Object Model)
    SAX(Simple API for XML)

  3. Dom4j解析示例

    1
    2
    3
    SAXReader saxreader = new SAXReader();
    Document document = saxreader.read("students.xml")
    Element root = document.getRootElement();

JSON

  1. AJAX一开始使用的时XML的数据格式,XML的数据格式非常简单清晰,容易编写,但是由于XML中包含了过多的标签,以及十分复杂的结构,解析起来也相对复杂,所以目前来讲,AJAX中已经几乎不使用XML来发送数据了。取而代之的是一项新的技术JSON。
  2. JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式。
  3. JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。

JSON通过6种数据类型来表示

  1. 字符串
  • 例子:”字符串”
  • 注意:不能使用单引号
  1. 数字:
  • 例子:123.4
  1. 布尔值:
  • 例子:true、false
  1. null值:
  • 例子:null
  1. 对象
  • 例子:{“name”: ”sunwukong”, ”age”: 18}
    6.数组
  • 例子:[1,”str”,true]

在JS中操作JSON

  1. 创建JSON对象
  • var json = {“name1”: ”value1”,”name2”: ”value2” , “name3”: [1,”str”,true]};
  • var json = [{“name1”: ”value1”},{“name2”: ”value2”}];
  1. JSON对象转换为JSON字符串
  • JSON.stringify(JSON对象)
  1. JSON字符串转换为JSON对象
  • JSON.parse(JSON字符串)

在Java中操作JSON

  1. 在Java中可以从文件中读取JSON字符串,也可以是客户端发送的JSON字符串,所以第一个问题,我们先来看如何将一个JSON字符串转换成一个Java对象。

  2. 首先解析JSON字符串我们需要导入第三方的工具,目前主流的解析JSON的工具大概有三种json-lib、jackson、gson。三种解析工具相比较json-lib的使用复杂,且效率较差。而Jackson和gson解析效率较高。使用简单,这里我们以gson为例讲解。

  3. Gson是Google公司出品的解析JSON工具,使用简单,解析性能好。

  4. Gson中解析JSON的核心是Gson的类,解析操作都是通过该类实例进行。

  5. JSON字符串转换为对象

    1
    2
    3
    4
    5
    6
    String 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Student stu = new Student("李四", 23);
Gson gson = new Gson();
//{"name": "李四","age": 23}
String json = gson.toJson(stu);
Map<String , Object> map = new HashMap<String, Object>();
map.put(“name”, “孙悟空”);
map.put(“age”, 30);
//{“age”: 30,“name”: “孙悟空”}
String json2 = gson.toJson(map);

List<Student> list = new ArrayList<Student>();
list.add(new Student(“八戒”, 18));
list.add(new Student(“沙僧”, 28));
list.add(new Student(“唐僧”, 38));
//[{“name”: “八戒”,“age”: 18},{“name”: “沙僧”,“age”: 28},
{“name”: “唐僧”,“age”: 38}]
String json3 = gson.toJson(list);
// 如果将一个数组格式的json字符串转换成java对象需要用到
//Gson提供的一个匿名内部类: TypeToken
TypeToken tk= new TypeToken<List<User>>(){};
List<User> list2 = gson.fromJson(json,tk.getType());
System.out.println(list2.get(0));

dao层

service层

web层

  • model 需要向页面加载的数据 一般为javaBean
  • view 页面模板 一般为jsp
  • controller 加载哪些数据然后跳转哪个页面 一般为servlet