Java Web完全学习笔记

1. Tomcat基本结构

在这里插入图片描述


2. Servlet简介:

  • 是一种web服务端编程技术
  • 实现了特殊接口(HttpServlet)的java类
  • 由支持servlet的web服务器调用和启动运行
  • 一个servlet负责对应一个或一组URL访问请求,并返回响应内容

3. Servlet访问流程:

  • 浏览器发送请求到服务器
  • 服务器根据请求URL地址中的URI信息(虚拟项目名+servlet别名), 在webapps目录下找到对应的项目文件夹
  • 在web.xml中检索对应的servlet
  • 调用并执行servlet

4. Servlet生命周期

  • 在servlet接受第一次请求的时候创建对象(单例)
  • 在服务器关闭时销毁
  • 可以通过配置web.xml:load-on-startup来控制在开启tomcat时就创建servlet对象
    在这里插入图片描述

5. Servlet编码注意:

不需要编码service方法,只需实现doGet和doPost方法,service()的父类实现中调用了doGet和doPost方法

404: 访问资源不存在

  • 请求路径与web.xml中的不一致
  • 请求的项目虚拟路径填错

405: 不支持的URL

  • 请求的方式与servlet支持的方式不一致

500: 服务器内部错误

  • web.xml中servlet类名、包名不对
  • servlet对应的处理方法中存在代码逻辑错误

6. 如何解决tomcat,URI中文乱码:

1.get:

获取字符串之后使用new String(name.getBytes("iso-8895-1"),"utf-8");
设置request的编码格式,同时在server.xml中添加useBodyEncodingForURI="true"
在server.xml中添加URIEncoding="utf-8"

2.post:

request.setCharacterEncoding("utf-8")

3.response响应编码:

- response.setCharacterEncoding("gbk");
- response.setContentType("text/html;charset=utf-8");

7. Servlet 请求转发:

  • 客户端只发送一次请求
  • 浏览器的地址栏地址未发生变化
  • 请求过程中只有一个request和response,几个servlet共享
  • 对客户端透明

8. Servlet重定向:

  • 浏览器发送多次请求
  • 浏览器地址发生变化
  • 请求过程中多个request、response对象
  • 两个servlet不能共享同一个request、response对象

9.Cookie

1. 使用

//设置cookie
Cookie cookie = new Cookie("00001", "beijing");
response.addCookie(cookie);
cookie.setPath("/cookie/abc"); //设置固定路径 url
cookie.setMaxAge(3*24*3600); //单位是秒 int

//使用cookie
Cookie[] cookies = request.getCookies();

2. 特点

  • cookie是保存在浏览器端的数据名称
  • 每个cookie中只保存一个key-value对,如果需要存储多个键值对,需要创建多个cookie对象

3. 分类:

  • 临时cookie:默认存储在内存中,当浏览器关闭时,cookie自动失效
  • 持久化cookie:保存在浏览器的某个目录,当时间过期之后才会失效

10.Session

1. 概念:

  • Session表示会话,在一段时间内,用户与服务器之间的一系列交互操作
  • Session对象:用户发送不同请求时,在服务端保存不同请求共享数据的存储对象

2.特点:

  • Session是依赖Session技术的服务端的数据存储技术
  • 由服务器进行创建
  • 每个用户独立拥有一个Session对象
  • 默认存储时间是30分钟
  • 每次关闭浏览器后,重新请求都会开启新的Session对象,因为返回的JSESSIONID保存在浏览器内存中,是临时cookie,所以关闭之后会消失

3.使用:

HttpSession session = request.getSession();
session.setMaxInactiveInterval(5); //设置Session有效时长,单位:秒
session.invalidate(); //强制失效
session.setAttribute("key", "value"); 

11.SevletContext

1.概念:

  • 运行在JVM上的每一个web app都应该有一个与之对应的Servlet上下文(Servlet运行环境)
  • Servlet API提供ServletContext接口用来表示Servlet上下文
  • ServletContext可以被web app中的所有servlet访问
  • ServletContext对象是web服务器中一个已知路径的根

2.作用域:

  • ServletContext由服务器创建
  • 一个项目只有一个对象,不管在任意位置获取到的都是同一个对象
  • 不同用户发起的请求获取到的也是同一个对象,该对象由用户共同拥有

3.使用(详细见API文档):

//1.servlet1
ServletContext servletContext = this.getServletContext();
servletContext = this.getServletConfig().getServletContext();
servletContext = request.getSession().getServletContext();
servletContext.setAttribute("name", "zhangsan");

//2.在web.xml中设置ServletContext属性
<context-param>
    <param-name>age</param-name>
    <param-value>18</param-value>
</context-param>

//在其他servlet中使用
ServletContext context = this.getServletContext();
System.out.println(context.getAttribute("name"));
//获取web.xml中设置的属性
context.getInitParameter("age");

12.ServletConfig

1.作用:

每个Servlet对象都单独拥有一个ServletConfig对象,用来获取web.xml中的配置信息

2.使用:

  • 获取ServletConfig对象
  • 获取web.xml中的Servlet配置信息
ServletConfig config = this.getServletConfig();

13.JSP

1.常用的几种动态网页技术:

  • JSP(Java Server Page)
  • ASP(Active Server Page)
  • PHP(Hypertext Preprocessor) 超文本预处理语言

2.本质:

JSP就是Servlet,也是Java类,通过JSP引擎将JSP翻译成Servlet。 JSP ~= Java + HTML

3.原理:

  • 在Tomcat的web.xml配置文件中:
<!-- The mapping for the default servlet -->
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- The mappings for the JSP servlet -->
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

<servlet>
     <servlet-name>jsp</servlet-name>
     <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
     <init-param>
         <param-name>fork</param-name>
         <param-value>false</param-value>
     </init-param>
     <init-param>
         <param-name>xpoweredBy</param-name>
         <param-value>false</param-value>
     </init-param>
     <load-on-startup>3</load-on-startup>
 </servlet>

4.详细过程:

在这里插入图片描述

  1. 浏览器输入:localhost:8080/jsp/1.jsp
  2. tomcat收到*.jsp请求,则会到org.apache.jasper.servlet.JspServlet处理
  3. JspServlet调用相应的java类,jsp引擎根据_1_.jsp生成的java类(位于tomcat子目录work下面:_1_jsp.java,_1_jsp.class)
  4. 执行_1_.jsp.class,将HTML数据输出给tomcat,tomcat再将这些数据输出给客户端

5. 基本使用: JSP基本使用


14.EL(Expression Language)

  1. 作用:让JSP书写更方便,简化JSP在获取作用域或者请求数据的写法
  1. 语法:
  • ${expression}
  • 提供.和[]两种运算符来获取数据: 获取值时,直接使用属性的key,用.获取引用,用[]获取指定索引位置的对象
  • 可以进行算数运算和关系运算
  1. 作用域: pageContext–>request–>session–>application
    -可通过pageScope, requestScope,sessionScope,applicationScope获取指定作用域的数据

4.示例代码 : Link


15.JSTL

(Java server pages standarded tag library,即JSP标准标签库)

JSTL简单介绍及基本使用
JSTL文档

帮助我们在jsp页面中添加复杂的逻辑判断,避免逻辑代码和页面标签混为一谈, JSTL是EL的扩展,同时,JSTL依赖于EL

JSTL的导入: 添加jstl.jar,standard.jar到web-inf下的lib目录
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


16.Filter过滤器

1.概念:

  • 过滤器是能够对web请求和web响应的头属性和内容体进行操作的一种特殊web组件
  • 过滤器的特殊之处在于本身并不直接生成web响应,而是拦截web请求和响应,以便查看、提取或以某种方式操作客户机和服务器之间交换的数据

2.功能:

  • 分析web请求,对输入数据进行预处理
  • 阻止web请求和响应的进行
  • 根据功能改动请求的头信息和数据体
  • 与其他web资源协作

3.工作原理
在这里插入图片描述

4.生命周期 在这里插入图片描述

5.使用方式:

  1. 定义普通java类,实现Filter接口
  2. 重写其中的方法
    init :完成初始化功能 tomcat启动的时候执行一次
    dofilter:进行处理 每次发送请求都会执行
    destory:销毁功能 tomcat关闭的时候执行
<filter>
    <filter-name>filter</filter-name>      
    <filter-class>com.wangxshen.filter.MyFilter</filter-class>  
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>    
    <url-pattern>/*</url-pattern>     
</filter-mapping>
  • filterChain:表示过滤器链
  • 在项目中可以定义N多个过滤器,当开始执行的时候,根据用户的请求把符合规则的过滤器挨个执行
  • 建议:每个过滤器完成独立的功能,不要讲所有的逻辑处理放置到同一个过滤器中,耦合性高,不利于维护
  • 在过滤器的web.xml配置文件中,可以指定过滤器过滤那些请求:
    /* : 匹配所有请求 *
    /*.do : 匹配所有后缀为do的请求
    /filter.do :匹配请求为filter.do的请求

17.监听器

/**
 * 监听器:
 *      监听作用域对象的创建和销毁以及属性的相关配置,可以添加一些公共的属性配置,做逻辑判断
 *
 * 主要监听三种作用域:
 *  ServletContext(application) session request
 *
 *  1. request
 *  接口:
 *  ServletRequestListener:监听request对象的创建和销毁
 *  public void requestDestroyed(ServletRequestEvent servletRequestEvent)  request对象销毁时添加的逻辑代码
 *  public void requestInitialized(ServletRequestEvent servletRequestEvent) request对象创建时添加的逻辑代码
 *  ServletRequestAttributeListener:监听request作用域属性的添加,删除和更改
 *  public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent)    属性添加时要做的事情
 *  public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent)  属性删除时要做的事情
 *  public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent)    属性更改时要做的事情
 * 
 *  2. servletcontext:
 *  接口:
 *  ServletContextListener  监听servletcontext对象的创建和销毁
 *  public void contextInitialized(ServletContextEvent servletContextEvent) 创建对象,当启动tomcat服务器的时候创建
 *  public void contextDestroyed(ServletContextEvent servletContextEvent)   销毁对象,关闭tomcat服务器的时候销毁
 *  ServletContextAttributeListener 监听servletcontext对象的属性的添加和删除和更改
 *  public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent)  添加属性
 *  public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent)   删除属性
 *  public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent)      更改属性
 *
 *  3. Session:
 *  接口;
 *  HttpSessionListener:  监听session对象的创建和销毁
 *  public void sessionCreated(HttpSessionEvent httpSessionEvent)  session对象创建的时候执行
 *  public void sessionDestroyed(HttpSessionEvent httpSessionEvent)  session对象销毁的时候执行
 *  HttpSessionAttributeListener :监听session对象中属性的添加,删除和更改
 *  public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) 添加属性时被调用
 *  public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) 删除属性时被调用
 *  public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) 修改属性时被调用
 *
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值