[有书共读]JavaWeb高级编程

JavaWeb高级编程 -- 篇10

使用日志监控应用程序

"日志"不一定就是一个文件。
日志事件有着不同的类型和严重程度。
常见的日志级别:

通用名称 级别 常用语义
致命错误 没有对等的常量 表示一种严重的错误形式,通常这种错误会导致系统崩溃或者提前终止
错误 SEVER 表示发生了严重的问题
警告 WARNING 表示发生了一些可能是也可能不是问题的事件,并且可能需要进行检查
信息 INFO 表示信息级别的日志,这些日志对应用程序监控和调试来说是非常有用的

介绍SpringFramework

Spring Framework是一个Java应用程序容器,它提供了许多有用的特性,例如反转控制、依赖注入、抽象数据访问、事务管理等。

Spring Framework的核心特点之一就是对两个紧密相关的观念的支持:控制反转(IoC)和依赖注入(DI)。IoC是一个软件设计模式:组装器将在运行时而不是在编译时绑定对象。当某些程序逻辑组件,例如Service A,依赖于另一个程序逻辑组件Service B时,该依赖将在应用程序运行时实现,而不是由Service A直接实例化Service B。
尽管理论上可以通过多种方式实现IoC,但DI时最常见的技术。通过使用DI,一段程序代码可以声明它依赖于另一块程序代码,然后组装器可以在运行时注入它依赖的实例。
因为Spring Framework负责处理实例化和依赖注入,所以它可以通过封装注入依赖的实例,使用其他行为对方法调用进行装饰。
Spring Framework提供了一个松耦合的消息系统,它使用的时发布-订阅模式:系统中的组件通过订阅消息,声明它对该消息感兴趣,然后这些消息的生产者将会发布该消息,而无须关系谁对消息感兴趣。使用Spring Framework时,一个由Spring管理的bean可以通过实现一个通用接口订阅特定的消息类型,其他由Spring管理的对象可以发布这些消息到Spring Framework中,然后由Spring Framework将消息发送到已订阅的bean中。
Spring Framework提供了一个模型-视图-控制器(MVC)模式框架,它可以简化创建交互式Web应用程序的过程。不用动手处理复杂的Servlet、HTTPServletRequest、HttpServletResponse以及JSP转发,Spring将处理这些任务。控制器类的每个方法都将被映射到了一个不同的请求URL、方法或请求的其他属性上。模型将以Map<String Object>的形式从控制器传递到视图。控制器返回的视图或视图名称将使Spring把模型转发到合适的JSP视图。请求和URL路径参数将被自动转换为原始或复杂的控制器方法参数。
使用Spring 的Web MVC框架时,控制器类的行为非常像使用方法级别映射的Servlet。每个方法都可以拥有一个指定特性URL、请求方法、参数存在性、头的值、内容类型和/或期望相应类型的唯一映射。当单元测试对小的代码单元进行测试时,控制器类中可以包含许多映射方法,它们将被按逻辑进行分组。返回到用户配置样例中,该控制器可以含有数十个方法,使用它们分别代表对用户配置的不同***作,但必须使用doGet和DoPost将请求路由到正确的方法。Spring Framework将处理所有的分析和路由工作。
使用Spring时,业务逻辑将被封装到一组被称为服务的业务对象中。这些服务将执行所有用户界面公共的***作。
Spring Framework容器以一个或多个应用上下文的形式存在,由org.springframework.context.ApplicationContext接口表示。一个应用上下文管理一组bean、执行业务逻辑的Java对象、执行任务、持久化和获取持久化数据、响应HTTP请求等。由Spring管理的bean可以自动进行依赖注入、消息通知、定时方法执行、bean验证和执行其他关键的Spring服务。
一个Spring应用程序至少需要一个应用上下文。
在Java EE Web应用程序中,Spring将使用派发器Servlet处理Web请求,该Servlet将把进入的申请委托给合适的控制器,并按需要对请求和响应实体进行转换。
当配置告诉Spring如何运行它所包含的应用程序时,启动进程将启动Spring并将配置指令传递给它。在Java SE应用程序中,只有一种方式启动Spring;通过在应用程序的public static void main(String...)方法中以编程的方式启动。在Java EE应用程序中,有两种选择:可以使用XML创建部署描述符启动Spring,也可以在javax.servlet.ServletContainerInitializer中通过编程的方式启动Spring。
传统的Spring Framework应用程序总是使用Java EE部署描述符启动Spring。至少,这要求在配置文件中创建DispatcherServlet的一个实例,然后以cpntextConfigLocation启动参数的形式为它提供配置文件,并指示Spring在启动时加载它。

<servlet>
    <servlet-name>springDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/servletContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springDispatcher</servlet-name>
    <url-pattern>/<url-pattern>
</servlet-mapping>

该代码将为DispatcherServlet创建出单个Spring应用上下文,并指示Servlet容器在启动时初始化DispatcherServlet。在初始化的时候,DispatcherServlet将从/WEB-INF/servletContext.xml文件中加载上下文配置并启动应用上下文。
实现了ServletContainerInitializer接口的类将在应用程序开始启动时,并在所有***启动之前调用它们的onStartup方法。启动类将使用Spring Java配置通过纯Java的方式启动和配置Spring。

bean是由Spring Framework管理的,所以这是在配置Spring Framework时我们主要需要完成的配置。
我们需要使用<beans> XML命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
    <mvc:annotation-driven />
    <bean name="greetingServiceImpl" class="xxx.GreetingServiceImpl" />
    <bean name="helloController" class="xxx.HelloController">
        <property name="greetingService" ref="greetingServiceImpl" />
    </bean>
</beans>

该XML文件将告诉Spring实例化GreetingServiceImpl和HelloController,并将greetingServiceImpl bean注入到helloController bean的greetingService属性中。<beans>元素是包含了Spring配置的父元素。在其中几乎可以使用所有其他Spring配置元素--不过一般来讲,<beans>元素使用的元素都将引起bean的创建。

混合配置的核心是组件扫描和注解配置。所有标注了@org.springframework.stereotype.Component的类,都将变成Spring管理的bean,这意味着Spring将实例化它们并注入它们的依赖。
其他符合组件扫描的注解:任何标注了@Component的注解都将变成组件注解,任何标注了另一个组件注解的注解也将变成组件注解。因此,标注了@Controller、@Repository和@Service的类也将成为Spring管理的bean。
可以为任何私有、保护和公开字段或者接受一个或多个参数 的公开设置方法标注@Autowired。@Autowired声明了Spring应该在实例化之后注入的依赖,并且它也可以用于标注构造器。通常由Spring管理的bean必须有无参构造器,但对于只含有一个标注了@Autowire的构造器的类,Spring将使用该构造器并注入所有的构造器参数。
通常在bean的所有依赖都注入后,在它作为依赖被注入其他bean之前,可以在该bean上执行某种初始化***作。只需要使用org.springframework.beans.factory.InitializingBean接口就可以轻松实现。在bean的所有配置都完成之后,Spring将调用它的afterPropertiesSet方法。

#Java##读书笔记#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务