博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb学习笔记
阅读量:4317 次
发布时间:2019-06-06

本文共 16621 字,大约阅读时间需要 55 分钟。

什么是javaweb、jsp、web服务器

 

web:浏览器通过与web服务器进行交互实现的,为了交互的进行,需要共同遵守一定的协议。就是HTTP(约定了浏览器和web服务器之间互相通信的规划),通过互联网传送文档的数据传送协议。

 

HTTP: 一种通信协议,允许将html从web服务器传送 到web浏览器,因此需要web服务器和web浏览器都支持该协议。

HTTP 协议对浏览器发出的request格式有三个规定:Request line 包括请求方法,请求资源的名字,现在所使用的协议;Request headers 它包含浏览器的一些信息;Request body。其中Request headers与Request body之间有一个空行。

对 web服务器返回的Response也有具体格式规定。和Request一样有三个部分:Response line,包含HTTP协议的版本信息,响应状态等;Response header,包括服务器的一些基本信息;Response body。Response header和Response body 之间有一个空行。

 Content type

服务器在接收到请求后,必须能识别要发送的信息类型,比如图片/txt本/excel表哥或者其他的形式。还需要知道网页的编码方式是什么。

ContentType 就是用于定义网络文件的类型,以及网页字符的编码,用于决定浏览器以什么形式,什么编码读取这个文件。

 

HTML:用于描述网页文档的一种标记语言。是一种规范、标准,通过标记符号来标记要显式网页的各个部分。

 

 

javaweb:用java开发在web上运行的项目。

web的项目,都是通过web来实现交互。

web运行于http协议上,来回传输的都是字符串。

不能让开发人员个个都去专门写解析,java web提供了一套底层标准,就是servlet,jsp那一套,能把字符串解析成java代码可以用的东西,再根据拟的定义,转给java类处理。​

 

JSP

客户端通过表单将数据提交到action指定的目的地址,在这个目的地址指向的页面,需要将数据提取出来。

这就需要一个动作脚本来完成动态网页中的数据交互。

这种动作脚本与html语言相结合来获取和处理表单提交的数据。

在javaweb中,这种用于服务器端处理数据的动作脚本就是jsp

 

jsp文件是运行在服务器端的脚本文件。

 

由于他包含java程序段,所以他需要被服务器编译才能运行。

jsp页面被部署在web服务器或者应用服务器上。

 

服务器管理jsp文件分两个阶段:

1、转化:当有一个jsp请求到来时,服务器首先检验jsp页面的语法是否正确,将jsp转换成servlet源文件,然后调用javac工具编译servlet源文件生成.class文件。

2、执行:servlet容器加载转化后的servlet类,实例化一个对象处理客户端的请求。在请求处理完成后,响应对象被服务器接受,服务器将html格式的响应信息发送给客户端。

 

jsp页面必须被部署和运行于web服务器中,所谓的web服务器使之为特定组件提供服务的一个标准化的运行时环境,其中封装了jsp运行所需要的底层api,为组件提供事务处理,数据访问,安全性,持久性等服务。

jsp网页主要分为脚本和网页数据两部分:网页数据就是jsp服务器不需要处理的部分。脚本是必须经由jsp处理的部分,通常是xml写的。

1、jsp中声明变量和方法 <%! declaration;%>

2、jsp中表达式 <%=circle.getArea()%>

 

编译指令:在jsp文件中包含在<%@   ……%>​中的部分,他不向客户端输出任何内容,是用来设置全局变量、声明类、方法和输出 内容的类型指令。

包含3种指令:page include taglib

page:定义jsp文件中的全局属性(包含language pageEncoding  errorPage 等)

include: 用来指定位置上的资源包含在当前jsp文件中。在jsp文件被编译为java文件是,这些被包含的资源会被作为jsp文件的一部分被翻译为java文件。 所以这些资源可以看做是jsp文件的一部分。(在一个jsp页面中,可以include另一个jsp页面,然后显示另一个jsp页面的元素。注:被包含的 jsp文件中不能有page指令,否则会发生冲突)

taglib:当jsp页面中引用了用户自定义标签时,用来声明这些用户自定义标签的。

jsp动作指令:<jsp:...../>利用xml语法格式的标签来控制jsp引擎的行为,影响jsp运行时的功能,并返回客户端的响应。

  <jsp:include>在客户端请求时间内,把静态或者动态资源包含在jsp页面内

  <jsp:forward>转发请求到其他jspp页面、servlet或者静态资源文件

  <jsp:param>提供参数(必须和<jsp:include>/<jsp:forword>等一起使用)

  <jsp:useBean>在jsp中使用一个javaBean实例,并声明该实例的名字以及作用范围

  <jsp:setProperty>用于给javaBean设置属性,该标签会调用javaBean的setXXX()方法去完成一个或者多个属性的设置

  <jsp:getProperty>用户获取javaBean中的属性值,将javaBean的值转换为String的类型,然后发送个到输出流中

 

e.g

Param.jsp

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>      页面跳转并且传递参数示例    从这个页面传递参数:  
    
  GetParam.jsp      
页面跳转并且传递参数示例    
    这个页面接受传递过来的参数:
    前一个页面传递过来的参数为:<%out.print(request.getParameter("param"));%>  

  

 jsp内置对象

 

为了简化jsp的开发,建立的内部对象。

这些对象不需要声明,可以再程序中直接使用。

九大内置对象:

1、request对象

request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

 

request对象用来接收客户端提交的各种信息。

常用的有这几种方法:

getParameter(String name) 获取客户端传给服务器的参数值,name指定表单中参数的名字

getParameterValues(String name)获得某一个参数的所有值,name指定参数名字

getAttribute(String name)获得request对象中某一个属性的值,name为属性名,该值由objt设置

setAttribute(String name ,Java.long.Object objt)给response对象设置一个名字为name的属性值,该值由objt设置

 

request对象最主要的一个作用就是用来封装用户提交的表单信息。然后通过以下的两个方法来获取用户提交的表单信息

getParameter(String name)

getParameterValues(String name)

 

该对象主要用来服务器来获取客户端的各种信息。

 

 

2、response对象

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

addCookie(Cookie cookie)

addHeader(String name,String value)

getOutputStream()获取客户端的输出流对象

sendRedirect(String location)重定向

 

注:forword地址栏不显示转向后的地址,转向地址和当前页面在同一web应用中,且在一次http请求中。

sendRedirect()完全跳转,浏览器将会得到跳转后地址,并重新发送链接。location可以是个url。

 

3、session对象

session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态(例如登录名、密码、上次访问时间等)用户退出系统是,这个session自动消失。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

getAttribute(String name)获取名字为name的属性

getAttributeNames()返回存储在session对象中的所有属性的名字,结果为一个枚举类型

setAttribute(String name,Java.lang.Object objt)设置一个名字为name的属性,其值为value

getId()返回sessionId

 

4、application对象

 application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

application对象保存着整个web应用运行期间的全局数据和信息。从web应用运行开始,这个对象就会被创建建。在整个web应用运行期间可以再任何jsp页面中访问这个对象。所以如果要保存在整个web应用运行期间都可以访问的数据,这时候就用到application对象。

application最常用的方法是 :getAttribute() setAttribute()

e.g:

使用application对象实现网站访问计数器功能 application.jsp

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>      利用application对象实现的计数器示例        <%      int count=0;      if(application.getAttribute("count")==null){        count=count+1;        application.setAttribute("count",count);      }else{        count=Integer.parseInt(application.getAttribute("count").toString);        count=count+1;        application.setAttribute("count",count);        }        out.println("你是本页第"+count+"个访问者!");    %>  

  

 

5、out 对象

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

动态的想jsp页面输出字符流,从而把动态的内容转化成html星矢来展示,在任何jsp页面中都可以任意访问。

close()

flush()输出缓冲区的内容

print(String str)

println(String str)

6、pageContext 对象

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

pageContext对象又称为jsp作用域通信对象。该对象提供了访问其他内置对象的统一入口,使用户可以方便的访问页面作用域中定义的所有内置对象。

getRequest() 返回当前页面的request对象

getResonse()

getServletConfig()

getServletContext()

getSession()

7、config 对象

config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

代表当前jsp页面的配置信息,但jsp页面通常无需预先进行配置,也就不存在配置信息了。

8、page 对象

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

表示当前jsp页面转换后生成的servlet类的实例

9、exception 对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

getMessage()

toString()

printStackTrace()

 

javaweb⑥servlet

1、servlet本质

servlet本质上就是java类,servlet是只能运行在服务器端的java类,而且必须遵循特殊的规范,在运行中有自己的生命周期。

servlet必须调用java servlet api,必须是对特定类或接口的继承或实现。并且,他必须重写特定的方法去处理客户端请求。

2、servlet作用

servlet主要功能是用来接受,处理客户端请求,并把处理结果返回到客户端显示。

3、servlet生命周期

servlet需要在特定的容器中才能运行,这里所说的容器即servlet运行时所需要的环境(如tomcat、resin、weblogic、websphere)

servlet的生命周期指的是servlet从被web服务器加载到它被销毁的整个生命过程

执行过程:

客户端-request->服务器[init(),servlet(),destory()-response]->客户端

生命周期:

servlet容器创建一个servlet实例--容器调用该实例的init()方法--容器向servlet传递客户端请求,并且调用此实例的service()方法--容器在销毁本实例前调动他的destroy()方法

在以上阶段中,servlet对外提供服务阶段是最重要的。service()方法是变成人员真正要关心的方法。因为他才是servlet真正开始响应客户端请求,并且处理业务逻辑的方法。service()接收到客户端请求后,再调用该servlet相应的方法去处理请求。

 

 

 

-------------------------笔记

 

http请求到容器,容器分析http网址,localhost:8080/servlet

/servlet在web.xml中查找对应的servlet配置,找到对应的servlet.java;

找到后,运行该servlet的 init,service,desrtoy.

其中service有doGet doPost方法来处理请求。

 

这里的servlet,泛指上面定义中的专门用来处理http请求的java类,包括有

servletConfig,

ServletException,

HttpServlet,

HttpServletRequest,

HttpServletResponse,

HttpSession,

ServletContext等。

 

doGet和doPost的区别

get是通过http header来传输数据,有字数限制,而post是通过http body来传输数据,没有字数的限制。

 

几个serverlet例子

1.读写

 

//设置服务器的响应内容类型,从文件中读取内容response.setContentType("text/html");response.setCharacterEncoding("gb2312");PrintWriter out = response.getWriter();String fileName = "content.txt";String realPath = new File(realPath);//取得文件绝对路径File file = new File(realPath);if(file.exists()){FileReader reader = new FileReader(file);BufferedReader bufferReader = new BufferedReader(reader);String line = null; //读取文件内容while((line = bufferReader.readLine())!=null){out.print(""+line+"
");}else{out.print("文件不存在");}} //设置服务器的响应内容类型,并创建一个文件response.setCharacterEncoding("gb2312");PrintWriter out = response.getWriter();String fileName = "new.txt";String realPath = request.getRealPath(fileName);File file = new File(realPath);FileWriter writer = new FileWriter(file);//在文件中写入内容BufferedWriter bufferWriter = new BufferedWriter(writer);bufferWriter.write("计算机网络");bufferWriter.newLine();bufferWriter.write("计算机组成原理");bufferWriter.flush();bufferWriter.close();writer.close();

 

2.取出http的头部内容,并在页面打印

response.setContentType("text/html");PrintWriter out = response.getHeader(name);//首先使用方法取出http头信息的名称,然后循环取出对应的头信息的值Enumeration e =request.getHeaderNames();while(e.hasMoreElements()){String name = (String)e.nextElement();String value = request.getHeader(name);out.println(name+"="+value+"
");}

  

 

javaweb ⑧struts2 基本概念+实现

在struts2中有一个核心控制器FilterDispatcher,它负责处理用户的所有请求,如果遇到以.action结尾的请求url,就会交给Struts2框架来处理,Struts2的工作流程如下:

客户端浏览器发送请求--核心控制器FilterDispatcher接收请求后,根据后面的扩展名,来决定是否调用action,以及调用哪个action--在调用action的execute方法之前,struts2会调用一系列的拦截器以提供一些通用的功能,如验证或文件上传等功能,这些拦截器的组合被称为拦截器链--在调用完拦截器链后,struts2就会调用action的execute方法,在execute方法中就会执行用户的相关操作--根据action的execute方法的返回值,会将处理结果信息返回到浏览器,这些结果可以是html页面,jsp页面、图像,也可以是其他的任何web资源

 

开发一个struts2框架程序的步骤:

配置web.xml文件--编写发出请求的页面--编写处理请求的action--配置关于action的映射文件--进行测试

 

准备工作:

myEclipse-创建web项目-导入struts2的包

 

 

开发步骤例子:

开发struts2的步骤:

1.配置web.xml文件
配置FilterDispatcher的xml

//过滤器名称
struts2
//指定Struts2过滤器的类名 org.apache.struts2.dispatcher.FilterDispatcher
//配置Struts2过滤器要过滤的路径
struts2
/*

   

2.编写发出请求的页面

<%@ taglib prefix="s" uri="/struts-tags"%>            hello world                

//使用property标签来获取Action中的属性

  

3.编写处理请求的action
实现业务逻辑message

package struts2;import com.opensymphony.xwork2.ActionSupport;public class HelloWorld extends ActionSupport{    public static final String MESSAGE="Hello World!I'm from struts2 ";    public String execute()throws Exception{        setMessage(MESSAGE);        return SUCCESS;        }    private String message;    public void setMessage(){        this.message=message;        }    public String getMessage(){        return message;        }}

  

4.配置关于action的映射文件

/helloWorld.jsp

  

5.进行测试

 

其他概念:

Struts2是基于J2EE平台的MVC框架,主要是采用servlet和JSP技术来实现的一个MVC框架。

Struts2=jsp+servlet

1、(jsp获取页面信息,传递给web容器,web容器分给对应的servlet)Struts2中,jsp获取数据,传递给FilterDispatcher来分派,找到对应的action来处理;

2、执行方法前后,会调用拦截器提供一些通用功能(验证/文件上传等)

3、调用完拦截器后,struts2 会调用action的execute方法,执行用户相关操作。(如果action中想对servletAPI做访问,就要用ActionContext类)

4、根据返回值返回 result 给浏览器,<result>元素的值可以是jsp页面文件,也可以是一个Action的name值。通过这些配置告诉Struts2框架,在执行Action后,将相应一个JSP文件或者将执行另一个Action。

 

5、在web的世界中,输入/输出是没有数据类型的概念的,任何数据都被当作字符串或字符串数组来传递。如果使用servlet+JSP,我们需要自己手动转换数据类型成为对象,然后处理之后再转换成字符串传递给用户。

Struts2中有强大的类型转换功能,对常用的数据类型提供了内建的数据类型转换器。

6、Struts2输入校验,action中有validate方法可以做校验的跳转。

 

taglib指令

编译指令是指在<%@ %>之间的部分,不向客户端输出任何内容,用来设置全局变量、声明类、方法和输出内容的类型指令。

 

taglib指令是当jsp页面中引用了用户自定义标签时,用来声明这些用户自定义标签的。

jsp引擎使用taglib指令以确定在jsp中遇到的用户自定义标签时应该怎样去做。

e.g  使用jsp标准标签库jstl中的c标签

uri:标识标签库描述符,唯一确定标签库的名字

prefix:定义前缀字符串,通过其对描述符文件标签进行引用

 

无论jsp页面中的自定义标签出现在什么位置,taglib指令都必须出现在页面的前端位置。

(TLD文件用来对应  自定义标签--对应处理程序 )

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><% session.setAttribute("Name","Smith");%>
${sessionScope.Name}

  

 

struts2标签

 用于获取ognlcontext对象中的属性值,亦称为数据标签。其中value的值为具体的属性名称。

获取request/session/application/attr/parameters这五个范围时,需要明确指定范围,比如

分隔后子字符串:

  

 

javaweb ⑨数据库操作 Hibernate

1.开发Hibernate程序的基本步骤

 创建Hibernate配置文件(对数据库中的数据进行配置)--创建会化工厂类(可以很方便的获得session对象)--创建实体类(一个实体类对应一张数据库表)--创建映射文件(指定哪个实体类和哪个数据库表对应)--操作数据库(可以进行数据库操作了)

安装mysql,在myEclipse中创建连接

 

连接完成后,可以开始开发了。

 

整合S2SH开发项目步骤

Hibernate+struts2

 

1.数据库层开发,

创建数据库s2sh,创建表book,字段bookID,bookNo,bookPrice,bookName
根据table的条目开发pojo类 Book 
持久层开发
编辑hibernate的cfg.xml,配置好ide和mysql的连接,添加po类的映射
<mapping resource="po/Book.hbm.xml" />。
编辑pojo类到数据库的映射 hbm.xml(Hibernate mapping);

  

编辑注释@Entity,@Id,@Column,自定义AnnotationSessionFactory类来获得session对象
编辑cfg.xml
<mapping class="po.Book"/>
编辑测试类,测试数据库设置和连接是否成功;
2.数据访问层开发
编辑DAO层,所有的操作数据的方法,保存数据、删除数据、修改数据、查询数据等;
DAO接口、DAO实现类,DAO工厂类
1.定义接口bookDAO,三个方法(添加书籍,根据bookNo查询书籍,查询所有书籍)
2.添加实现类bookDAOImpl,实现方法,并通过调用hibernate中方法完成数据访问操作
通过调用hibernate中的相应方法来完成数据访问操作。
3.业务逻辑层开发
业务逻辑层重点实现业务逻辑。通过调用数据访问层来实现的。
业务逻辑组件接口、业务逻辑组件实现类,业务逻辑工厂类。
编辑service 接口、实现、工厂类
4.表现层
1.添加书籍录入表单,接收书籍信息,bookInput.jsp
2.添加书籍录入控制器,并调用业务逻辑层完成书籍录入,BookInputAction
3.编辑struts.xml,配置action跳转页

 

Struts2+spring

1.添加框架支持
添加Spring框架支持,导入jar包,配置web.xml(添加contextLoaderListener监 
听器)
2.装配数据访问层,使数据访问层由Spring的IoC容器来管理
applicationContext.xml

  

3.装配业务逻辑层
在装配业务逻辑层之前,首先需要修改业务逻辑组件实现类,在该类添加一个数据访问层 
接口的类型,并为属性添加get和set方法,这样在装配业务逻辑层时,就可以在业务逻辑层注入数据 
访问层。
1.serviceImpl中增加 BookDAO和对应的getter setter
2.

  

通过前面这两个步骤,在业务逻辑层中就可以直接使用数据访问层中的方法了,在这里就 

看不到工厂类的影子了。
4.装配业务控制器
用来直接跟用户交互,需要调用业务逻辑层的方法完成特定的业务逻辑。
业务控制器同样需要在Spring中进行装配,并为其注入业务逻辑层示例对象。
在装配控制器之前,首先需要修改业务控制器类,在该类中增加一个业务逻辑层接口类 
型的属性,并为其添加get set方法。这样在装配业务控制器时,就可以为其注入业务逻辑层。
1.BookInputAction中增加 BookService和对应的getter setter
2.

  

Hibernate+Spring整合

整合前:在hibernate.cfg.xml中对数据源进行配置;整合后,在Spring配置文件 

applicationContext.xml中进行配置,就可以使用Spring容器统一管理数据源了。
1.使用Spring管理SessionFactory
2.使用HibernateTemplate类
在Spring中配置一个HibernateTemplate Bean,并注入SessionFactory实例对象
3.使用HibernateDaoSupport类
简化DAO开发的类,提供了一个setSessionFactory方法来接收一个SessionFactory 
对象,从而完成SessionFactory的注入。
还提供了一个setHibernateTemplate方法来接收一个HibernateTemplate对象,从 
而完成HibernateTemplate的注入。
同样HibernateDaoSupport类也提供了getSessionFactory和getHibernateTemplate 
方法来获得SessionFactory对象和HibernateTemplate对象

1.在applicationContext中配置各个bean

2.重新编辑DAO的内容, extends HibernateDaoSupport后重新编辑方法

4.使用Spring管理事务管理器

编辑applicationContext中配置bean transactionManager
5.为业务逻辑层注入事务管理器
在BookServiceImpl中增加transactionManager,并设置set、get
6.使用transactionTemplate进行事务管理
注入transactionManager之后,可以通过它来实例化一个TransactionTemplate。
通过调用TransactionTemplate的execute方法就可以进行事务操作
1.在BookServiceImpl中修改代码

  

javaWeb SSH开发步骤

1.UserDAOImpl.java 数据访问层实现类,在其中定义了增删改查功能

2.AspectJAnnotation.java 面向切面编程类,在其中定义了进行数据库操作前执行的代码
3.applicationContext.xml Spring的配置文件,在其中将数据访问层类和面向切面编程类进行配置
4.UserClient.java 用户功能测试程序,通过该程序来进行面向切面功能的测试

 

1.struts2 开发步骤:

1.配置web.xml
设置filter过滤器名称和路径
2.编写jsp页面
3.编写处理action
4.配置action的配置文件 struts.xml
<action name="HelloWorld" class="struts2.HelloWorld">
<result>/helloWorld.jsp</result>
</action>
1.数据库层开发,
创建数据库s2sh,创建表book,字段bookID,bookNo,bookPrice,bookName
根据table的条目开发pojo类 Book 
持久层开发
编辑hibernate的cfg.xml,配置好ide和mysql的连接,添加po类的映射
<mapping resource="po/Book.hbm.xml" />。
编辑pojo类到数据库的映射 hbm.xml(Hibernate mapping);

编辑测试类,测试数据库设置和连接是否成功;

2.数据访问层开发
编辑DAO层,所有的操作数据的方法,保存数据、删除数据、修改数据、查询数据等;
DAO接口、DAO实现类,DAO工厂类
1.定义接口bookDAO,三个方法(添加书籍,根据bookNo查询书籍,查询所有书籍)
2.添加实现类bookDAOImpl,实现方法,并通过调用hibernate中方法完成数据访问操作
通过调用hibernate中的相应方法来完成数据访问操作。
3.业务逻辑层开发
业务逻辑层重点实现业务逻辑。通过调用数据访问层来实现的。
业务逻辑组件接口、业务逻辑组件实现类,业务逻辑工厂类。
编辑service 接口、实现、工厂类
4.表现层

1.添加书籍录入表单,接收书籍信息,bookInput.jsp

2.添加书籍录入控制器,并调用业务逻辑层完成书籍录入,BookInputAction
3.编辑struts.xml,配置action跳转页

Struts2+spring
1.添加框架支持
添加Spring框架支持,导入jar包,配置web.xml(添加contextLoaderListener监听器)
2.装配数据访问层,使数据访问层由Spring的IoC容器来管理
applicationContext.xml
<bean id = "bookDAO" class="dao.BookDAOImpl"></bean>
3.装配业务逻辑层
在装配业务逻辑层之前,首先需要修改业务逻辑组件实现类,在该类添加一个数据访问层接口的类型,并为属性添加get和set方法,这样在装配业务逻辑层时,就可以在业务逻辑层注入数据访问层。
1.serviceImpl中增加 BookDAO和对应的getter setter
2.
<bean id = "bookService" class="service.BookServiceImpl">
<property name="bookDAO" ref="bookDAO"></property>
</bean>

通过前面这两个步骤,在业务逻辑层中就可以直接使用数据访问层中的方法了,在这里就看不到工厂类的影子了。

4.装配业务控制器
用来直接跟用户交互,需要调用业务逻辑层的方法完成特定的业务逻辑。
业务控制器同样需要在Spring中进行装配,并为其注入业务逻辑层示例对象。
在装配控制器之前,首先需要修改业务控制器类,在该类中增加一个业务逻辑层接口类型的属性,并为其添加get set方法。这样在装配业务控制器时,就可以为其注入业务逻辑层。
1.BookInputAction中增加 BookService和对应的getter setter
2.
<bean id = "bookInputAction" class="action.BookInputAction">
<property name="bookService" ref="bookService"></property>
</bean>

Hibernate+Spring整合

整合前:在hibernate.cfg.xml中对数据源进行配置;整合后,在Spring配置文件applicationContext.xml中进行配置,就可以使用Spring容器统一管理数据源了。

1.使用Spring管理SessionFactory
2.使用HibernateTemplate类
在Spring中配置一个HibernateTemplate Bean,并注入SessionFactory实例对象
3.使用HibernateDaoSupport类
简化DAO开发的类,提供了一个setSessionFactory方法来接收一个SessionFactory对象,从而完成SessionFactory的注入。
还提供了一个setHibernateTemplate方法来接收一个HibernateTemplate对象,从而完成HibernateTemplate的注入。
同样HibernateDaoSupport类也提供了getSessionFactory和getHibernateTemplate方法来获得SessionFactory对象和HibernateTemplate对象

1.在applicationContext中配置各个bean

2.重新编辑DAO的内容, extends HibernateDaoSupport后重新编辑方法

4.使用Spring管理事务管理器

编辑applicationContext中配置bean transactionManager
5.为业务逻辑层注入事务管理器
在BookServiceImpl中增加transactionManager,并设置set、get
6.使用transactionTemplate进行事务管理
注入transactionManager之后,可以通过它来实例化一个TransactionTemplate。
通过调用TransactionTemplate的execute方法就可以进行事务操作

转载于:https://www.cnblogs.com/zhizhiyin/p/6446520.html

你可能感兴趣的文章
win10 vs2015源码编译opencv、opencv_contrib、Tesseract
查看>>
css取消a标签在移动端点击时的背景颜色
查看>>
Annotation(注解)
查看>>
MySQL(四)--练习题
查看>>
高效掌握C#第五回---猜单词游戏
查看>>
07-Java 中的IO操作
查看>>
uclibc,eglibc,glibc之间的区别和联系【转】
查看>>
Java魔法堂:找外援的利器——Runtime.exec详解
查看>>
mysql数据库存放路径
查看>>
TestNG(五)常用元素的操作
查看>>
解决 Visual Studio 点击添加引用无反应的问题
查看>>
通过镜像下载Android系统源码
查看>>
python字符串格式化 %操作符 {}操作符---总结
查看>>
windows 不能在 本地计算机 启动 Apache
查看>>
iOS开发报duplicate symbols for architecture x86_64错误的问题
查看>>
Chap-6 6.4.2 堆和栈
查看>>
【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
查看>>
C# MySql 连接
查看>>
网络抓包分析方法大全
查看>>
sql 数据类型
查看>>