【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
2017-04-28 16:39
375 查看
上面博文,主要简单的介绍了一下SSH的基本概念,比較宏观,作为刚開始学习的人可以有一个总体上的认识,个人觉得对学习有非常好的辅助功能。它不不过一个“瞭望塔”。更是检验是否真正掌握全部内容的一个前提。
Struts是基于MVC的框架。它进一步的对MVC进行了封装。它是怎么封装的,我们从先回想一下MVC再到Struts,再用Struts给大家实现一个简单登录的实例。我们開始吧。
大家都知道SUN公司对于MVC模式先后推出的一种规范,第一种是JSP Model1,另外一种则是JSP Model2;Model1就是jsp + javabean。Model2就是jsp + servlet + javabean两种模式。前者是纯JSP,后者是简单的MVC。我们通过两个时序图来对照一下Model1和Model2:
长处:
1、编码简单
2、适合小型项目
缺点:
1、显示层与业务逻辑混在一起
2、jsp的职责不单一。职责过重,不便于维护
长处:
1、分层清晰,职责清晰,比較适合于大型项目架构
2、可扩展性强
3、实现了业务逻辑和显示分离。减少系统的耦合度
缺点:
1、添加了大量编写代码的工作量
ActionServlet。前端控制器
1、依据对应的规则截取Http请求的URL
2、将Http请求分发到对应的Action处理
ActionForm,相当于实体
1、收集表单数据。将表单数据转换成对应的数据类型
Action,业务层控制器
1、 取得表单数据
2、调用业务逻辑
3、返回转向信息
我们再依据登录实例,对照上面的模型图,进一步理解一下Struts的基本原理,最后做一下总结。
*拷贝struts相关的jar到WEB-INF/lib下
*在web.xml文件里配置ActionServlet
*提供struts-config.xml文件,须要放到WEB-INF下
如图所看到的:
2、编写代码
web.xml
struts-config.xml
[code;'><?
xml version="1.0" encoding="ISO-8859-1" ?
>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.liang.struts.LoginActionForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/login"
type="com.liang.struts.LoginAction"
name="loginForm"
scope="request"
>
<forward name="success" path="/login_success.jsp"></forward>
<forward name="error" path="/login_error.jsp"></forward>
</action>
</action-mappings>
</struts-config>
LoginAction
LoginActionForm
Struts是基于MVC的框架。它进一步的对MVC进行了封装。它是怎么封装的,我们从先回想一下MVC再到Struts,再用Struts给大家实现一个简单登录的实例。我们開始吧。
MVC
概念
MVC全名是Model View Controller。是模型(model)—视图(view)—控制器(controller)的缩写,知道这么多就够了。大家都知道SUN公司对于MVC模式先后推出的一种规范,第一种是JSP Model1,另外一种则是JSP Model2;Model1就是jsp + javabean。Model2就是jsp + servlet + javabean两种模式。前者是纯JSP,后者是简单的MVC。我们通过两个时序图来对照一下Model1和Model2:
Model1
长处:
1、编码简单
2、适合小型项目
缺点:
1、显示层与业务逻辑混在一起
2、jsp的职责不单一。职责过重,不便于维护
Model2
长处:
1、分层清晰,职责清晰,比較适合于大型项目架构
2、可扩展性强
3、实现了业务逻辑和显示分离。减少系统的耦合度
缺点:
1、添加了大量编写代码的工作量
对照
Model1在一定程序上实现了MVC,即JSP是控制层与表示层合二为一了,这种效果显然不如将控制层单独划分出来的好。而Model2则是将控制层(sevlet)单独的划分出来了,专门负责业务流程的控制,接受页面的请求,创建所需的javabean实例,并将处理后的数据再返回给JSP。渲染页面,这样分层清晰,可扩展性强。减少系统的耦合度。Struts1
概念
说概念真谈不上,Struts实质上就是採用JavaServlet/JSP技术。在Model2的基础上实现的一个MVC框架。Struts1实现MVC的模型图
各部分的职责
尽管说Struts不难。但对于刚開始学习的人而言。真正的弄明确Struts也是一件非常easy的事,我们介绍一下几个关键点的职责,以便对struts的原理有更进一步的认识。ActionServlet。前端控制器
1、依据对应的规则截取Http请求的URL
2、将Http请求分发到对应的Action处理
ActionForm,相当于实体
1、收集表单数据。将表单数据转换成对应的数据类型
Action,业务层控制器
1、 取得表单数据
2、调用业务逻辑
3、返回转向信息
我们再依据登录实例,对照上面的模型图,进一步理解一下Struts的基本原理,最后做一下总结。
登录实例
1、配置Struts*拷贝struts相关的jar到WEB-INF/lib下
*在web.xml文件里配置ActionServlet
*提供struts-config.xml文件,须要放到WEB-INF下
如图所看到的:
2、编写代码
web.xml
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 标准 ActionServlet 配置文件--> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- 标准 ActionServlet Mapping配置信息 --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
struts-config.xml
[code;'><?
xml version="1.0" encoding="ISO-8859-1" ?
>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.liang.struts.LoginActionForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/login"
type="com.liang.struts.LoginAction"
name="loginForm"
scope="request"
>
<forward name="success" path="/login_success.jsp"></forward>
<forward name="error" path="/login_error.jsp"></forward>
</action>
</action-mappings>
</struts-config>
LoginAction
package com.liang.struts; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * 登录Action * 负责取得表单数据,调用业务逻辑,返回转向信息 * @author liang * */ public class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginActionForm laf =(LoginActionForm)form; //从ActionForm获取表单数据 String username = laf.getUsername(); String password = laf.getPassword(); UserManager userManager = new UserManager(); try{ //调用业务逻辑 userManager.login(username, password); //跳转到成功页面 return mapping.findForward("success"); }catch(UserNotFoundException e){ e.printStackTrace(); request.setAttribute("msg", "用户不能找到。用户名称=[" + username + "]"); }catch(PasswordErrorException e){ e.printStackTrace(); request.setAttribute("msg", "密码错误"); } //跳转到失败页面 return mapping.findForward("error"); } }
LoginActionForm
login.jsp<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> <form action="login.do" method="post"> 用户:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"><br> </form> </body> </html>
PS:登录页面不难,主要是一定注意action的名字和ActionServlet的配置一致。总结
Struts非常好的封装了MVC,界面从业务逻辑分离出来,灵活多变,同一时候,使用配置文件将控制层也变得更加灵活,减少了系统耦合。大道至简,一切变得轻松。简单了。
源代码
留个悬念。下篇博文,我们一步步重构MVC实现Struts框架的流程。
相关文章推荐
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
- SSH(一)~——Struts实现简单登录(附源码)
- 菜鸟学SSH(一)——Struts实现简单登录(附源码)
- 菜鸟学SSH(一)——Struts实现简单登录(附源码)
- 菜鸟学习SSH(一)——Struts实现简单登录(附源码)
- 【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
- MyEclipse整合SSH(Struts+Spring+Hibernate)简单登录范例(二)
- 【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
- ssh(struts+spring+hibernate)实现简单的插件化应用
- MyEclipse整合SSH(Struts+Spring+Hibernate)简单登录范例(二)
- ssh(Struts+Spring+Hibernate)环境搭建,实现登录
- 【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
- MyEclipse整合SSH(Struts+Spring+Hibernate)简单登录范例(二)
- MyEclipse整合SSH(Struts+Spring+Hibernate)简单登录范例(一)
- Struts Servlet简单实现登录随机验证码