https://blog.csdn.net/s_king_/article/details/78612905
Object Oriented Analyzing 面向对象分析
Object Oriented Design 面向对象设计
Object Oriented Programming 面向对象编程(或者有的就叫面向对象程序设计,我理解为编码实现)
OOA的主要工作是软件的需求,对要解决的问题进行分析,同时建立一些对象的模型,涉及到
①对象属性;
②对象和类的静态结构;
③对象和类动态结构(如状态图);
OOD的主要工作是使用OOA的结果,将OOA得出的问题,给予设计方案解决。
这一阶段需要做的是对软件系统的设计和规划,包含的工作为:
①问题域部分的设计;
对OOA的对象和类的模型进行细致修改,详细考量类的属性、删除不必要的类、抽象需要的继承层次、组织对象的包含结构、对象间消息的传递方式和整体消息顺序安排;
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
1.什么是面向对象技术?
面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。它具有抽象性、封装性、继承性及多态性。
面向对象与面向过程程序设计有如下不同:
(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。 函数与数据是否分离
(2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。
(3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。 预定顺序;由运行时各种事件的实际发生来触发
(4)面向对象程序设计方法可以利用框架产品(如MFC,Microsoft Foundation Classes)进行编程。 面向对象可利用框架 面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态。
https://blog.csdn.net/jurson99/article/details/40222745?utm_source=blogxgwz0
表示用例和对象之间的使用过程和时间顺序
UML建模图形中用例和对象的行为中的各个活动之间通常具有时间顺序。
* JDBC中的主要类(接口)*
在JDBC中常用的类有:
DriverManager;
Connection;
Statement;
ResultSet。
1 DriverManager
其实我们今后只需要会用DriverManager的getConnection()方法即可:
1. Class.forName(“com.mysql.jdbc.Driver”);//注册驱动
2. String url = “jdbc:mysql://localhost:3306/web08”;
3. String username = “root”;
4. String password = “root”;
5. Connection con = DriverManager.getConnection(url, username, password);
https://blog.csdn.net/Anarkh_Lee/article/details/79844430
实现Servlet的三种方式:一个实现,两个继承
* servlet的执行过程:
* 1.创建servlet对象(Tomcat执行)
* 2.第一次访问servlet时执行
* init()方法 该方法只执行一次
* service()方法
* 3.之后每访问一次 就执行一次service()方法
* 4.关闭服务时调用destroy()方法 该方法只执行一次
*servlet的服务周期
*1.创建
*2.初始化
*3.服务
*4.销毁
https://www.cnblogs.com/panxinqi/p/6647464.html
首先重定向跟转发都是服务器端的概念,而表单提交跟超链接都是客户端的概念。
(1)表单提交跟超链接
request的作用域是一个请求,如果要传request里的值的话,第一种方式就是表单提交,get或者post方式都可以,还有一种就是forward转发
request.setAttribute(“name”, “Anna”);
然后转发出去
a:href超链接它的确是一个请求,但是它默认的是get方式,如果想要传值的话,就要写清楚请求参数,所以改成
才可以
输出这样写<%=request.getParameter("jstl2")%>就对啦。
(2)重定向跟转发的区别
重定向跟forward转发不同,它会丢失所有的请求参数和request范围的属性
因为重定向会生成第二次请求,与前一次请求不在同一个request范围内
response对象
HttpServletResponse提供了一个sendRedirect(String path)方法,用于重定向到path资源,重新向path资源发送请求。
执行重定向动作的时候,地址栏的URL会变成一个重定向后的目标地址
https://blog.csdn.net/yolanda_nuonuo/article/details/77069703
JSP中九大内置对象为:
request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request
response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page
pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page
session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session
application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application
out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page
config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page
page 页面对象 类型 javax.lang.Object 作用域 Page
exception 例外对象 类型 javax.lang.Throwable 作用域 page
作用:
request 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象
常用的方法有:getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。
response 对象代表的是对客户端的响应,也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用
pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性
常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理
session 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。
概要
HTTP是无状态(stateless)协议;
Web Server 对每一个客户端请求都没有历史记忆;
Session用来保存客户端状态信息;
由Web Server 写入;
存于客户端;
客户端的每次访问都把上次的session记录传递给Web Server;
Web Server读取客户端提交的session来获取客户端的状态信息
application 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。
out 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法
“config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数
“page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。
“exception” 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用
四个作用域:
何为作用域
先让我们看看效果:
大概流程是这样的,我们访问04-01/index.jsp的时候,分别对pageContext, request, session,
application四个作用域中的变量进行累加。(当然先判断这个变量是不是存在,如果变量不存在,则要
把变量初始化成1。)计算完成后就从index.jsp执行forward跳转到test.jsp。在test.jsp里再进行一次
累加,然后显示出这四个整数来。
从显示的结果来看,我们可以直观的得出结论:
page里的变量没法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。
request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。
session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问
这页,session里的变量就重新计算了。
application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。
而作用域规定的是变量的有效期限。
如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。
从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。
所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使
用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。
所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个
请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被
称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。
整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务
器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。
application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。
与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application
中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page, request,
session都是完全隔离的,无论如何修改都不会影响其他人的数据。
我们使用public Object getAttribute(String name)获得变量值,使用public void setAttribute
(String name, Object value)将变量值保存到对应作用域中。举个pageContext的例子就是:
// page
Integer countPage = (Integer) pageContext.getAttribute("countPage");
if (countPage == null) {
pageContext.setAttribute("countPage", 1);
} else {
pageContext.setAttribute("countPage", countPage + 1);
}
这里先从pageContext中取出名为countPage的整数,因为返回的都是java.lang.Object类型,所以需要强
制转换成我们需要的整形。这里取得的变量如果不存在就会返回null,通过判断countPage == null来辨
别变量是否存在,如果不存在就设置为1,如果存在就进行累加,最后使用setAttribute()方法将修改后
的变量值放入pageContext。
将其中的pageContext换成request, session, application就可以操作其他三个作用域中的变量。
这边如果要看到对应的类的定义,或者service方法的定义实现等的话,需要到网上下载源码,解压之后有个java文件夹,根据eclipse里面的提示,加载一下,不然看不到源码。下载地址:http://tomcat.apache.org/download-80.cgi。
问题:
问题1:我们提交请求时,为什么get请求就会调用doGet方法,post请求,会调用doPost方法?
问题2:为什么我们重写时,只重写了无参数的init方法,不需要重写有参数的init?
在我们Servlet接口中定义了三个方法.
init(ServletConfig config)
service()
destroy();
问题1解决:
是因为在HttpServlet的service方法中,它进行了重写,重写后分根据请求方式不同,调用不同的方法.
String method=request.getMethod();
if("get".equals(method)){
doGet();
}else if("post".equals(method)){
doPost();
}
问题2解决:
在GenericServlet 中定义了一个无参数init方法,重写Servlet接口中的init(ServletConfig config)方法.
当servlet对象创建后会调用有参数的init方法。在有参数的init方法中又调用了无参数的init方法。
对于我们来说,我们只需要重写无参数的init就可以。
Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示
Servlet的生命周期包含了下面4个阶段:
1.加载和实例化
2.初始化
3.请求处理
4.服务终止
Web服务器在与客户端交互时Servlet的工作过程是:
1.在客户端对web服务器发出请求
2.web服务器接收到请求后将其发送给Servlet
3.Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器.
4.web服务器将从Servlet实例对象中收到的响应结构发送回客户端.
生命周期:
1.加载和实例化
2.初始化
3.请求处理
4.服务终止
https://www.cnblogs.com/lgk8023/p/6427977.html