web容器

J2EE平台简介 

为君一笑 提交于 2019-12-01 01:49:33
1.1.1 J2EE规范 J2EE(Java 2 Platform,Enterprise Edition)是SUN公司定义的一个开发分布式企业级应用的规范。它提供了一个多层次的分布式应用模型和一系列开发技术规范。多层次分布式应用模型是指根据功能把应用逻辑分成多个层次,每个层次支持相应的服务器和组件,组件在分布式服务器的组件容器中运行(如Servlet组件在Servlet容器上运行,EJB组件在EJB容器上运行),容器间通过相关的协议进行通讯,实现组件间的相互调用。遵从这个规范的开发者将得到行业的广泛支持,使企业级应用的开发变得简单、快速。 1.1.2 J2EE组件层次 J2EE组件和层次如图1-1所示。 图1-1 J2EE组件层次(略) J2EE规范定义了如下组件: ★客户端组件 ★Web组件 ★EJB组件 J2EE规范定义了以下四个层次。 1.客户端层(Client Tier) 客户端层用来实现企业级应用系统的操作界面和显示层。另外,某些客户端程序也可实现业务逻辑。可分为基于Web的和非基于Web的客户端两种情况。基于Web的情况下主要作为企业Web服务器的浏览器。非基于Web的客户层则是独立的应用程序,可以完成瘦客户机无法完成的任务。 2.Web层 为企业提供Web服务。包括企业信息发布等。Web层由Web组件组成。J2EE Web组件包括JSP页面和Servlets

详解http报文(2)-web容器是如何解析http报文的

∥☆過路亽.° 提交于 2019-11-30 23:33:46
摘要 在 详解http报文 一文中,详细介绍了http报文的文本结构。那么作为服务端,web容器是如何解析http报文的呢?本文以jetty和undertow容器为例,来解析web容器是如何处理http报文的。 在前文中我们从概览中可以了解到,http报文其实就是一定规则的字符串,那么解析它们,就是解析字符串,看看是否满足http协议约定的规则。 start-line: 起始行,描述请求或响应的基本信息 *( header-field CRLF ): 头 CRLF [message-body]: 消息body,实际传输的数据 jetty 以下代码都是jetty9.4.12版本 如何解析这么长的字符串呢,jetty是通过状态机来实现的。具体可以看下 org.eclipse.jetty.http.HttpParse 类 public enum State { START, METHOD, ![](https://img2018.cnblogs.com/blog/1147363/201910/1147363-20191009220439773-204646534.png), SPACE1, STATUS, URI, SPACE2, REQUEST_VERSION, REASON, PROXY, HEADER, CONTENT, EOF_CONTENT, CHUNKED_CONTENT,

jar和war

若如初见. 提交于 2019-11-30 23:12:47
1.jar包的介绍 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。 JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序 ,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。 简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。 2.war包的介绍 war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。 war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web

浅谈Web开发中forward与redirect的区别

北慕城南 提交于 2019-11-30 18:55:36
Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。直接转发就是由控制器来控制请求应该转发给那个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式;而间接转发有时也叫做重定向,它一般用于避免用户的非正常访问。区别在于: 1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。 redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。所以地址栏显示的是新的URL。 2.从数据共享来说 forward:转发页面和转发到的页面可以共享request里面的数据。 redirect:不能共享数据。 3.从运用地方来说 forward:一般用于用户登陆的时候,根据角色转发到相应的模块。 redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等。 4.从效率来说 forward:高。 redirect:低。 关于两者的本质区别,有以下几种解释: 解释一   一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求——web服务器接受此请求

【转载】Spring boot学习记录-入门篇

痞子三分冷 提交于 2019-11-30 13:32:21
前言 :本系列文章非本人原创,转自: http://tengj.top/2017/04/24/springboot0/ 正文 首先声明,Spring Boot不是一门新技术。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也需要去做的Spring Bean配置。它使用“ 习惯优于配置 ”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot,你可以不用或者只需要很少的Spring配置。 Spring Boot精要 Spring将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。 自动配置 :针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置 起步依赖 :告诉Spring Boot需要什么功能,它就能引入需要的库。 命令行界面 :这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。 Actuator :让你能够深入运行中的Spring Boot应用程序,一探究竟。 系统要求 Spring Boot 1.5.1.RELEASE需要Java 7和Spring

log4j

前提是你 提交于 2019-11-30 12:23:39
日志是应用软件中不可缺少的部分,Apache的开源项目 log4j 是一个功能强大的日志组件,提供方便的日志记录。 一、入门实例 1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下 2、src同级创建并设置log4j.properties ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出DEBUG 级别以上的日志到=E://logs/error.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = E://logs

常见问题:Web/Spring

瘦欲@ 提交于 2019-11-30 09:33:32
Servlet生命周期 init()初始化阶段 Servlet容器加载Servlet(web.xml中有load-on-startup=1;Servlet容器启动后用户首次向Servlet发请求;Servlet类文件被更新后重新装载) Servlet容器创建一个Servlet实例并调用init()方法 service()处理客户端请求阶段 客户发送请求 Servlet产生一个新的线程 Servlet创建特定于请求的ServletRequest, ServletResponse 调用service()方法对请求进行响应,如HttpServlet的doPost,doGet destroy()终止阶段 web应用终止/Servlet容器终止运行/Servlet重新装载Servlet实例时,会调用Servlet的destroy()方法。 Spring Bean生命周期 Bean实例化 设置对象属性(IOC注入) 检查Aware相关接口并设置相关依赖 BeanPostProcess前置处理 检查是否是InitializingBean以决定是否调用afterPropertiesSet 检查是否有自定义的init-method(配置文件中可以定义) BeanPostProcess后置处理 注册Destruction相关回调接口 Bean准备就绪 使用

Spring二次学习——1.Spring概述

試著忘記壹切 提交于 2019-11-30 09:00:26
1.1.1 Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发 。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。 业务逻辑开发是不可避免的,那 如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系 。可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担,如果能有种通 过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事 。Spring框架刚出来时主要就是来完成这个功能。 Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA

web项目 配置说明 spring-config.xml springmvc-servlet.xml web.xml

瘦欲@ 提交于 2019-11-30 08:27:40
<!-- spring-config.xml 配置文件书写 1. 注解识别,驱动启动 <context:annotation-config/> 2. 项目扫包,识别除@Controller注解以外的注解,并使用@Componment的postProcesser。 <context:component-scan base-package="com.lhb.spring"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> 3. PropertyPlaceholderConfigurer: 配置文件读取,并创建到bean中. eg.${property}; dataSource 应用。 PropertyOverrideConfigure: 当然还可以使用占位符后处理器。 形如,#beanId.property=value 。 <context:property-placeholder trim-values="true" ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:*

在 Web 项目中应用 Apache Shiro

天大地大妈咪最大 提交于 2019-11-30 06:37:56
用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资源?”。为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示。 用户信息用 LoginAccount 表示,最简单的用户信息可能只包含用户名 loginName 及密码 password 两个属性。实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息。 用户权限信息用 Role 与 Permission 表示,Role 与 Permission 之间构成多对多关系。Permission 可以理解为对一个资源的操作,Role 可以简单理解为 Permission 的集合。 用户信息与 Role 之间构成多对多关系。表示同一个用户可以拥有多个 Role,一个 Role 可以被多个用户所拥有。 图 1. 用户权限模型 回页首 认证与授权 Shiro 认证与授权处理过程 被 Shiro 保护的资源,才会经过认证与授权过程。使用 Shiro 对 URL 进行保护可以参见“与 Spring 集成”章节。 用户访问受 Shiro 保护的 URL;例如 http://host/security/action.do。 Shiro 首先检查用户是否已经通过认证