SSH进阶(3)——Struts2原理介绍及环境搭建
2016-02-05 14:07
483 查看
【框架概述】
Struts2在SSH中的位置:
1.Struts框架
Struts是最早的java开源框架之一,它是MVC设计模式的一个很好的实现。Struts定义了一个通用的Controller,通过配置文件(Struts.xml)让Model和view不直接接触,以Action的定义对用户请求做了一个封装,解耦的体现,让各层职责清晰。Struts还提供了自动将请求的数据填充到对象以及页面标签等简化编码的工具。
2.Struts2框架
相对于Struts框架,他吸收了部分优点,提供了一个更加简洁的MVC设计模式实现的web应用程序框架。新特性包括:从逻辑中分离出拦截器的概念,减少或者消除配置文件,贯穿这个框架的强大的表达式语言,支持可变更和可重用的的基于MCV模式的标签API,比如:<s:property value="model.oid"/>。
【体系结构】
处理流程的核心步骤:1.浏览器发送一个请求
2.核心控制器根据请求决定调用某个Action去处理
3.拦截器链自动对请求应用通用功能,如数据类型转换等
4.执行Action
5.返回到视图显示,从Struts.xml中去读取
【Struts2配置】
1.web.xml
是web应用程序的部署描述文件,它是web应用中加载有关Servlet信息的重要文件,是用来初始化Servlet,Filter等web应用程序的作用。Struts2需要在里面配置Struts2的核心过滤器,等下例子中会体现的。
2.Struts.xml
是Struts2的主配置文件,可包括的内容有Bean配置,Interceptors配置,Action配置,Result配置等等。
【Action】
Struts2中的Action是进行逻辑处理的Bean,是Struts2的核心内容。虽然理论上Struts2的Action不需要实现任何接口,或者继承任何的类。但是为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类。Struts的Action是逻辑成处理的核心Bean,相当于MVC框架中的M部分,它的作用表现在:1.业务逻辑入口点 2.数据转移 3.结果路由跳转。接收用户数据使用Action类中的属性接收,使用领域对象模型接收用户数据,我在项目中用到的是第三种:使用Struts2独有的模型驱动(ModelDriven)接收,实现模型驱动接口com.opensymphony.xwork2.ModelDriven。
【Struts2环境搭建】
1.创建一个web工程
2.引入jar包和配置文件:
jar包:struts-2.3.15.3\apps\struts2-blank.war\WEB-INF\lib\*.jar
struts-2.3.15.3\lib\struts2-json-plugin-2.3.15.3.jar
struts-2.3.15.3\lib\struts2-spring-plugin-2.3.15.3.jar
配置文件:
web.xml
<!-- 配置Struts2的核心过滤器 --> <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> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
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> <constant name="struts.devMode" value="false" /> <package name="shop" extends="struts-default" namespace="/"> <!-- 配置自定义拦截器:注册拦截器的地方 --> <interceptors> <interceptor name="privilegeInterceptor" class="cn.itcast.shop.interceptor.PrivilegeInterceptor"/> </interceptors> <global-results> <result name="msg">/WEB-INF/jsp/msg.jsp</result> <result name="login">/admin/index.jsp</result> </global-results> <!-- 配置后台登录Action --> <action name="adminUser_*" class="adminUserAction" method="{1}"> <result name="loginFail">/admin/index.jsp</result> <result name="loginSuccess" type="redirect">/admin/home.jsp</result> <interceptor-ref name="privilegeInterceptor"> <param name="excludeMethods">login</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </action> </package> </struts>
3.编写Action类:
根据结果返回字符,然后struts.xml根据返回的字符跳到相应的页面/** * login method--azz */ public String login() { User existUser = userService.login(user); // use the username and pwd check the user is exist if (existUser == null) { //login fail this.addActionError("error,your user or pwd is error, please login again..."); return LOGIN; } else { // login success // set the user information into the session ServletActionContext.getRequest().getSession() .setAttribute("existUser", existUser); // goto the struts.xml ↓ //<result name="loginSuccess" type="redirect">/admin/home.jsp</result> return "loginSuccess"; } }
4.写jsp页面
新建一个jsp页面来呈现信息。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>网上商城管理中心</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link href="${pageContext.request.contextPath }/css/general.css" rel="stylesheet" type="text/css" /> <link href="${pageContext.request.contextPath }/css/main.css" rel="stylesheet" type="text/css" /> <style type="text/css"> body { color: white; } </style> </head> <body style="background: #278296"> <center><s:actionerror /></center> <form method="post" action="${pageContext.request.contextPath }/adminUser_login.action" target="_parent" name='theForm' onsubmit="return validate()"> <table cellspacing="0" cellpadding="0" style="margin-top: 100px" align="center"> <tr> <td style="padding-left: 50px"> <table> <tr> <td>管理员姓名:</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>管理员密码:</td> <td><input type="password" name="password" /></td> </tr> <tr><td> </td><td><input type="submit" value="进入管理中心" class="button" /></td></tr> </table> </td> </tr> </table> <input type="hidden" name="act" value="signin" /> </form> <script language="JavaScript"> <!-- document.forms['theForm'].elements['username'].focus(); /** * 检查表单输入的内容 */ function validate() { var validator = new Validator('theForm'); validator.required('username', user_name_empty); //validator.required('password', password_empty); if (document.forms['theForm'].elements['captcha']) { validator.required('captcha', captcha_empty); } return validator.passed(); }
其中用到了简单的校验。Validator是一个独立于表现和业务逻辑的一个FrameWork,它通过预定义一组校验规则以及提供了一套简单的扩展机制,让程序员可以自由的定义自己复杂的校验规则。规则与规则可以是相互依赖的,也可以是独立的。
【总结】
Struts2基本的框架搭建回顾了一下,对Struts2的原理进行了初步的了解,下一步就是多多应用。封装用户的请求,是代码更清晰,业务更明确。
相关文章推荐
- Java笔记---内部类的使用
- maven-spring-mybaties-restful 整合 有源码项目 内容实用
- SpringMVC学习笔记(一)
- android在eclipse中打包(签名包)方法及常见问题解决
- 判断java对象是否还“活着”
- 2016蓝桥杯假期任务之《区间k大数查询 》
- Java [Leetcode 88]CMerge Sorted Array
- eclipse查看hadoop2源码
- Struts2 语法--验证方式:
- velocity使用配置
- Hadoop—HDFS的Java客户端编程
- atomic提供原子操作的类
- 关于Struts2中的No result defined for action and result input错误
- JAVA数据类型转换
- struts2学习笔记--线程安全问题小结
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
- Java集合类总结 (五)
- java反射快速入门(一)
- Java transient关键字使用小记
- Java SE 7 中带资源声明的 try 语句(try-with-resources statement)