控制层

servlet

详细知识点可以见博客:
http://www.cnblogs.com/xdp-gacl/p/3855702.html
J2SE里面 sun提供了一系列的jar包(提供了一些具体的类)用的最多的是rt.jar,到了J2EE就不提供了具体的jar包了,而是一系列的标准(接口)。但是它不提供具体的jar包,那去哪里找那些具体的实现类呢,谁实现了就用谁的。
就好比JDBC标准,谁实现了JDBC的接口,就用谁的开发包。用mysql oracle的都可以。
那servlet的这些标准被谁实现的,就是tomcat。那些实现的类库就是tomcat lib下的servlet-api.jar。这里面就是servlet的具体的实现。。 总之,servlet-api.jar这个jar包就是对servlet API文档的实现。。

servlet是可以在任何服务器端运行的小程序。。而我们现在写的servlet是在HTTP服务端运行的。
现在用的是HTTPServlet,它是一个专门给web server使用的一个servlet。

这里写图片描述

从接口上来说,servlet是鼻祖。从类上来说,GenericServlet是鼻祖。

这里写图片描述

HttpServlet – 是被容器调用的,当客户端去请求一个URL地址的时候被调用。
既然它是被容器(也就是tomcat)调用,那就要把servlet放到tomcat里面去,怎么放?把编译好的class文件考到webapps下WEB-INF class目录下。
那怎么定义什么url地址才能访问到servlet呢,就在web.xml中定义:
servlet-mapping 这个叫映射,什么是映射? 就是客户端url写什么才会去访问这个servlet,在url-pattern里面写。

被容器调用就是调用方法,容器会自动调用service方法,service方法再去调doGet和doPost。get请求就是调用doGet,post就是doPost。什么是get方式,直接敲入url地址就是get方式。什么时候是post,form里面点提交,并且method是post的时候才是post方式。

servlet声明周期:
加载:classloader把class load到内存。
实例化:new 自己这个servlet的对象
初始化:调用init(ServletConfig config) 方法。
处理请求:service(),  对于HttpServlet 来说,它会去调用doGet 或者 doPost
退出服务:destory() 。。。
全程只有也给对象

关于ServletConfig:顾名思义这是servlet的配置,就是初始化servlet的时候告诉servlet 配置是怎么配进来的。怎么配的呢?就是web.xml,所以ServletConfig这个对象里面保存着servlet的配置信息。

get方式:参数直接跟在URL后面
post方式:参数不跟了。

public class HelloWorldServlet extends HttpServlet{

    public HelloWorldServlet() {
    }

    @Override
    public void destroy() {
        System.out.println("destory");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init");
    }

    /**
     * 客户端发请求给服务器,然后服务器会调用servlet。服务器就要把接收到的内容传给servlet,
     *而HttpServletRequest这里面封装了客户端的一系列请求,比如传了哪些参数,IP是什么,都可以通过这个对象拿到
     * req 是实现了HttpServletRequest接口的一个对象。
     * @param req
     * 而resp里面封装了给客户端的信息。往resp里面写东西,实际上会写在客户端。。
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //指明resp的东西要当成html去解析,而不是纯文本去解析。编码是
        resp.setContentType("text/html;charset=gb2312");
        System.out.println("doGet");
        //返回的是一个PrintWriter,输出流(从程序中出去)。
//        resp.getWriter().write("<a href='http://www.baidu.com'>hao</a>");
        PrintWriter pw = resp.getWriter();
        pw.println(req.getParameter("d") );


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

Cookie – 记录在客户端的
HTTP协议是无连接性的。什么意思?当我们从服务器上拿下来文件内容的时候,这个连接就断了。
比如在网站A买了本书,在网站B就能看到买的什么书。这就是cookies。有的网站会要求你打开cookies,否则没法使用。
cookie就是解决这个的,它是S写到C的小文本的信息。。
规则:1、服务端把一些东西写在客户端。
2、服务端只能写文本文档,其他的不允许写。3、客户端可以阻止服务器写入。(IE就可以限制)4、只能拿自己webapplication写入的东西。5、分两种,属于窗口/子窗口的,和属于文本文件的。6、一个servlet/JSP设置的cookie能够被同一个路径或者是自路径下的servlet/JSP读取到。(这里的路径是URL,而不是真实的路径)

这里写图片描述

cookie分两种:一种是写在文件里。一种是写在内存里,只要这个窗口关掉,这个cookie就没了,别的窗口也无法访问,但是在原窗口基础上打开的窗口是可以访问的,他们存在父子关系。
没setMaxAge的就存在内存中。
这里写图片描述


Session – 记录在服务器端的,session中可以存任何东西,只有你这个窗口(子窗口)可以访问,其他窗口无法访问。

在服务器端开辟一块内存,这就是session,这块内存是跟客户端关联在一起的。
1、什么时候开辟内存,HttpSession session = req.getSession();这句话发生的时候开辟。
2、session的2种实现方式:第一个、把session ID放在cookie里面,这是写在内存中的这种方式(这种依赖于cookie),第二个、如果不支持cookie,就要重写URL来实现session。resp.encodeURL() ..
resp.encodeURL()两个作用。一转码,而是在URL后面加入sessionID。

3、两个窗口的sessionID号不会相等的,一个窗口对应着一个session。除非是子窗口。
4、不同路径或者父路径不能访问的问题,在session中不存在。规则见下图

这里写图片描述
这里写图片描述


application – 多个窗口(多个客户端)是共享这个对对象的值的。
需要一些东西放在内存里,让所有的客户端都可以共享,那就要放在application里。
context和web application是对应的,上下文的意思。。
这里写图片描述

这里写图片描述

bean

就是java类。从面向对象的思维去写类的时候,应该把类的属性封装起来,设成私有。如果要访问,就通过get set方法来实现,一个读一个改。如果只想让别人读不让改,就只提供get就行,这个在String的源码中有体现。。

JSP

就是servlet,具有servlet都具有的东西。
加感叹号!是成员变量,不加是局部变量。同一个对象的成员变量是同一个,就会++了,局部变量每次都声明,每次都是0.。
这里写图片描述

springMVC

springMVC方面的官方文档就在spring的文档里面《spring-framework-reference.pdf》

图中的知识点补充:
1.图中,1、的a) servlet也可以做。strut2就是b 和 c一起做了。。。
2.基于请求响应的mvc框架很多:strut2,springMVC,等
3.其他mvc框架的测试比较麻烦,要启动服务器之类的,但是springMVC可以用junit测试
4.控制器是干嘛的? 就是请求来了,通过映射,控制请求具体到哪个类去处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值