javaee总结

HTTP协议

HTTP协议 超文本传输协议,主要是用来传输文本、音频、视频、图片等资源信息。

协议就是一个条款,甲方应该尽什么样的义务,有什么权力;乙方应当尽什么样的义务,有什么样的权利
本质:发送怎么发送,接收怎么接收,都要遵守这个规定

传输包括请求行(协议等),请求头,请求体
响应包括响应行,响应头,响应体

工作流程
工作流程:

以在浏览器窗口输入http://www.baidu.com为例

1.域名解析():最终结果就是将域名转成ip地址。

2.建立一个可靠连接:TCP三次握手。为什么要进行三次握手?网络通讯的不可靠性。

3.发送HTTP请求(HTTP请求和HTTP协议是什么关系呢?HTTP协议就是用来规范HTTP请求应该怎么发,HTTP响应应该怎么发,应该具有某种规则,这样才可以正常地进行解析),比如

提交方式
GET和POST请求方式的区别就在这吗?

注意,GET和POST请求方式的区别不是因为这个,这个仅仅是浏览器的行为。

真正的区别是在于语义的区别

制定这两个请求方法的时候,就规定

GET的语义就是用来获取资源,比如说你看到一个商品想分享给别人

POST的语义就是用来提交数据,注册、登录

Servlet

合成词。Servlet = Server + applet。服务器上面的一个小程序。

工作流程

  <servlet>
        <servlet-name>second</servlet-name>
        <servlet-class>com.cskaoyan.servlet.SecondServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>second</servlet-name>
        <url-pattern>/second</url-pattern>
    </servlet-mapping>

1.请求到达服务器tomcat之后,被监听80端口的Connector接收到,将其解析成为Request对象,同时还生成一个Response对象

2.将这两个对象传给Engine,Engine挑选一个Host进行后续逻辑处理

3.Host来挑选一个合适的Context来处理,将这两个对象交给app Context来处理

4.web.xml中配置了一个映射关系,tomcat在启动的时候,Context可以拿到对应的映射关系。

/first    FirstServlet

根据有效请求/first去寻找有没有对应的class,找到FirstServlet.class

利用反射实例化该对象  Class.forName.newInstance

执行该对象的service方法。-----因为它时Servlet,实现了Servlet接口,肯定有service方法

5.Context处理完毕之后,依次返回两个对象给Host、Engine、Connector,Connector读取Response里面的数据生成响应报文,发送出去

url-pattern

1.一个servlet可以设置多个url-pattern吗?可以

servlet>
    <servlet-name>life</servlet-name>
    <servlet-class>com.cskaoyan.servlet.life.LifeCycleServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>life</servlet-name>
    <url-pattern>/life1</url-pattern>
    <url-pattern>/life2</url-pattern>

</servlet-mapping>

@WebServlet(value = {"
    life1","/life2"},loadOnStartup = 1)

缺省Servlet
为什么我们设置了/ *之后,显示的就是/ * 而不再是原先的jsp了呢?

原先是因为 / 的优先级高于 * .jsp,始终无法访问到jspServlet

/* /同时存在,无论访问jsp还是访问html均无法正常访问,显示的均是 / *

/ *注释之后,jsp可以正常访问到,但是html仍然无法正常访问到,显示的是 /

/其实是一个缺省servlet,当一个请求到达应用,如果没有任何的servlet的url-pattern可以i处理该请求,那么就会调用缺省servlet来处理。

结论:访问静态资源时,有没有servlet参与进来?有servlet参与进来,那就是缺省servlet。

ServletContext

再每一个应用中,有且只有一个servletContext对象,当前应用下的任何的servlet都可以拿到该context对象的引用。

主要代码

//获得初始化参数
ServletContext servletContext = getServletContext();
String name = servletContext.getInitParameter("name");
System.out.println(name);

web.xml

<context-param>
     <param-name>name</param-name>
     <param-value>shuaige</param-value>
</context-param>

context域
一块内存空间,可以再这快内存空间里面进行数据的共享。比如局域网 27th 26th

ServletContext servletContext = getServletContext();
servletContext.setAttribute("key", "ligenli");
//只要再一个应用中,不管任何servlet,拿到的全部都是同一个servletContext对象的引用
ServletContext servletContext = getServletContext();
String key = (String) servletContext.getAttribute("key");
System.out.println(key);

image

获取EE项目绝对路径

    //servletContext可以给我们提供一个API,利用这个API可以获取到EE项目文件的绝对路径
        ServletContext servletContext = getServletContext();
        //如果里面什么参数都不输入,这个时候可以定位到应用部署根目录
        //如果你希望获取部署根目录下的任何一个文件的路径信息,只需要指明它和部署根目录之间的相对路径关系即可
        String realPath = servletContext.getRealPath("");
        System.out.println(realPath);

cookie是一小部分数据,服务器产生给客户端,客户端再次访问会携带这部分数据

优势:很轻便、使用的话也很方便,数据存储在客户端,服务器压力小一些

劣势:数据存储在客户端,数据安全性就比较低,cookie一般只存储一些非敏感数据;只能存储字符串类型,受限;大小一般4kb

 Cookie cookie = new Cookie("username", username);
 response.addCookie(cookie);
 
 response.setContentType("text/html;charset=utf-8");
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for (Cookie cookie : cookies) {
                if("username".equals(cookie.getName())){
                    response.getWriter().println("欢迎您, " + cookie.getValue());
                }
            }
        }

session

服务器技术。数据的产生以及保存都是在服务器里面进行的。Session可以保存Object

客户端在访问服务器时,服务器会给当前的客户端开辟一块内存空间,这块内存空间专门用来给这个客户端服务,后续关于这个客户端的任何数据的共享都可以在这个区域里面进行。如何绑定呢?

可以利用cookie来传输内存空间(对象 Session)的唯一标识码 JSESSIONID。

 HttpSession session = request.getSession();
 session.setAttribute("username", username);
 String username = (String) session.getAttribute("username");
 request.getSession().invalidate();
posted @ 2022-07-30 17:15  拿受用  阅读(68)  评论(0编辑  收藏  举报