JavaWeb

2021-12-20 大约 6 分钟

# JavaWeb

# tomcat web程序目录

-- 项目的根目录 -- WEB-INF目录(class类信息动态目录): -- web.xml:web项目的核心配置文件 -- classes目录:放置字节码文件的目录 -- lib目录:放置依赖的jar包 -- 静态目录:js css jsp等

# servlet

  • 执行原理:

    1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
    2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
    3. 如果有,则在找到对应的<servlet-class>全类名
    4. tomcat会将字节码文件加载进内存,并且创建其对象
    5. 调用Servlet实例对象的init()方法 6.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
  • Servlet中的生命周期方法:

    1. 被创建:执行init方法,只执行一次

      • Servlet什么时候被创建?

        • 默认情况下,第一次被访问时,Servlet被创建
        • 可以配置执行Servlet的创建时机。
          • <servlet>标签下配置
            1. 第一次被访问时,创建
              • <load-on-startup>的值为负数
            2. 在服务器启动时,创建
              • <load-on-startup>的值为0或正整数
      • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

        • 多个用户同时访问时,可能存在线程安全问题。
        • 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
    2. 提供服务:执行service方法,执行多次

      • 每次访问Servlet时,Service方法都会被调用一次。
    3. 被销毁:执行destroy方法,只执行一次

      • Servlet被销毁时执行。服务器关闭时,Servlet被销毁
      • 只有服务器正常关闭时,才会执行destroy方法。
      • destroy方法在Servlet被销毁之前执行,一般用于释放资源 request.setCharacterEncoding()

指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso8859-1编码,该指定只对POST方法有效 get方法可以用手动编码rname = new String(rname.getBytes("iso-8859-1"),"utf-8");

# spring

spring ioc 核心容器: BeanFactory,ApplicationContext,ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,AnnotationConfigApplicationContext

Dependency Injection,依赖注入 1.构造函数注入,使用constructor-arg标签 2.set方法注入,使用property标签(开发中常用) 3.复杂类型/集合类型

常用注解 Component,Controller,Service,Repository:省略的话存入id为第一个字母小写的类名bean Autowired:自动按照类型注入 Qualifier:先按类型注入,再按名称注入 Resource:用属性name指定id注入 Value:注入基本类型 Scope:表明bean作用域 PreDestroy:用于指定销毁方法 PostConstruct:用于指定初始化方法 Bean:存入bean容器

spring aop Joinpoint(连接点):service中的所有方法 pointcut(切入点)方法:service中需要增强的方法 Advice(通知/增强)方法:指增强的内容。分前置通知,后置通知,异常通知,最终通知,环绕通知。 target对象:指service对象 weaving(织入):对service方法的增强生成代理对象的过程 proxy:增强后的代理service对象 aspect:切入点方法和通知的结合 常用注解 Aspect:切面类 Pointcut:切入点 Before:前置通知 AfterReturning:后置通知 AfterThrowing:异常通知 After:最终通知 Around:环绕通知 事务相关 可认为是对业务方法的增强 事务的属性: isolation:用于指定事务的隔离级别。默认值是DEFAULT,表示使用数据库的默认隔离级别。 propagation:是否需要事务支持,默认值是REQUIRED,查询可以选择SUPPORTS(如果没有,就以非事务方式执行)。 read-only:用于指定事务是否只读。只有查询方法才能设置为true。默认值是false。 timeout:用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位。 rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。 no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时事务回滚。 常用注解 Transactional(propagation= Propagation.SUPPORTS,readOnly=true)//只读型事务的配置 EnableTransactionManagement

# mybatis

通过SqlSessionFactoryBuilder解析SqlMapConfig.xml配置文件创建SqlSessionFactory,工厂对象又创建SqlSession对象。SqlSession 创建 dao 接口的代理对象。 常用注解 @Select @Insert @Update @Delete @Results @Many @One

# springmvc

Spring&SpringMVC容器加载过程:tomacat启动后,web.xml中的contextLoaderListener在,会监听到web容器的初始化事件,其contextInitialized方法会被调用,spring会初始化一个启动上下文作为根上下文,即WebApplicationContext。 根容器初始化完毕后,Spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE为属性Key,将其存储到ServletContext中 初始化web.xml中配置的ServletDispatcherServlet上下文在初始化的时候会建立自己的上下文,用以持有SpringMVC相关的bean。 之后先通过WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE先从ServletContext中获取之前的根上下文(即WebApplicationContext)作为自己上下文的父上下文,然后建立DispatcherServlet自己的上下文 mvc:model view controller 视图解析器 处理器映射器 前端控制器 异常控制器 文件解析器 拦截器 web.xml中配置核心servlet SpringMVCDispatcherServlet 创建 spring mvc 的配置文件 请求参数的绑定:把表单中的参数直接绑定给处理函数的参数,支持基本类型,字符串,pojo,数组,集合 常用注解 RequestMapping:value method params RequestParam:value required RequestBody:required是否必须有请求体。默认值是:true。当取值为true时,get 请求方式会报错。如果取值为 false,get 请求得到是 null。 PathVaribale:绑定url中的占位符,/delete/{id},这个{id}就是 url 占位符。 RequestHeader:获取请求头 CookieValue:value,require ModelAttribute:出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法(保存在,也可以修饰有具体返回值的方法。出现在参数上,获取指定的数据给参数赋值。 SessionAttributes:用于多次执行控制器方法间的参数共享 vaule={} types={字节码} ResponseBody:将数据转化为json数据返回客户端,需要引入jackson的jar包 ControllerBody

# page helper

在sqlSessionFactory配置plugins属性,通过PageHelper.startPage(page, size)来设置分页,通过PageInfo来使用

# spring security

# springboot

常用依赖

  • spring-boot-starter-parent该依赖提供以下功能
    • 默认Java 1.6编译
    • UTF-8编码格式
    • 依赖管理部分,可让你对公共依赖省略version标签。继承自spring-boot-dependencies POM。
    • 良好的资源过滤
    • 良好的插件配置
    • 对于application.properties和application.yml包括profile-specific文件,良好的资源过滤
  • spring-boot-starter-web:springMVC的依赖
  • spring-boot-devtools:热部署
  • mybatis-spring-boot-starter:mybatis提供的启动器
  • spring-boot-starter-test:测试依赖

常用注解 springBootApplication:引导类注解,springboot应用入口 EnableAutoConfiguration:Import(AutoConfigurationImportSelector.class):

从META-INF/spring.factories文件中读取指定类对应的类名称列表来通过前缀将application.properties中的配置信息加载实现自动配置 ComponentScan:扫描该类路径下的class和包 SpringBootConfiguration:相当于spring configuration

ConfigurationProperties:读取application.properties中的配置,通过配置前缀,直接和实体类进行映射 Mapper:mybatis的mapper接口,配置后自动添加到容器中 RunWith(SpringRunner.class) SpringBootTest

上次编辑于: 2022年3月19日 19:11