在过去的一段时间内,我一直对SSH(Spring、Struts2、Hibernate)的框架不是很了解,并使用这几个框架完成了简单的注册登录功能。学习过程中,我阅读了一些相关书籍,其中,对于初学者而言比较浅显易懂的、内容也比较丰富的电子书籍有:Spring开发指南,Spring从入门到精通,struts2入门教程,struts2权威指南,Hibernate 开发指南,Hibernate3.2官方中文参考手册。这些均在项目组的共享目录中。下面简单说下关于这三者学习的体会。
Hibernate是比较好理解的。Hibernate的功能就是将数据库的表格、视图等映射成为Java的类对象。这些类对象进行的操作,都通过Hibernate映射到对数据库的操作。Hibernate就是数据库和Java逻辑功能的桥梁。JDBC其实也是桥梁,但Hibernate的优点在于它封装了Java程序和数据库的连接关系,因此,一个简简单单的save方法就能像数据库表插入一个新的值。同时,Hibernate的封装还解决了Java程序和不同数据库连接时可能会出现的不同的SQL语句问题。要使用Hibernate,需要数据库表、简单的JavaBean类,Hibernate的配置文件,以及数据库表和JavaBean类的映射文件。
Struts2也比较好理解。Struts2是很流行的MVC框架。可以简单的将Struts2理解成为它的功能把显示给浏览器端的页面和网站后台的逻辑功能进行分离。Struts2的核心有两部分,拦截器和Action。Struts2的工作流程简化一下,大致是这样的:
a.浏览器发送请求
b.核心控制器根据请求找到对应的Action;
c.执行Action的execute方法,并将结果返回给客户端。
通过拦截器,Struts2将原先嵌入到JSP页面中的逻辑功能脱离出来放在服务器中,这样JSP页面只需要显示信息即可。Struts2的使用也需要Struts的配置文件、Action的功能逻辑操作,除此之外,使用了Struts2以后JSP的页面还可以用Struts的标签库进行数据显示。
个人以为Spring框架的提出,就是为了解决不同容器间的耦合关系。通过Spring,各种不同特性的容器能够得到良好的融合。对于Spring来说,可以把它理解成为USB接口,通过USB接口,优盘、MP3、移动硬盘、甚至光驱、手机,都能够和PC相连并且收发数据。控制反转、依赖注入,都可以理解为是,只要向Spring容器中注册一个对象,这个对象就能被其他已经在容器中存在的对象使用或者其本身通过Spring容器使用其他对象。
Spring中要重点理解Bean和BeanFactory的意义。Bean就是注入的对象,BeanFactory就是管理这些对象的容器。另一点需要注意的是,Spring的注入方式多种多样,设值注入、构造子注入、接口注入都是注入的方式。掌握Spring的难点在于Spring的配置文件。Spring的配置文件就是指定Bean之间的依赖和控制关系的。
在此我做了小的Demo,例子主要用于说明Strust2中的路径问题的说明。。。
首先新建一个web project.引入Struts需要的相关.jar文件,一般是七个文件,但不是所有的我们都能用上,我们为了方便起见,我建议我们在开发的过程中都把这些.jar文件都引入。在这只是做一个小的demo.其具体的做法如下,主要的代码部分:
在这个项目中首先修改web.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts2.xml配置文件如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="path" namespace="/path" extends="struts-default">
<action name="path" class="com.dr.struts.Path">
<result name="path">/path.jsp </result>
</action>
</package>
</struts>
编写一个类如下Path:
package com.dr.struts;
import com.opensymphony.xwork2.ActionSupport;
public class Path extends ActionSupport{
public String execute(){
return "path";
}
}
再次是index.jsp 如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Hello Struts2.0</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<a href="path/path.action">struts路径问题说明</a>
</body>
</html>
最后是一个path.jsp 文件:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'actionIntroduction.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br />
<a href="index.jsp">index.jsp</a>
<br />
虽然可以用redirect方式解决,但redirect方式并非必要。
<br />
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
<br />
或者使用myeclipse经常用的,指定basePath
</body>
</html>
现在我们可以部署我做的这个小例子了,把这个项目部署在我们的tomcat中启动,在浏览器中输入http://localhost:8080/struts2_0100_path/
运行结果如下: