华清远见-重庆中心-JavaWeb阶段技术总结

JavaWeb

使用Java开发Web服务的技术,统称为JavaWeb。

B/S与C/S模式

  1. B/S:Browser/Server 浏览器/服务器模式

  • 用户只需要一个浏览器即可访问服务器

  1. C/S:Clint/Server 客户端/服务器模式

  • 用户需要下载客户端才能访问服务器

网站

用户通过浏览器访问某个域名或IP地址时,浏览到的综合性页面

实际就是发布在服务器上的一个应用程序,用户通过浏览器访问该程序。

网页

网站中的一个页面

静态页面:所有人看到的数据都一致

动态页面:不同的人看到的页面中的数据不一致

JavaWeb就是B/S模式下的软件开发,开发综合性的服务网站。

网络服务器

部署Web项目的平台。

Tomcat

由Apache、Sun和其他公司及个人共同开发的web服务器。

免费、开源、轻量级,在中小型系统中普遍被使用。

是开发和调试Web项目的首选。

目录结构

三层架构

在软件开发中,并不是将所有功能都交给一个类去实现,而是要将其进行分层,从而达到"高内聚、低耦

合"的目的。

低耦合是指降低各个模块之间的关联程度,这样便于开发和维护,每个模块各司其职。

高内聚是指每个模块内的功能不可再分。

比如要用积木拼出来一辆车,不要把所有积木放在一起拼,这样其中一部分出现问题,就会影响到其他

地方。

最好的做法是先将车的各个组件拼接完成(解耦),每个组件都是完整的不可再分的整体(高内聚),最终再

把各个组件拼接到一起。

这样便于发现问题解决问题,不影响其他模块。

通常所说的三层架构中的三层,是指“数据访问层、业务逻辑层和视图表现层

  • 数据访问层,用于连接数据库,对数据做增删改查的操作

  • 业务逻辑层,用于处理业务逻辑,在适当的情况下调用数据访问层中的方法

  • 视图表现层,用于展示数据和提供用户输入数据的渠道,在适当的情况下调用业务逻辑层中的方法

Servlet

Server+Applet 运行在服务器上的程序

Servlet的生命周期

构造方法-->init()-->service()/doGet()/doPost()-->destory()

在访问某servlet时

1.执行构造方法一次

2.初始化一次,调用init()方法

3.调用service()方法,之后每次访问都会调用该方法。有该方法时,doGet和doPost失效。

如果没有该方法,会根据请求方式试图调用doGet或doPost,如果没有相应的方法,会出现405状态

码,表示请求方式不允许

4.在当前servlet所在项目从tomcat中停止时,销毁一次,调用destory()方法

JSP

Java Server Page

使用Java开发、运行在服务器上的页面。

jsp文件的后缀名为".jsp"。

由于最初由servlet渲染页面,在Java代码中加入大量html的内容,使用极不方便。所以Sun公司推出了

JSP,可以在页面中加入java代码,让页面成为动态页面。

JSP页面的本质是一个java文件(servlet)

在访问某个jsp页面时,会让该页面重新编译为.java文件-->.class文件,所以第一次访问某个JSP页面时会

慢一些。

JSP的组成

    • HTML元素

    • 脚本(java代码)
<%java代码;%>
3.表达式

用于在页面中嵌入变量的值

<%=变量%>
4.指令
<%@ 指令名 属性="值" %>

page指令 用于设置当前页面的属性

include指令 用于引入其他页面

taglib指令 用于引入其他标签库

5.注释
<%-- jsp注释 --%>

在浏览器中可以查看html的注释,无法查看jsp的注释

6.声明

在<%%>中无法定义方法,如果非要在jsp页面中定义方法,需要使用声明。不建议在jsp页面中定义方法。

<%! 定义方法 %>
7.动作

jsp中定义了一些标签,可以代替某些java代码

<jsp:动作名></jsp:动作名>

请求转发(内部跳转)

request.getRequestDispatcher("跳转的地址").forward(request,response);

如A同学问B同学问题,B同学自己去问C同学后得到了答案,将答案告诉给A同学。

跳转到目的地时,浏览器的地址栏中的内容是访问时的地址

如果在某个Servlet做完增删改的操作后,不要使用请求转发。因为当重新刷新页面时,会重复提交

如果在request中保存了数据,只能通过请求转发才能读取request中保存的数据

重定向(外部跳转)

response.sendRedirect("跳转的地址");

如A同学问B同学问题,B同学告诉A同学去问C同学,A同学重新问C同学后得到答案。

response.sendRedirect("跳转的地址");跳转到目的地时,浏览器的地址栏中的内容是最终的目的路径

在做完增删改的操作后,使用重定向,可以保证最终页面与之前页面无关,刷新时不会重新提交

如果在request中保存了数据,使用重定向,保存的数据就会丢失

路径问题

绝对路径

<a href="http://localhost:8080/system/pages/hello.html">跳转</a>

相对路径问题

  • /

表示根目录,即域名:端口号,如localhost:8080

  • ./

表示当前目录,如在localhost:8080/Web03/page.html页面中访问./index.html,相当于

localhost:8080/Web03/index.html

  • ../

表示向上一层目录,如在localhost:8080/Web03/page.html页面中访问../index.html,相当于

localhost:8080/index.html

使用EL的${pageContext.request.contextPath}表示当前项目的上下文路径,

如localhost:8080/Web03/pages/index.html中使用

${pageContext.request.contextPath}/hello.html,

相当于localhost:8080/Web03/hello.html

四大作用域对象

作用域:共享数据的区域

pageContext

当前页面对象。共享数据区域范围为当前页面。

如果不在同一个页面,数据无法读取。

request

请求对象。共享数据区域范围为一次请求。

如果跳转中途使用了重定向,数据无法读取。

session

会话对象。会话是用户访问服务器时的某个时间段。

共享数据区域范围在这个时间段内,默认30分钟。

如果在指定时间内没有操作或销毁会话时,数据无法读取。

application

项目对象。共享数据区域范围为整个项目。

作用域范围

application > session > request > pageContext

总结

在jsp页面中使用pageContext保存的数据,只能共享于当前页面

通常在servlet中查询后的数据保存在request中,使用请求转发跳转到其他页面,在对应的页面中数据数据

通常在登录后,将登录的用户保存在session中,无论用哪种方式跳转,都能从session中获取当时登录的用户。

在application中保存一些共享于整个项目中的数据

EL

Expression Language 表达式语言

是为了使JSP写起来更加简便,替换JSP中的<%=%>,简化了JSP页面中输出数据的操作。

主要输出保存在某个作用域中的数据。

特点

如果通过"某个作用域对象.setAttribute("cus",customer)"方法保存的对象,

在JSP页面中如果用表达式,使用<%=cus%>,如果用EL,使用${cus}输出。

会依次从pageContext-->reqeust-->session-->application中获取指定对象,

如果一旦从某个作用域中获取到了指定对象,就不再判断后续作用域。

也可以输出指定作用域中的对象。

  • 只能输出保存在作用域中的对象

  • 减少代码(省去了获取对象、转换的过程)

  • 免去非空判断

如果某个要输出的对象不存在,不会输出null,而是输出空字符串""。

使用

在页面中输出保存在作用域中的对象

  • 从作用域中依次查询并输出对象

${对象名}
  • 从指定作用域中输出对象

  • 输出对象的属性

${对象名.属性名}
${对象名["属性名"]}
  • 输出对象的方法返回值

${对象名.方法名()}

注意

  • web.xml版本在4.0之后,在JSP中使用EL时,默认可以识别。

  • 如果JSP无法识别EL,在指令(<%@ %>)中加入 isELIgnored="false"表示不忽略EL。

  • 如果在使用EL过程中,出现PropertyNotFoundException异常,表示未发现指定属性,原因有

  1. 缺少指定属性

  1. 指定属性没有对应的get方法

JSTL

Java Server Page Standarded Tag Library JSP标准标签库

可以使用JSTL中的特定标签,来替换JSP中常见的Java代码。如循环判断等,减少Java代码,提高页面的

可读性。

使用

  1. 导入JSTL对应的依赖

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
  1. 在JSP页面中,加入标签库指令

<%--在当前页面中使用jstl,加入以下指令--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

这句话可以不写,在使用循环遍历时会自动生成。但是其他情况使用必须先导入

Ajax

Asynchronous Javascript And XML

异步JavaScript和XML

一种数据交互方式,请求和响应是异步的。

使用ajax能实现在整个页面不重新加载的情况下,更新局部内容。

使用

浏览器都是支持异步提交,原生的JavaScript就能实现ajax,但使用极不方便,所以都是使用jquery封装

后的$.ajax()或$.get() $.post()等函数。

    • 在页面中导入jquery文件
<!--使用Ajax,需要导入jquery-->
<script src="jquery文件路径"></script>
    • 在script标签中写ajax
<script>
    某个节点.事件(function(){
        //使用ajax异步提交数据
        $.ajax({
            //访问的URL地址
            url:"servlet映射或具体url",
            //提交的数据
            data:{
            //键:值
            "形参":值,
            "形参":值
            },
            //提交方式
            type:"get/post/put/delete",
            //成功访问URL后的回调函数
            success:function(res){//res表示访问URL后返回的数据
            },
            //访问URL失败时的回调函数
            error:function(){
            }
        });
    });
</script>

JSP内置对象

在jsp页面中有一些对象是已经定义好了可以直接使用的,称为内置对象。

一共有9个内置对象。

记法:"rrppsoace"

request

请求作用域对象

response

响应对象

pageContext

当前页作用域对象

session

会话作用域对象

page

当前jsp页面对象

out

输出对象

application

项目作用域对象

config

配置对象

exception

异常对象

Session和Cookie

这两个都是用于保存数据的对象。

session是一个作用域对象,在servlet中通过request.getSession()获取,在JSP中直接使用内置对象

session获取。

cookie是一个对象,也是一个文件,保存在本地。

Cookie

cookie通常用于更长时间地保存一些信息,即便关闭浏览器,也能保存。

cookie的创建
//创建cookie
Cookie cookie = new Cookie("username", "保存在cookie中的用户名");
//设置有效时长,单位为秒,这里表示7天有效
cookie.setMaxAge(60*60*24*7);
//通过响应对象response保存cookie对象到本地
response.addCookie(cookie);
cookie的获取
//读取cookie时是获取当前站点的所有cookie数组
Cookie[] cks = request.getCookies();
//遍历
for(Cookie ck :cks){
    System.out.println( ck.getName()+"--"+ck.getValue());
}
Session

session是一个作用域对象,在访问任意jsp页面时,默认就会创建一个session对象(可以通过设置取消自动创建)。

通常使用session保存一些信息,用于在同一站点的各个页面之间共享数据。

原理:

1.当访问的jsp页面或servlet中使用了session,会创建一个JSESSIONID(session编号),这是一个字符串,保存在一个cookie中。

  • 默认访问某个jsp页面时,该页面中没有使用session,也会自动创建session,因为

<%--默认每个jsp页面都有这句话,表示访问该页面时,自动使用session--%>
<%@ page session="true"%>
  • 如果将其设置为false,访问该jsp时则不会自动创建session。

2.再次访问该页面时,会查询该JSESSIONID是否存在,如果存在,直接使用,如果不存在,创建新的JSESSIONID

3.保存该JSESSIONID的cookie会随着浏览器的关闭自动销毁,所以关闭浏览器,session就会失效。

session对象的常用方法
Session和Cookie对比

session中保存的是对象Object,cookie中保存的是字符串String,都以键值对的形式保存

session保存在浏览器和服务器端,cookie保存在浏览器

session保存的数据没有大小限制,cookie保存的数据有大小限制,不超过3KB

session在30分钟内没有访问或随着浏览器的关闭而销毁,cookie可以设置销毁时间

监听器Listener

对于项目的某个操作进行监听,这个操作可以是创建或销毁application、session,发送请求、得到响应。

用于在执行某个操作时,通过监听器同时再执行其他操作,如记录日志、统计站点人数等。

常用的三个监听器接口

ServletContextListener application监听器
HttpSessionListener session监听器
ServletRequestListener request监听器

过滤器Filter

web.xml中的相关配置

servlet

<!-- 声明servlet -->
<servlet>
<servlet-name>自定义servlet名</servlet-name>
<servlet-class>servlet全限定名</servlet-class>
<!-- servlet初始化参数 -->
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
</servlet>
<!-- 配置servlet请求映射 -->
<servlet-mapping>
<servlet-name>自定义servlet名</servlet-name>
<url-patten>/映射名</url-patten>
</servlet-mapping>

filter

<!-- 声明filter -->
<filter>
<filter-name>自定义filter名</filter-name>
<filter-class>filter全限定名</filter-class>
</filter>
<!-- 配置filter请求映射 -->
<filter-mapping>
<filter-name>自定义filter名</filter-name>
<!--过滤器通常用于解决中文乱码,要过滤所有请求-->
<url-patten>/*</url-patten>
</filter-mapping>

listener

<listener>
<listener-class>监听器的全限定名</listener-class>
</listener>

session

<!--设置全局session配置,不配置有默认时长30分钟-->
<session-config>
<session-timeout>session有效时长,单位为分钟</session-timeout>
</session-config>

全局参数

<!--设置全局参数-->
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>

中文乱码解决

解决Tomcat控制台乱码

一、

二、

解决控制台打印中文乱码

解决请求和响应的中文乱码

//在servlet的doGet或doPost所有代码之前中加入
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值