zoukankan      html  css  js  c++  java
  • 12.19基本概念

    1.泛型:参数化类型,List<String> list= new ArrayList<String>();// 里面放的都是相同的基本类型,存储方便,不会造成数据类型的混乱
    2.向上转型:子类转为父类,A a = new B();// 父类的引用指向子类对象,有人说这不是多此一举吗,直接可以B b = new B();// 是的,可以这样,但是这样丧失了降低了面向对象编程的特色,降低了可扩展性。
    向上转型遗失了同父类不同的方法,即对父类相同的方法,子类进行了该方法的重写。

    3.内省机制:内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。
    通过 getName/setName 来访问 name 属性,这就是默认的规则。
    Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要了解这个规则(但你最好还是要搞清楚),
    这些 API 存放于包 java.beans 中。
    使用内省机制将表单中的数据映射到类的属性上
    Web 开发框架 Struts 中的 FormBean 就是通过内省机制来将表单中的数据映射到类的属性上,因此要求 FormBean 的每个属性要有 getter/setter 方法。但也并不总是这样,什么意思呢?
    就是说对一个 Bean 类来讲,我可以没有属性,但是只要有 getter/setter 方法中的其中一个,那么 Java 的内省机制就会认为存在一个属性,比如类中有方法 setMobile ,那么就认为存在一个 mobile 的属性。

    4.反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
    对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制

    PageEncoding是jsp文件本身的编码
    contentType的charset是服务器发送给浏览器的内容编码
    Service没有做处理,主要是Dao对数据进行了处理,在Service中创建一个Dao对象,生成对象的get和set方法。
    在重载函数中,写Dao对象的具体方法(主要实现了什么功能),在将JavaBean对象作为参数放进去

    使用Action将表单提交的数据存储到数据库中的流程及内容:
    主要的的逻辑:前台的jsp的Form调用Action的具体方法,Action中通过定义和页面具有相同元素的私有变量(生成get和set方法可以拿到前台变量),然后调用dao存储到数据库中
    1.struts.xml:采用通配符配置action
    2.前台页面addTest.jsp:定义表单变量,name=a,name=b,name=c
    3.TestAction动作类的编写:构造私有变量:a,b,c,list(List<TestProtal>),私有service对象。此时,在具体的动作方法中编写动作逻辑,由于我是想要把JavaBean中的数据存起来,
    首要要建议一个JavaBean对象,通过这个JavaBean对象获取属性值,之后将这个对象作为参数传递到service的具体方法中(service.add(b))
    4.bean TestProtal和数据表相对应:JavaBean实现Serializable接口,属性私有a,b,c,生成get和set方法.此时就要建立数据库中的字段
    5.service和dao:主要是dao,service没有做实质性处理,可以认为是action和dao的功能链接
    1)TestDaoImpl:数据库查询操作
    2)service:没做处理,因为它是中间件,那么将action封装的数据传递给dao的中间过程,在service中建立的是dao的对象,将JavaBean给dao

    Maven:专家内行
    war:web application archive 叫做web应用程序存档,将应用程序打包,发布到服务器的最好方式
    <form action="/day_01/AServlet">:在客户端的/相当于主机:http://127.0.0.1:8080/
    <url-partten>/AServlet:在服务器端相当于项目:http://127.0.0.1:8080/day_01/

    请求转发,响应重定向
    转发是服务器根据请求转发到别的服务,是requset对象,一次请求,一次响应,地址栏不发生变化
    requset.getRequestDispatcher("/AServlet").forword(request,response) ===>http://127.0.0.1:8080/day_01/AServlet
    重定向,是服务器发起的重定向,用的response对象,两次请求,两次响应,地址栏发生变化
    response.sendRedirector("/AServlet")

    ervlet请求转发与重定向的区别:
    request.setAttribute("test","hello");
    request.getRequestDispacther("/test.jsp").forword(request,response);
    response.sendRedirect("test.jsp");

    一、显示结果:
    1、当用request.getRequestDispacther("/test.jsp").forword(request,response); 请求转发后,结果页面输出:hello

    2、当用response.sendRedirect("test.jsp");重定向后,结果页面输出:null


    二、底层分析:

    1、请求转发(RequestDispatcher)的过程:


    客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的test.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。

    2、重定向(sendRedirect)的工作原理:


    客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问test.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求test.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。


    三、表面分析:

    1、当用RequestDispatcher请求转发后,地址栏为http://localhost:8080/test/TestServlet
    这真好应正了上面的分析,我们起初请求的就一个servlet,至于你服务器端怎么转,流程怎么样的,我客户端根本就不知道,我发了请求后我就等

    着响应,那你服务器那边愿意怎么转就怎么转,我客户端不关心也没法知道,所以当服务器端转发到jsp后,它把结果返回给客户端,客户端根本就

    不知道你这个结果是我真正访问的servlet产生的,还是由servlet转发后下一个组件产生的。

    2、当用sendRedirect重定向后,地址栏为http://localhost:8080/test/test.jsp
    因为这个时候,客户端已经知道了他第二次请求的是test.jsp,服务器已经告诉客户端要去访问test.jsp了,所以地址栏里会显示想要访问的结果。

  • 相关阅读:
    Linux systemtap定位系统IO资源使用情况(ok)
    DISK 100% BUSY,谁造成的?(ok)
    容易被误读的IOSTAT
    利用BLKTRACE分析IO性能
    iowait 过高问题的查找及解决linux
    top后台执行显示:top: failed tty get 错误
    Nginx解读内置非默认模块 ngx_http_stub_status_module
    Nginx健康检查模块
    平滑升级你的Nginx
    Practice telephone techniques
  • 原文地址:https://www.cnblogs.com/demo-deng/p/8066629.html
Copyright © 2011-2022 走看看