目录
项目技术总体概述
开发工具
1、开发工具:myeclipse10.0、tomcat7.0
2、数据库:mysql
3、操作系统:windows 10
5、开发语言:java、struts2、JSP
简介
本住院信息管理系统采用B-S架构,使用Java EE的技术路线,遵守MVC Model模型。
Model模型层使用数据库作为持久性储存结构,选用的后台数据库是myql。这是业界领先的数据库。
View视图层使用JSP技术。这是Java EE平台推荐的表现层技术。住院信息管理系统中使用JSP2.0规范,严格控制页面代码中的业务逻辑部分,做到不在HTML代码中混杂Java业务代码,实现了很好的业务和表现的分离。
Controller控制层采用Servlet技术。页面获取的数据通过Servlet的转发传递给后面的Java Beans进行数据的封装和与数据库的交互,反馈信息由Java Beans传递给Servlet,再由Servlet进行转发,从而实现业务逻辑和表现的完全分离。
本住院信息管理系统使用struts2.1作为MVC开发框架,整个系统有struts框架作为MVC的后台运行支持。
关键技术解析
B/S架构
B/S架构的全称为Browser/Server,即浏览器/服务器结构。
Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现。
B/S架构的系统无须特别安装,只有Web浏览器即可。
其实就是我们前端现在做的一些事情,大部分的逻辑交给后台来实现,我们前端大部分是做一些数据渲染,请求等比较少的逻辑。
B/S架构的分层:
与C/S架构只有两层不同的是,B/S架构有三层,分别为:
第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。
第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。
第三层数据层:主要是接受客户端请求后独立进行各种运算。
MVC Moudle模型
module,view,controller的缩写,就是分离模型,视图和控制的模式。
view:视图层,提供UI和呈现数据
module:模型层,业务数据的信息表示
controller:控制层,调用业务逻辑产生合适的module,传递数据给视图层用于呈现.
在该项目中采用的是Model2:
是MVC的体现,javabeans是Module,而jsp仅仅充当View,Servlet是controller。
jsp向servlet提交数据,servlet进行javabeans的实例化和调用,而javabeans进行数据库的访问读取。最后servlet将访问结果交给jsp呈现。
Struts2
Struts2的原理示意和使用流程:
原理:
下面演示一个完整的使用Struts2的实例,目的不是具体的代码,重点在于理解整个框架的运作流程。首先我们需要从apps目录中的struts2-blank示例项目中拷贝出整个lib目录。(这是使用Struts2最基本的jar包,没必要从Struts2的lib中一个一个找,因为你也不知道哪些是必需的),我们将他们导入到我们的项目中。
具体的代码中的实现:
//web.xml,首先在web.xml中添加如下代码,拦截所有请求,即所有请求现在全部归Struts2框架管了
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
//编写Action充当控制器
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername(){
return this.username;
}
public void setUsername(String s){
this.username = s;
}
public String getPassword(){
return this.password;
}
public void setPassword(String s){
this.password = s;
}
public String execute() throws Exception{
if(getUsername().equals("walker")&&getPassword().equals("yam")){
return SUCCESS;
}
return ERROR;
}
}
//新建Struts.xml文件用于配置框架
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="walker" extends="struts-default">
<action name="login" class="MyPackage.LoginAction">
//在这里并没有指定调用Login.Action中的哪一个方法,就会默认调用excute()方法。
<result name="error">/error.jsp</result>
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
/*login.jsp*/
<html>
<head>
<title>login</title>
</head>
<body>
<form method="post" action="login">
姓名:<input type="text" name="username" /><br />
密码:<input type="password" name="password" /><br />
<input type="submit" value="提交"/>
</form>
</body>
</html>
提交之后会请求URL为login的页面,login页面中已经声明了action是“login”,会跳转到指定的控制器。框架拦截器拦截,搜索Struts.xml中该URL所对应的Action控制器,转向具体的控制器,在我们写的LoginAction控制器中,我们获取表单提交的参数并做简单判断(使用的是set方法:接受前端传来的两个数据password和username),返回字符串success或者error给核心拦截器。核心拦截器读取Struts.xml中的配置查找控制器返回的字符串对应的具体视图位置(实现了页面的跳转),forward视图页面响应用户。
必要的Action类
控制类中转类
Action中get,set方法的使用流程?
前台form中有一个<input type="text" name="username"/>
如果传到action。在action中应该有一个属性,名字也叫username;而且这个username有get/set方法,其中get方法的命名必须为getUsername,其中set方法的命名必须为setUsername。这里方法名称按java Bean的规定
。注意不是setUserName和getUserName。
当struts接受这个action请求时,struts调用 username的set方法把前台的值传到action中的username(自动调用的),当action处理完成,要返回到页面时。在生成jsp的过程中,你可以在页面中使用EL,${username},这时调用username的get方法。
例如下边实例:
class Bean{
//普通公有属性
public Integer id;
//标准的java bean set/get方法
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
2,还有,get方法的命名,为什么一定要,比如参数a,get一定要命名为getA();geta()则不行。如果参数是A呢,get什么?参数命名为A就不正确,不符合规则。所以不存在问题。
上边问题中的命名方法getA是按java Bean的规定来命名的。这个标准就是java bean的标准,标准包括标准的set/get方法相关的东西。这个是开发struts的人定的标准,并没有特定的意义,只是为了让它规范化,有一个统一的标准。
如果你知道什么是javaBean,你就知道属性abc的get/set方法为什么是setAbc/getAbc
更深层次,你就应该了解Ioc,控制反转。
3,Struts2中Action必须实现execute方法吗?不必须,可以指定处理方法。
你配置里写了method={1}就会调用对应的方法,只有当你没指定method时,struts2才会默认调用execute 方法。
<package name="helloworld" extends="struts-default">
<action name="hello"
class="MyFirstPackage.HelloworldAction"
method="execute">
<result name="success">/HelloWorld.jsp</result>
</action>
</package>
项目目录文件
后端
action包:
实现各种需要得控制器Action
dao包:
作为用户的逻辑层,实现需要的各种功能,充当Moudle的角色
dbconn包:
数据库连接文件。
pojo包:
为数据库的每个表建立一个类,便于管理每个类的数据,方便程序的编写,实体类
Serializable接口:
1、什么是Serializable接口
一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。
2、什么是序列化?
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
3、序列化对象定义
把对象转换为字节序列的过程称为对象的序列化
把字节序列恢复为对象的过程称为对象的反序列化4、什么情况下需要序列化?
当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。
前端
后端主要采用的是jsp进行书写,的通过ajax向后端发送请求。
项目总结
该项目实现的功能比较简单,但是struts的代码编写太繁琐,把时间浪费到这些上面不仅耗费精力而且没有对功能进一步深入,没有考虑项目的并发性,以及数据库的数据更多的情况等等,以及安装服务器tomcat以及进行装配都浪费不少时间。
接下来准备学习SpringBoot+Mybatis,节省开发成本。