JavaWEB基础笔记

什么是JSP

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和 容易。


注意:

*.html 静态页面(包含固定的页面内容)
*.jsp 动态页面(页面数据可以动态更新,支持嵌套java代码和html代码)

在JSP中嵌套JAVA代码

声明标签 <%!变量或者方法声明%>
表达式标签 <%= 表达式%> 在页面上显示的效果 程序代码标签 <%java代码%> 页面上动态展示内容

page指令:
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>

<%! int i=10;%> 成员变量
<%! public void show(){}%> 成员方法
<%=i%> 输出变量值

JSP的原理

当浏览器访问http://localhost:8080/day9_1/index.jsp。服务器发现后缀为.jsp,它会根据路径找到index.jsp文 件,会将index.jsp翻译成index_jsp.java文件,对这个java文件进行编译,产生一个index_jsp.class文件,将class 文件加载运行。将JSP翻译成java文件,它是将JSP中的所有的HTML代码通过流进行输出,也就是说最终翻译成 class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的方式写回浏 览器。所以在JSP中展示出了HTML代码


JSP的内置对象

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、 pagecontext、config、page、exception
1、request对象
    request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于 接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的 作用域为一次请求。

2、response对象
    response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作
用域,它只在JSP页面内有效。所属类型:HttpServletResponse

3、session对象
    session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用 于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。HttpSession

4、application对象
    application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用
中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量” ServletContext 区别:
request:单次请求
session:浏览器访问期间(会话期间)
application:服务器启动期间,所存的数据可以跨浏览器

5、out 对象
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时, 可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要 及时关闭输出流。

6、pageContext 对象
     pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、 session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

7、config 对象
     config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取 一个config对象。当一个Servlet 初始化时,容器把某些信息通过config对象传递给这个 Servlet。 开发者可以在 web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

8、page 对象
     page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变
量,类似于Java编程中的 this 指针。

9、exception 对象
     exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的 JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。 exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP 页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误 页面中,然后在错误页面中处理相应的 exception 对象。


JSTL

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。 JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。根据JSTL标签所提供的功能,可以将其分为5个类别。核心标签 格式化标签 sql标签 xml标签 jstl函数

1、fmt:formatDate 作用:将日期类型格式化为指定模式的字符串

属性:
    value:将要被格式化的数据
    pattern:格式化的模式,与SimpleDateFormat的参数设置一样 var:格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在页面     scope:变量存放的域属性空间,默认page type:其取值为date、time、both,表示给出的value是日期、时间、还是两者都包含,默认是date

2、fmt:parseDate 作用:用于将指定字符串转化为日期类型
Value服务器获取的时间 Pattern:转换的格式
Var:页面显示的变量

3、fmt:formatNumber 按照指定格式对数字进行格式化 属性
maxIntegerDigits:整数部分最多的位数 minIntegerDigits:整数部分最少的位数 maxFrctionDigits:小数部分最多的位数 minFrctionDigits:小数部分最少的位数 var:存储格式化结果的变量
scope:var属性的作用域 integerOnly:是否只解析整型数true或者浮点数false

Servlet

Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序,其主要功能在于交互式地浏览和 修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个 Servlet接口的类,一般情况下,人们将Servlet理解为后者。 Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下 Servlet只用来扩展基于HTTP协议的Web服务器。

Servlet工作模式:

  1. 客户端发送请求至服务器
  2. 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
  3. 服务器将响应返回客户端

Servlet工作原理

(1) Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。

(2)用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个 ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封 装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

(3)ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse 表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。

(4)对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序) 的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的 ServletConfig对象。

Servlet的生命周期

当客户端首次发送第一次请求后,由容器(web服务器(tomcat))去解析请求, 根据请求找到对应的servlet,判断该类 的对象是否存在,不存在则创建servlet实例,调取init()方法 进行初始化操作,初始化完成后调取service()方法,由 service()判断客户端的请求方式,如果是get,则执行doGet(),如果是post则执行doPost().处理方法完成后,作出相 应结果给客户端.单次请求处理完毕。
当用户发送第二次以后的请求时,会判断对象是否存在,但是不再执行init(),而直接执行service方法,调取 doGet()/doPost()方法。
当服务器关闭时调取destroy()方法进行销毁。

四个过程:

  1. 实例化 --先创建servlet实例
  2. 初始化 --init()
  3. 处理请求 --service()
  4. 服务终止 --destory()

请求

HttpServletRequest表示Http环境中的Servlet请求。它扩展于javax.servlet.ServletRequest接口) 常用方法:

  1. String getParameter(String name) 根据表单组件名称获取提交数据,返回值是String
    注:服务器在接收数据时使用字符串统一接收
  2. String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
  3. void setCharacterEncoding(String charset) 指定每个请求的编码(针对post请求才起作用)
  4. RequestDispatcher getRequestDispatcher(String path) --跳转页面
    返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求

示例:

request.getRequestDispatcher("../success.jsp").forward(request,response);
  1. 存值 request.setAttribute(“key”,value);
  2. 取值 request.getAttribute(“key”);//取值后需要向下转型
    示例: String a1=(String)request.getAttribute(“uname”);

处理请求乱码的问题

方式1: setCharacterEncoding(“UTF-8”);//post提交时管用

方式2: String s=new String(变量名.getBytes(“ISO-8859-1”),“UTF-8”);//针对于get提交时中文乱码 示例: String s=new String(request.getParameter(“key”).getBytes(“ISO-8859-1”),“GBK”);

方式3:修改tomcat中配置文件://使用于get提交 在Tomcat目录结构\conf\server.xml中设置字符集

get和post的区别

  1. GET请求
    请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的 是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
    POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数 据。
    因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

  2. 传输数据的大小
    在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器 和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行 限制,Apache、IIS都有各自的配置。

  3. 安全性
    POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的 安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为 登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到 了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击

响应

在Service API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来封装HTTP响应消息。 在HttpServletResponse接口中定义了向客户端发送响应状态码,响应消息头,响应消息体的方法。

常用方法:

  1. void addCookie(Cookie var1);//给这个响应添加一个cookie
  2. void sendRedirect(String var1) ;//发送一条响应码,将浏览器跳转到指定的位置
  3. PrintWriter getWriter() 获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中, 随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。
  4. setContentType() 设置响应内容的类型

重定向和转发的对比

重定向:response.sendRedirect()

转发:request.getRequestDispatcher("…/success.jsp").forward(request,response);

相同点:

  • 都用来跳转页面

不同点:

  • 重定向时地址栏会改变,request中存储的数据会丢失.转发时地址栏显示的是请求页面的地址,request数据可以保 存。
  • 转发属于一次请求一次响应,重定向属于两次请求(地址栏修改了两次)两次响应。 补充:使用out对象往页面中输出js或html,css

会话

request存的值只能在单次请求中保存,保存的数据不能跨页面,当重定向时,request存的值会丢失 session的数据可以在多个页面中共享,即使重定向页面,数据不会丢失 session中可以包含n个request。

会话的概念:从打开浏览器到关闭浏览器,期间访问服务器就称为一次会话
常用方法:

  • void setAttribute(String key,Object value) 以key/value的形式保存对象值,将数据存储在服务器端
  • Object getAttribute(String key) 通过key获取对象值
  • void invalidate() 设置session对象失效
  • String getId() 获取sessionid,当第一次登录成功后,session会产生一个唯一的id,浏览器之后访问时如果发现id值 还是之前id,那么说明 当前访问的属于同一个会话
  • void setMaxInactiveInterval(int interval) 设定session的非活动时间
    示例:
         方式1: session.setMaxInactiveInterval(10*60);//设置有效时间为10分钟
         方式2:修改web.xml
 <session-config> 
 	<session-timeout>10</session-timeout>//单位:分钟
</session-config>

int getMaxInactiveInterval() 获取session的有效非活动时间(以秒为单位),默认的有效时间:30分钟

void removeAttribute(String key)从session中删除指定名称(key)所对应的对象

小结 :让session失效的方式

  1. invalidate()
  2. removeAttribute(“key”)
  3. 直接关闭浏览器。 示例:使用session验证用户是否登录

补充:
自动刷新到某页面:
注:在head标签中添加该标签,单位:秒

JavaWEB MVC

MVC设计模式

Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念一样

在这里插入图片描述

M:(Model) 模型 : 应用程序的核心功能,管理这个模块中用的数据和值(bean,dao);

V(View )视图: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观;(jsp/html)

C(Controller)控制器: 对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。
(servlet/service)

三层架构

三层架构 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

  1. 表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所⻅所得。
    jsp/html
  2. 业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 servlet,service
  3. 数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找 等。dao

三层架构和MVC的区别与联系

在这里插入图片描述

MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把 三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成⻚面逻辑,通过 实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。

MVC可以是三层中的一个表现层框架,属于表现层。三层和mvc可以共存。 三层是基于业务逻辑来分的,而MVC是基于⻚面来分的。MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以 分成M、V、C,(Model View Controller)模型-视图-控制器

MVC是表现模式(Presentation Pattern)
三层架构是典型的架构模式(Architecture Pattern)

三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的, 而是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是 应用于不同领域的技术。


AJAX

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技术组合而成。

  1. 使用CSS和XHTML来表示。
  2. 使用DOM模型来交互和动态显示。
  3. 使用XMLHttpRequest来和服务器进行异步通信。
  4. 使用javascript来绑定和调用。

Ajax的工作原理

Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步 化。并不是所有的用户请求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎自己来做,, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

Ajax编程步骤

为了方便理解,我给AJAX统一了一个流程,要想实现AJAX,就要按照以后步骤走:

  1. 创建XMLHttpRequest对象。
  2. 设置请求方式。
  3. 调用回调函数。
  4. 发送请求。

下面来看下具体步骤:

1.创建XMLHttpRequest对象

创建XMLHttp对象的语法是:

var xmlHttp=new XMLHttpRequest();

一般手写AJAX的时候,首先要判断该浏览器是否支持XMLHttpRequest对象,如果支持则创建该对象,如果不支持则创建ActiveX对象。JS代码如下:

//第一步:创建XMLHttpRequest对象 var xmlHttp;
if (window.XMLHttpRequest) {
//非IE
xmlHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) {
//IE
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") }

2.设置请求方式

在WEB开发中,请求有两种形式,一个是get,一个是post,所以在这里需要设置一下具体使用哪个请 求,XMLHttpRequest对象的open()方法就是来设置请求方式的。

//第二步:设置和服务器端交互的相应参数,向路径 http://localhost:8080/JsLearning3/getAjax准备发送数据 
var url = "http://localhost:8080/JsLearning3/getAjax"; 
xmlHttp.open("POST", url, true);

GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。然而,在以下情况中,请使用 POST 请求:

  1. 无法使用缓存文件(更新服务器上的文件或数据库)
  2. 向服务器发送大量数据(POST 没有数据量限制)
  3. 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

3.调用回调函数

如果在上一步中open方法的第三个参数选择的是true,那么当前就是异步请求,这个时候需要写一个回 调函数,XMLHttpRequest对象有一个onreadystatechange属性,这个属性返回的是一个匿名的方法, 所以回调函数就在这里写xmlHttp.onreadystatechange=function{},function{}内部就是回调函数的内 容。所谓回调函数,就是请求在后台处理完,再返回到前台所实现的功能。在这个例子里,我们的回调 函数要实现的功能就是接收后台处理后反馈给前台的数据,然后将这个数据显示到指定的div上。因为从 后台返回的数据可能是错误的,所以在回调函数中首先要判断后台返回的信息是否正确,如果正确才可 以继续执行。代码如下:

 
//第三步:注册回调函数 
xmlHttp.onreadystatechange = function() {
	if (xmlHttp.readyState == 4) { 
		if (xmlHttp.status == 200) {
			var obj = document.getElementById(id);
			obj.innerHTML = xmlHttp.responseText;
		} else {
			alert("AJAX服务器返回错误!"); 
		}
	}
}

4.发送请求

 
//第四步:设置发送请求的内容和发送报送。然后发送请求
var uname= document.getElementsByName("userName")[0].value;
var upass= document.getElementsByName("userPass")[0].value ;
var params = "userName=" + uname+ "&userPass=" +upass+ "&time=" + Math.random();
// 增加time随机参数,防止读取缓存 
xmlHttp.setRequestHeader("Content-type", "application/x-www-form- urlencoded;charset=UTF-8");
// 向请求添加 HTTP 头,POST如果有数据一定加加!!!! 
xmlHttp.send(params);

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据。

jquery的ajax操作

jquery的ajax操作

可以通过发送 HTTP请求加载远程数据,是 jQuery 最底层的 Ajax 实现,具有较高灵活性。
. a j a x ( [ s e t t i n g s ] ) ; / / 参 数 s e t t i n g s 是 .ajax( [settings] ); //参数 settings 是 .ajax([settings]);//settings.ajax ( )方法的参数列表,用于配置 Ajax 请求的键值对集合;

$.ajax({
url:请求地址
type:"get | post | put | delete " 默认是get,
data:请求参数 {"id":"123","pwd":"123456"}, dataType:请求数据类型"html | text | json | xml | script | jsonp ", success:function(data,dataTextStatus,jqxhr){ },//请求成功时
error:function(jqxhr,textStatus,error)//请求失败时 })

get() 方法通过远程 HTTP GET 请求载入信息

这是一个简单的 GET 请求功能以取代复杂 $.ajax 。

$.get(url,data,function(result) { //省略将服务器返回的数据显示到⻚面的代码
});
  • url:请求的路径
  • data:发送的数据
  • success:成功函数
  • datatype 返回的数据

post() 方法通过远程 HTTP GET 请求载入信息

$.post(url,data,function(result) { //省略将服务器返回的数据显示到⻚面的代码
});
  • url:请求的路径
  • data:发送的数据
  • success:成功函数
  • datatype 返回的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值