当前位置: 代码迷 >> J2EE >> java EE 的体系结构
  详细解决方案

java EE 的体系结构

热度:99   发布时间:2016-04-21 21:40:37.0
java EE 的体系结构:

?

java EE(Java Plantfor Enterprise Edition)是sun公司推出的企业级应用程序版本。这个版本以前成为J2EE.能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器端java应用程序。java EE 是在java SE的基础上构建的,它提供Web服务、组建模型、管理和通信API,可以用来实现企业级的面向服务体系结构和Web 2.0应用程序。

??J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。J2EE也是一个框架,包括JDBCJNDIRMIJMSEJBJTA等技术。

java EE 的体系结构:

??1、表示层(HTML、JavaScript、Ajax)

? 2、中间层(JSP、Servlet、JSTL、JavaBean)(Struts)

? 3、数据层(JDBC)(Hibernate)

?三层体系结构的优点?

? 1、耦合性低?? 2、扩展性好?? 3、复用性好?? 4、便于分工

?

?j2ee常用的设计模式:

??Java中的23种设计模式:

?

   Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式),   Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),   Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),   Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),   Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),   Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),   Observer(观察者模式), State(状态模式), Strategy(策略模式), Template Method(模板方法模式), Chain Of Responsibility(责任链模式)

?

?

?工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,

通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要

定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同

的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

?

HTTP协议的提交方式:

? 1、GET——用URL传递数据

? 2、POST——用流的方式传递数据

?Servlet是一个java程序,是在服务器端运行的以处理客户端请求并做出响应的程序。

Servlet类一定要继承HttpServlet,Servlet必须和Servlet容器配合运行,Servlet要嵌入容器才能运行。

?

Web应用程序的结构:

?? tomcat—webapps—appName:

?? http://ip:port/appName/index.jsp

?? 1、页面和图片(可以自己组织结构,可以从客户端直接访问,jsp、html、js、jpg.....)

?? 2、WEB-INF 目录(必须有的? 其中的东西不能从客户端直接访问 )

?????? a、web.xml (必须有 ? Web程序的总体配置,是一个核心)

?????? b、classes文件夹(必须的?? Servlet和JavaBean编译成Class后存放于该文件夹)

?????? c、lib文件夹(存放该程序用的类库jar包)

?Web .xml中要对Servlet进行一些配置

?

    <Servlet>         <servlet-name>test</servlet-name>         <servlet-class>org.owl.servlets.TestServlet</servlet-class>    </Servlet>    <servlet-mapping>          <servlet-name>test</servlet-name>         <url-pattern>/test</url-pattern>    </servlet-mapping>

?

?

?? JSP在运行时需要翻译成一个Servlet程序,然后再编译成Class文件,然后才可以运行。

?? Servlet的生命周期由Servlet容器来管理

?? Servlet的声明周期:

????? 1、加载和实例化(构造方法): 在Web容器中查找用户请求的Servlet,如果没有找到,则实例化,如果找到,则加载。

????? 2、初始化(init):在实例化后调用的方法,可以初始化一些资源。

????? 3、服务(service): 接受请求并做出响应。根据请求的方式不同,调用doXXX方法。

????? 4、销毁(destory): 主要用来销毁初始化时创建的资源,在destory方法中我们标识哪些资源可以回收,并不能马上回收。

????

?????如何获得请求参数?

1.???requestgetParameter(name);

2.???如果一个请求参数有多个值,需要返回一个数组!

??String []size=request.getParameter(“name”);

??For(int i=0;i<size.length;i++){

?????out.print(size[0]);

}

?????除了参数,还可以获得其他

??????????1与请求相关的cookie?????Cookie [] cookies=request.getCookies();

??????????2与会话相关的session????Session session=request.getSession();

??????????3请求的HTTP方法???????String methed=request.getMethed();

?

?

初始化参数:

?????web.xml中设置servlet初始化参数

?????????<servlet>?

<servlet-name> dbinit </servlet-name>         <servlet-class> strutsfinalcase.db.util.DBInit </servlet-class>         <init-param>             <param-name> driverClass </param-name>             <param-value> org.gjt.mm.mysql.Driver </param-value>         </init-param><servlet>

?

?

解释:容器初始化一个servlet时,会为这个servlet创建一个唯一的ServletConfig??容器从DD读出servlet初始化参数,交给ServletConfig?然后转递给servletinit()方法

?

????????servlet?代码中获得初始化参数的值:

???????????????getServletConfig(),getInitParameter(param-name);

?

?

上下文初始化参数

? ??

      <context-param>                  <param-name>name</param-name>                  <param-value>John</param-value>              </context-param>

?

?

?????????????????servlet?代码中获得上下文初始化参数的值:

????????????????????????getServletContext().getInitParameter(name);

?

?

ServletContext

??用于在Web应用范围内存取共享数据的方法。

注:web应用范围具有以下两层含义:

(1)???????表示有web应用的生命周期构成的时间段.

(2)???????表示在web应用的生命周期内所有web组件的集合。

*??setAttribute(String name,java.lang.Object??object):把一个java对象和一个属性名绑定,并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据。

*??getAttribute(String name):根据参数给定的属性名,返回一个Object类型的对象。

*??getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。

*??removeAttribute(String??name):根据参数指定的属性名,从servletContext对象中删除匹配的属性。

?

访问当前Web应用的资源

?

*  getContextpath():返回当前web应用的URL入口。*  getInitParameter(String  name):返回web应用方位内的匹配的初始化参数值。在web.xml中<web-app>元素中<context-param>元素表示应用范围内的初始化参数。*  getInitParameterNames():返回一个Enumeration对象。*  getServletContextName():返回web应用的名字。即<web-app>元素中<display-name>元素的值。*  getRequestDispatcher(String  path):返回一个用于向其他web组件转发请求的RequestDispatcher对象。

?

?

?

web.xml文件

??????web.xml文件是用来初始化配置信息:比如Welcome页面、servletservlet-mappingfilterlistener、启动加载级别等

?

??????1、指定欢迎页面,例如:?
??

<welcome-file-list>     <welcome-file>index.jsp</welcome-file>     <welcome-file>index1.jsp</welcome-file>   </welcome-file-list> 

?
PS:指定了2个欢迎页面,显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。

?

???2、命名与定制URL。我们可以为ServletJSP文件命名并定制URL,其中定制URL是依赖命名的,命名必须在定制URL前。下面拿serlet来举例:?
(1)、为Servlet命名:?

<servlet>     <servlet-name>servlet1</servlet-name>     <servlet-class>org.whatisjava.TestServlet</servlet-class> </servlet> 

?
(2)、为Servlet定制URL?

<servlet-mapping>     <servlet-name>servlet1</servlet-name>     <url-pattern>*.do</url-pattern> </servlet-mapping>

?

?

3、定制初始化参数:可以定制servletJSPContext的初始化参数,然后可以再servletJSPContext中获取这些参数值。?

下面用servlet来举例:?

<servlet>     <servlet-name>servlet1</servlet-name>     <servlet-class>org.whatisjava.TestServlet</servlet-class>     <init-param>           <param-name>userName</param-name>           <param-value>Daniel</param-value>     </init-param>     <init-param>           <param-name>E-mail</param-name>           <param-value>125485762@qq.com</param-value>     </init-param> </servlet> 

?
经过上面的配置,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的值。

?

4、指定错误处理页面,可以通过异常类型错误码来指定错误处理页面。?

<error-page>     <error-code>404</error-code>     <location>/error404.jsp</location> </error-page> ----------------------------- <error-page>     <exception-type>java.lang.Exception<exception-type>     <location>/exception.jsp<location> </error-page>

?

?

5、设置过滤器:比如设置一个编码过滤器,过滤所有资源?

<filter>     <filter-name>XXXCharaSetFilter</filter-name>     <filter-class>net.test.CharSetFilter</filter-class> </filter> <filter-mapping>     <filter-name>XXXCharaSetFilter</filter-name>     <url-pattern>/*</url-pattern> </filter-mapping>

?

?

6、设置监听器:?

<listener> <listener-class>net.test.XXXLisenet</listener-class> </listener> 

?

7、设置会话(Session)过期时间,其中时间以分钟为单位,假如设置60分钟超时:?

<session-config> <session-timeout>60</session-timeout> </session-config>

?

?

8.设置上下文初始化参数(对于整个web应用都适用)

??

 <context-param>   <param-name>foo</param-name>   <param-value>bar</param-value></context-param>

?

?

servlet中获取上下文参数初始化

??String s=getContex().getInitParameter("foo");

3.重定向和请求分派的比较

?????<1>请求分派只能将请求转发给同一个web应用中的其他组件,而重定向不仅可以定向到当前应用程序中的其他资源,也可重定向到其他站点的资源上

 ?<2>重定向的访问过程结束后,浏览器的地址栏显示的URL会发生改变,变成重定向的目标URL,而请求分派的浏览器地址栏保持初始的URL

???<3>请求分派的发起者和被调者之间共享相同的request实例和response实例,属于同一个“请求/响应”而重定向的发起者和被调用者使用各自的request实例和response实例,各自属于独立的“请求/响应”过程。

?

请求转发 RequestDispatcher dis=request.getRequestDispatcher("Servlet2");

    ??dis.forward(request, response);

重定向????response.sendRedirect("Servlet2"); //重定向到指定路径的资源

?

get?post?比较

1. get是从服务器上获取数据,post是向服务器传送数据。

2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3.?对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4. get传送的数据量较小,不能大于2KBpost传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KBIIS5中为100KB

5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

?

?

Tomcat服务器

?

运行Java Web程序必须有相应Web容器支持,所有的动态程序代码都在Web容器中执行,Tomcat是一个web容器;

静态请求的所有代码操作都是固定的,动态请求操作的所有代码都是拼凑的;

Tomcat是有Apache软件基金会的Jakarta项目中的一个核心项目,有Apachesun和其他一些公司及个人共同开发而成;

使用Tomcat必须有JDK的支持

Tomcat中主要文件夹:bin/conf/lib/logs/webapps/work

任何服务器都是依靠端口号进行监听的

?

服务器配置

1)修改端口号——conf/server.xml

2)配置虚拟目录——磁盘下建立文件夹、建立WEB-INF文件、复制web.xml文件,服务器端配置<Context path="/sjwin" docBase="url"/>

修改conf/web.xml文件listingsfalsetrue,重启Apache服务

3)配置首页——index.xxx<welcome-file-list><welcome-file>main.htm</welcome-file></welcome-file-list>

?

?

?

  相关解决方案