[有书共读]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##读书笔记#
全部评论

相关推荐

2025-11-26 09:37
山西大学 测试工程师
累死的一条狗:学长你电脑闹鬼了
点赞 评论 收藏
分享
老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本&nbsp;专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴&nbsp;快手&nbsp;去哪儿&nbsp;小鹏汽车&nbsp;不知名的一两个小厂其中字节13场&nbsp;两次3面挂&nbsp;两次2面挂&nbsp;一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂&nbsp;最后一次到录用评估&nbsp;至今无消息滴滴三面完&nbsp;没几天挂了&nbsp;所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通&nbsp;至今无消息小鹏汽车hr&nbsp;至今无消息美团2面挂&nbsp;然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂&nbsp;这个是我菜,面试官太牛逼了拼多多二面挂&nbsp;3道题也全写了&nbsp;也没问题是回答不出来的&nbsp;泡一周后挂腾讯面了5次&nbsp;一次2面挂&nbsp;三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务