当前位置:   article > 正文

Servlet和JSP重点总结_从浏览器地址栏键入url发起请求到服务器响应数据,中间servlet和jsp都干了啥

从浏览器地址栏键入url发起请求到服务器响应数据,中间servlet和jsp都干了啥

一、JavaWeb互联网通信流程图

最终版互联网通信流程图

二、Servlet作用

  1. 在Servlet规范中,指定【动态资源文件】开发步骤
  2. 在Servlet规范中,指定Http服务器调动动态资源文件规则
  3. 在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则

三、Servlet接口实现类开发步骤

  1. 创建一个java类继承与HttpServlet父类,使之成为一个Servlet接口实习类
  2. 重写HttpServlet父类两个方法,doGet或doPost
  3. 将Serclet接口实现类信息注册到Tomcat服务区
    网站---->web----->WEB-INF----->web.xml

四、手动配置,Http服务器在启动时自动创建Servlet接口实现类的实例对象

<servlet>
	<servlet-name>OneServlet</servlet-name>
	<servlet-class>com.wangxiangqian.controller.OneServlet</servlet-class>
	<load-on-startup>3</load-on-startup>
</servlet>
  • 1
  • 2
  • 3
  • 4
  • 5

五、HttpServletResponse接口主要功能

  1. 响应对象将结果写入响应体

    //通过响应对象,向Tomcat索要输出流
    PrintWriter out = response.getWriter();
    
    //通过输出流将执行结果以二进制的形式写入响应体
    out.write(内容);
    out.print(内容);//实际开发中使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  2. 设置响应头中content-type属性值,从而控制浏览器使用对应编译器

    //设置响应头content-type,提示浏览器使用特定解析器
    response.setContentType("text/html;charset=utf-8");
    
    • 1
    • 2
  3. 设置响应头location属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发请求

    //通过响应对象,将地址赋值给响应头中location属性
    response.sendRedirect("http://www.baidu.com");//浏览器自动通过地址栏发起请求(get方式)
    
    • 1
    • 2

六、HttpServletRequest接口主要功能

  1. 可以读取Http请求协议包中【请求行】信息

    //读取url信息
    String url = request.getRequestURL().toString();
    
    //读取method信息
    String method = request.getMethod();
    
    //读取uri信息
    String uri = request.getRequestURI();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  2. 读取保存在Http请求协议包中【请求行】或者【请求体】中请求参数信息

    //通过请求对象获得请求头或者请求体中所有请求参数名
    Enumeration paramNames = request.getParameterNames();
    while(paramNames.hasMoreElements()){
    	String paramName = (String)paramNames.nextElement();
    	//通过name来取value
    	String value = request.getParameter(paramName);
    }
     
    //浏览器以post方式发送请求,请求参数保存在请求体,请求体二进制内容由当前请求对象(request)负责编码,request默认使用[ISO-8895-1
    //通知请求对象,使用utf-8字符集进行解码
    requset.setCharacterEncoding("utf-8");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  3. 可以代替浏览器向Http服务器申请资源文件调用

七、默认欢迎文件

<welcome-file-list>
	<welcome-file>login.html</welcome-file>
	
	<!--servlet作为默认欢迎资源时,开头斜线必须抹掉-->
	<welcome-file>user/find</welcome-file>
</welcome-file-list>
<!--自定义设置自定义默认文件定位规则,此时Tomcat自带定位规则将失效-->
<!--index.html  index.htm   index.jsp-->
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

八、Http状态码

  1. 1XX:最有特征100:通知浏览器本次返回的资源文件并不是一个独立的资源文件,需要浏览器在接收响应包之后,继续向Http服务器所要依赖的其他资源文件
  2. 2XX:最有特征的200:通知浏览器本次返回的资源文件是一个完整独立资源文件,浏览器在接收到之后不需要所要其他关联文件
  3. 3XX:最有特征的302:通知浏览器本次返回的不是一个资源文件内容,而是一个资源文件地址,需要浏览器根据这个地址自动发起请求来索要这个资源文件
  4. 4XX:
    1. 404:服务端没找到对应的资源文件
    2. 405:在服务端已经定位到被访问的资源文件(Servlet)但是这个Servlet对于浏览器采用的请求方式不能处理
  5. 5XX:500:在服务端已经定位到被访问的资源文件(Servlet)这个Servlet可以接收浏览器采用请求方式,但是Servlet在处理请求期间,有java异常导致处理失败

九、多个Servlet之间调用规则

  1. 重定向解决方案

    //通过响应对象,将地址赋值给响应头中location属性
    	response.sendRedirect("http://www.baidu.com");
    	//浏览器自动通过地址栏发起请求(get方式)
    
    • 1
    • 2
    • 3
  2. 请求转发解决方案

    //通过当前请求对象生成资源文件申请报告对象
    RequestDispartcher report = request.getRequestDispatcher("/资源文件名");
    //将报告对象发送给Tomcat(根据请求协议包决定请求方式)
    report.forward(当前请求对象,当前响应对象);
    
    • 1
    • 2
    • 3
    • 4

十、ServletContext接口

  1. 在Http服务器启动过程中,自动为当前网站在内存中创建一个全局作用域对象
  2. 在Http服务器运行期间,一个网站只有一个全局作用域对象
  3. 在Http服务器运行期间,全局作用域对象一直处于存活状态
  4. 在Http服务器准备关闭时,负责将当前网站中全局作用域对象进行销毁处理
//通过请求对象向Toncat索要当前网站的全局作用域对象
ServletContext application = request.getServletContext();

//将数据添加到全局作用域对象作为共享数据
application.setAttribute("key",数据);

//从全局作用域对象得到指定关键字对应数据
Object 数据 = application.getAttribute("key");

//从全局作用域中删除数据
application.removeAttribute("key");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

十一、Cookie

  1. 原理:
    1. 用户通过浏览器第一次向MyWeb网站发送请求申请OneServlet。OneServlet在运行期间创建一个Cookie存储与当前用户相关数据
    2. OneServlet工作完毕后,【将Cookie写入到响应头】交还给当前浏览器。
    3. 浏览器收到响应响应包之后,将cookie存储在浏览器的缓存
    4. 一段时间之后,用户通过【同一个浏览器】再次向【myWeb网站】发送请求申请TwoServlet时。【浏览器需要无条件的将myWeb网站之前推送过来的Cookie,写入到请求头】发送过去
    5. 此时TwoServlet在运行时,就可以通过读取请求头中cookie中信息,得到OneServlet提供的共享数据
    6. 一个Cookie中只能存放一个键值对,key和value只能是String,key不能是中文
    //创建一个cookie对象,保存共享数据(当前用户数据)
    Cookie card = new Cookie("key","abc");
    //将cookie写入响应头,交给浏览器
    response.addCookie(card);
    
    //调用请求对象从请求头得到浏览器返回的Cookie
    Cookie cookieArray[]  =  request.getCookies();
    //获取Cookie中的信息
    String key = cookieArray[0].getName();
    String value = cookieArray[0].getValue();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  2. 生命周期
    1. 默认情况下,Cookie对象存储在浏览器的缓存中,浏览去关闭,Cookie销毁
    2. 可以手动设置,要求Cookie存放在客户端计算机硬盘上,同时指定Cookie在硬盘上存活时间。
      //cookie在硬盘上存活1分钟
      cookie变量.setMaxAge(60);
      
      • 1
      • 2

十二、HttpSession接口

  1. 存放在服务端计算机内存中
  2. 可以存储任意类型的共享数据
  3. 使用map集合存储共享数据,所以可以存储任意数量共享数据
  4. 相当于客户在服务器端的私人保险柜
  5. 通过cookie将用户和HttpSession关联起来
//1.调用请求对象向Tomcat索要当前用户在服务端的私人储物柜
HttpSession session = request.getSession();
//2.将数据添加到用户私人储物柜
session.setAttribute("key1",共享数据);

//从会话作用域对象得到其他servlet提供的共享数据
Object 共享数据 = session.getAttribute("key1")

//取出session中所有的key取出来,存放一个枚举对象
Enumeration goodsName = session.getAttributeNames();
While(goodsName.hasMoreElements()){
	String goodsName = (String).goodsName.nextElement();
	int goodNum = (int)session.getAttribute(goodsName)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  1. getSession()和getSession(false)
    1. getSession():如果有储物柜,则返回,如果没有,则创建一个全新的储物柜
    2. getSession(false):如果有储物柜,则返回储物柜,如果没有者返回null
  2. HttpSession销毁时机
    1. 浏览器关闭时,cookie销毁,用户与Session关系切断

    2. Tomcat为每一个HttpSession设置了30分钟空闲时间,空闲时间达到30分钟,Tomcat就会销毁掉这个HttpSession

    3. 空闲时间手动修改

      <session-config>
      	<!--设置空闲时间为5分钟-->
      	<session-timeout>5</session-timeout>
      </session-config>
      
      • 1
      • 2
      • 3
      • 4

十三、HttpServletRequest接口实现数据共享

//将数据添加到请求作用域对象中的attribute属性中
req.setAttribute("key",数据);
//申请调用其他servlet
req.getRequestDispatcher("/其它Servlet").forward(req,response);

//从当前请求作用域对象中的attribute中拿数据
Object 数据 = req.getAttibute("key");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

十四、监听器接口

  1. ServletContextListener接口
    1. 实现接口

      public class OneListener implements ServletContextListener{
      	//Context作用域对象创建时调用
      	public void contextInitialized (ServletContextEvent sce){
      		//获取全局作用域对象
      		sce.getServletContext();
      	}
      	//Context作用域销毁时调用
      	public void contextDestroyed (ServletContextEvent sce){
      	
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    2. 将监听器接口注册到Tomcat

      <listener>
      	<listener-class>com.wangxiangqian.listener.OneListener</listener-class>
      </listener>
      
      • 1
      • 2
      • 3
  2. ServletContextAttributeListener接口
    1. 实现接口
      //新增数据时调用
      public void attributeAdded(ServletContextAttributeEvent scae){}
      //删除数据时调用
      public void attributeRemoved(ServletContextAttributeEvent scae){}
      //更新数据时调用
      public void attributeReplaced(ServletContextAttributeEvent scae){}
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    2. 注册接口到Tomcat
      <listener>
      	<listener-class>com.wangxiangqian.listener.OneListener</listener-class>
      </listener>
      
      • 1
      • 2
      • 3

十五、过滤器接口

  1. javax.servlet.FIlter接口
    1. 实现接口

      public class OneFilter implements Filter{
      	
      	public void doFilter(ServletRequest servletRequest ,ServletResponse servletResponse,FilterChain filterChain) throws IOException,ServletException{
      		//FilterChain负责将请求对象和响应对象放行
      		filterChain.doFilter(serletRequest,servletResponse)
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    2. 注册给Tomcat服务器

      <filter>
      	<filter-name>oneFilter</filter-name>
      	<filter-class>com.wangxiangqian.filter.OneFilter</filter-class>
      </filter>
      <filter-mapping>
      	<filter-name>oneFilter</filter-name>
      	<url-pattern>/资源文件</url-pattern>
      </filter-mapping>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    3. 拦截地址格式

      1. 调用某一个具体文件之前,拦截

        <url-pattern>/img/mm.jpg</url-pattern>
        
        • 1
      2. 调用某一个文件夹下所有文件之前,拦截

        <url-pattern>/img/*</url-pattern>
        
        • 1
      3. 调用任意文件夹下某种类型文件之前,拦截

        <url-pattern>*.jpg</url-pattern>
        
        • 1
      4. 调用网站中任意文件时,拦截

        <url-pattern>/*</url-pattern>
        
        • 1

十六、JSP

  1. 基本格式:对html的升级,可以在嵌套使用java代码

    <%
    	java代码
    %>
    
    <%=java代码的值%>
    
    <%
    	if(age>=18){
    %>
    		<font style="color:red;font-size:45px">热烈欢迎</font>
    <%
    	}else{
    %>
    		<font style="color:red;font-size:45px">谢绝入内</font>	
    <%
    	}
    %>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  2. 常用内置java对象

    1. request对象
    2. session对象
    3. ServletContext对象
    4. PageContext当前页作用域对象
  3. Servlet与JSP

    1. Servlet:负责处理业务得到处理结果,将处理结果添加到【请求作用域对象】工作完毕后,一般通过请求转发方式,向Tomcat申请调用JSP
    2. JSP:运行时从【请求作用域对象】得到处理结果,负责将处理结果写入响应体中
  4. Http服务器调用JSP文件步骤

    1. Http服务器将JSP文件内容【编辑】为一个Servlet接口实现类(.java)
    2. Http服务器将Servlet接口实现类【编译】为class文件(.class)
    3. Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象
    4. Http服务器通过Servlet实例对象调用_jspService方法,将jsp文件内容写入到响应体

十七、JSP-EL表达

  1. 基本语法

    <!--取全局作用域中的数据-->
    ${applicationScope.key值}
    <!--取会话作用域中的数据-->
    ${sessionScope.key值}
    <!--取请求作用域中的数据-->
    ${requestScope.key值}
    <!--取当前页作用域中的数据-->
    ${pageScope.key值}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  2. 无法从作用域对象读取集合内容输出

  3. 简化

    ${共享数据名}
    
    • 1
    1. 首先到pageContext中找
    2. 然后是request
    3. session
    4. application
    5. null
  4. 支持运算表达式

    <!--数学运算-->
    ${key1+key2}
    
    <!--关系运算-->
    ${age>=18?"欢迎光临":"谢绝入内"}
    
    <!--逻辑运算-->
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  5. 其他内置对象

    1. 从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体中

      ${param.请求参数名}
      
      • 1
    2. 如果浏览器发送的请求参数是[一个请求参数关联多个值]此时可以通过paramVaues读取请求参数下指定位置的值并写入到响应体

      ${paramValues.请求参数名[下标]}
      
      • 1
  6. EL表达式常见异常

    1. javax.el.PropertyNotFoundException:在对象中没有找到指定属性
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/431268
推荐阅读
相关标签
  

闽ICP备14008679号