【java学习】java web

1,概念

JSP和Servlet技术一样,都是SUN公司定义的一种用于开放动态web页面(资源)的技术。

1)动态web资源开放技术

JSP不仅是写html,同时允许在页面中编写java代码,并且运行开发人员在页面中获取request、response等web开发常用对象,实现与浏览器的交互,所以jsp也是一种动态web资源开发技术。

2,JSP内置对象和属性

1.request对象

①概念

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

②编码方式

HttpServletRequest. getParameter获取的参数由客户端浏览器和Web容器配置共同决定编码。
浏览器根据html中指定的编码格式进行编码,tomcat根据指定的格式进行解码:
浏览器根据jsp页面开头声明的编码方式对request中参数编码;
tomcat默认解码是ISO-8859-1, 但是我们可以显示指定解码格式通过调用 request.setCharacterEncoding(“UTF-8”),或者修改tomcat的配置文件server.xml中的编码,添加uriEncoding属性。

③HttpServletRequest类功能

1.读取和写入HTTP头标
2.取得和设置cookies
3.取得路径信息
4.标识HTTP会话

2.response对象

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。

3.session对象

session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.

4.out对象

out对象是JspWriter类的实例,是向客户端输出内容常用的对象

5.page对象

page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例

6.application对象

application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
7.exception对象
exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
8.pageContext对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
9.config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

3,会话跟踪实现

1) Cookies

Cookies是使用最广泛的会话跟踪机制,Cookies是有服务器创建,并把Cookies信息保存在用户机器上的硬盘上,下次用户再次访问该站点服 务器的时候,保存在用户机器上硬盘的Cookies信息就被送回给服务器。一般Cookies一般不多于4KB,且用户的敏感信息如信用卡账号密码不应该 保存在Cookies中。

2)URL重写

URL重用户在每个URL结尾附加标识回话的数据,与标识符关联的服务器保存有关与会话的数据,如我们访问某个新闻的时候,在地址栏我们一般会看到这样的信息:http://www.XXX.com/news?id=??,通常的话id后面的问号表示该条新闻在后台数据库中的新闻表的id。URL重写能够 在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。

3)隐藏表单域

通常,在表单中我们使用隐藏表单域的时候会有这么一句代码:。通过给type属性赋值为hidden值来实现隐藏,这样用户在浏览的时候看不到这行代码的数据,但是当用户通过查看 源代码还是可以看到的。

4)Session机制

这个机制要慎用,特别是对于访问量很大的站点,因为这种机制是吧Session信息保存在服务器端。如果访问量特别大的话,对于服务器的承受力的要求有多高是可想而知的。

4,Cookie操作

cookie是一种常见的在页面之间传递数据的过程。Cookie是一个小的文本数据,由服务器端生成,发送给客户端浏览器,客户端浏览器如果设置为启用cookie,则会将这个小文本数据保存到某个目录下的文本文件内,下次登录同一网站,客户端浏览器自动将cookie读入。

5,JavaBean

1)概念

1)必须实现Serializable接口
2)没有public类型的类变量
3)具有无参数的构造器
4)具有公开的getters和setters方法

2)定义方法

①直接在JSP中实例化JavaBean

这是在JSP中使用Java代码,不提倡

<%
  Student student=new Student();
  //下面就可以使用实例化的student
%>

②使用标签

<jsp:useBean id="?" class="?" scope="?"></jsp:useBean>
//指明这个对象设置在哪个内置对象中(如果scope缺省则,默认为放在page中)

③JavaBean的scope范围

i> page:表示JavaBean对象的作用范围只是在其实例化的页面上,只有在当前页面可用,在其他页面不可用。
ii> request:表示JavaBean实例除了可以在当前页面上可用之外,还可以在通过forward
iii> session:表示JavaBean对象可以存在session中,该对象可以被同一个用户一次会话的所有页面认识到。(要保证是同一个客户端,session才可以的)
iv> application:表示JavaBean对象可以存在application中,该对象可以被所有用户的所有页面认识到。

3)设置JavaBean属性

<jsp:setProperty name="?" property="?" value="?"></jsp:setProperty>
//property  表示对象的其中一个属性

4)获取JavaBean属性

<jsp:getProperty name="?" property="?"></jsp:getProperty>

6,Servlet

1)生命周期

Servlet的生命周期一般可以用三个方法来表示:

    init():仅执行一次,负责在装载Servlet时初始化Servlet对象
    service() :核心方法,一般HttpServlet中会有get,post两种处理方式。在调用doGet和doPost方法时会构造servletRequest和servletResponse请求和响应对象作为参数。
    destory():在停止并且卸载Servlet时执行,负责释放资源 

初始化阶段:Servlet启动,会读取配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,将ServletConfig作为参数来调用init()方法。
这里写图片描述

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
1.加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet
2.创建:通过调用Servlet的构造函数来创建一个Servlet实例
3.初始化:通过调用Servlet的init()方法来完成初始化工作,这个方法是在Servlet已经被创建,但在向客户端提供服务之前调用。
4.处理客户请求:Servlet创建后就可以处理请求,当有新的客户端请求时,Web容器都会创建一个新的线程来处理该请求。接着调用Servlet的
Service()方法来响应客户端请求(Service方法会根据请求的method属性来调用doGet()和doPost())
5.卸载:容器在卸载Servlet之前需要调用destroy()方法,让Servlet释放其占用的资源。

2)多线程机制

在不关闭服务器的情况下,若干次访问只创建一个对象,很多用户访问的时候,会不会造成等待?
解:不会的,因为Servlet采用的是多线程机制,每一次请求,系统就会分配一个线程来运行doGet函数,但是这样也会带来安全问题,一般说来,不要在Servlet内定义成员变量,除非这些成员变量是所有的用户公用的。

3)获取对象的方法

(1)获取out对象:PrintWriter out=response.getWriter()
(2)获取request和response对象:
(3)获得session对象:HttpSession session=request.getSession()
(4)获得application对象:ServletContext application=this.getServletContext()

4)在Servlet中设置和读取参数

①设置参数

设置全局参数:所有的Servlet都可以访问该参数

  参数名
  参数值

设置局部参数:只有本Servlet可以访问该参数

  Servlet名称
  Servlet类路径
  
  参数名
  参数值

②获取参数

获取全局参数:

ServletContext application=this.getServletContext(); 
application.getInitParameter(“参数名称”);

获取局部参数:

this.getInitParameter(“参数名称”);

5)Servlet内实现跳转

①重定向(对应JSP内置对象中的sendRedirect)

response.sendRedirect(“URL地址”);

②服务器内跳转(对应于JSP中的forward标签):

ServletContext application=this.getServletContext();
RequestDispatcher rd=application.getRequestDispatcher(“URL地址”);
rd.forward(request,response);

一般情况下,当不需要传递参数或者需要跳转到另一个服务器页面时使用重定向,当需要从A页面跳转到B页面时,存在着大量的暂态数据(即在B页面显示过后就可以不用的数据),为了节省内存,可以使用forward,可以避免把很多内容存储在session中。

③Forward和Redirect的区别

response.sendRedirect与两种跳转方式的区别:
(1)从浏览器的地址显示上来看:
  forward方法属于服务器端去请求资源,服务器直接访问目标地址,并对该目标地址的响应内容进行读取,再把读取的内容发给浏览器,因此此时客户端浏览器的地址不变。
  而redirect是告诉客户端,使浏览器知道去请求哪一个地址,相当于客户端重新请求一遍,所以地址栏会改变。
(2)从数据共享上来看:
  forward转发的页,以及转发到的目标页能够共享request里面的数据,而redirect转发的页以及转发到的目标页不能共享request里面的数据。
(3)从功能上来看:
  redirect能够重定向到当前应用程序的其他资源,而且能够重定向到同一个站点上的其他应用程序中的资源。
  forward方法只能在同一个web应用程序内的资源之间转发请求,则可以理解为服务器内部的一种操作。
(4)从效率上来看:
forward效率较高,因为跳转仅仅发生在服务器端。
redirect相对较低,因为类似于再进行一次请求。

6)HttpServlet容器响应Web客户请求流程如下:

  1. Web客户向Servlet容器发出Http请求;
  2. Servlet容器解析Web客户的Http请求;
  3. Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
  4. Servlet容器创建一个HttpResponse对象;
  5. Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
    doGet() 或 doPost() 是创建HttpServlet时需要覆盖的方法
  6. HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
  7. HttpServlet调用HttpResponse的有关方法,生成响应数据;
  8. Servlet容器把HttpServlet的响应结果传给Web客户。

7,JSTL声明的核心标签库:

<%@ taglib prefix=”c” uri=”https://java.sun.com/jsp/jstl/core” %>
核心标签库:
(1)表达式操作:
显示数据的内容;
对变量或者JavaBean的变量属性进行赋值;
删除存在于scope中的变量。
(2)流程控制:
用于简单的条件语句;
与以及这三个标签通常会一起使用,用于复杂语句的判断;
为循环控制标签,功能是将集合中的成员顺序浏览一遍,在实际应用开发中,使用频率最高;
标签是用来浏览字符串里的所有成员,其成员是用分隔符delims所分隔的。
(3)迭代操作:
(4)URL操作。

8,Ajax(Asynchronous JavaScript and XML)

1)概念

当一个异步过程调用发出后,调用者不需要立刻得到结果,可以继续做自己的事情,等到过程调用完毕,再通过回调函数通知调用方。而在同步情况下,调用方必须等待对方得到结果,才能继续运行。
Ajax包含以下5部分:
(1)异步数据获取技术:使用XMLHttpRequest,(它是所有技术的基础)
(2)基于标准的表示技术:使用XHTML与CSS
(3)动态显示和交互技术:使用Document Object Model(文档对象模型)
(4)数据互换和操作技术:使用XML与XSLT
(5)JavaScript:将以上的技术融合在一起

2)实现

实现Ajax程序的5个核心步骤:
(1)在IE中实例化Msxml2.XMLHTTP对象:
var xmlHttp=new ActiveObject(“Msxml2.XMLHTTP”);
Msxml2.XMLHTTP是IE浏览器内置的对象,该对象具有异步提交数据和获取结果的功能,如果不是IE浏览器,则实例化方法如下:

<script type=”text/javascript”>
Var xmlHttp=new XMLHttpRequest();
</script>

(2)指定异步提交的目标和提交方式,调用了xmlHttp的open方法:
xmlHttp.open(“get”,”info.jsp”,true);此方法共单个参数,参数1表示请求的方式,参数2表示请求的目标是info.jsp,参数3为true时表示异步请求,为false表示非异步请求。
注意:此时知识指定异步提交的目标和提交方式,并没有进行真正的提交。
(3)指定当xmlHttp状态改变时,需要进行的处理,处理一般是以相应函数的形式进行:

xmlHttp.onreadystatechange=function(){
  //处理代码
}

该代码中用到了xmlHttp的onreadystatechange事件,表示xmlHttp状态改变时,调用处理代码。也可以直接将处理代码单独写成函数。
(4)编写处理代码:

xmlHttp.onreadystatechange=function(){
  if(xmlHttp.readyState==4)
  infoDiv.innerHTML=xmlHttp.responseText;
}

(5)发出请求,调用xmlHttp的send函数:

xmlHttp.send();

3)优缺点

优点:
(1)减轻服务器负担,避免整个浏览器窗口刷新的时造成的重复请求。
(2)带来更好的用户体验。
(3)进一步促进页面呈现和数据本身的分离。
缺点:
(1)对浏览器有一定的限制,对于不兼容的浏览器,无法使用。
(2)Ajax没有刷新按钮,浏览器上的“后退”按钮是失效的,因此,客户经常无法回退到以前的操作。

9,MVC(Model、View、Controller)

软件开发过程中比较流行的设计思想,基于该思想,将JSP拆成三个模块来实现,首先,编写JSP,负责输入查询代码,提交到Servlet,Servlet进行安全验证,调用DAO来访问数据库,得到结果,跳转到JSP显示。
我们可以从这种设计思想上发现:程序被分成了不同的模块,显示、业务逻辑、过程控制相互独立,使得软件在伸缩性和可维护性方面有了很大的优势。
M(Model),封装应用程序的数据结构和事务逻辑,集中体现应用程序的状态,当数据状态改变的时候,能够在视图中体现出来,JavaBean适合这个角色。
V(View),是Model的外在表现,模型状态改变时,有所体现,JSP非常适合这个角色。
C(Controller),对用户的输入进行响应,将模型和视图联系到一起,负责将数据写到模型中,并调用视图,Servlet适合这个角色。

10,三大框架

11,三大器

猜你喜欢

转载自blog.csdn.net/SunshineTan/article/details/78645157
今日推荐