struts2
来源:互联网 发布:think in java第五版 编辑:程序博客网 时间:2024/06/06 04:20
第 1 章 Servlet应用
本章所学内容大部分前面已经讲过了。重复的不再编写,就写没有的
1.获取初始化参数
在Web.xml中。 配置如下代码
<init-param>
<param-name>viewType</param-name>
<param-value>Excel</param-value>
</init-param>
在Servlet中重写init()方法,调用 String type = this.getInitParameter("viewType");
就可以获得初始化参数Excel了
2. 设置以Excel方式显示数据,如果是Servelt的request转发,则下载xsl文件,否则下载jsp文件
<%@ page 省略代码 contentType="application/vnd.ms-excel;charset=utf-8"%>
第 2 章 JSP+Servlet+JavaBean
1.设计模式和框架,
1.1 设计模式是一套被反复使用,成功代码设计经验的总结,模式必须是典型问题的解决方案。
类似于建筑物的设计图纸
1.2 框架是一种可重用,半完成的应用程序,开发者可以利用它快速开发需要。定制的程序,框架
最大的好处就是重用,面向对象系统获得最大的复用方式就是框架,
类似于建筑物的框架,已经搭建好了。
2.MVC设计模式
MVC设计模式是一种流行的软件设计模式,它分为三个部分。
1.模型(Model):表示数据和业务处理。
2.视图(view):是用户看到并与之交互的页面,如JSP或者HTML
3.控制器(Controller):接收用户的输入并调用模型和视图去完成用户的请求,它
不输出任何东西,也不做任何业务处理,只负责接收请求并决定调用哪个模型组件
去处理请求。然后确定用哪个视图来显示模型处理返回的数据。
第 3 章 自定义MVC框架(myStruts)
关于本章详细内容请看项目struts(框架),lesson3(实例),其中
1.Action接口: 有一个public String execute(HttpServletRequest request,HttpServletResponse
response)方法,
所有的业务操作都得实现这个接口。必须返回一个字符串,就是处理结果。
2.ActionMapping类: 有三个属性, name , className , resultMap 哈希表,
其中name表示请求要对应的名字,如login.action,则是login , className则是
保存Action接口对应操作的实现类的全限定名,resultMap哈希表是处理结果的集合。
3.Result类:有三个属性,name , value , redirect ,其中 ,name是execute的返回结果对应的字符串,
如success,value表示一个路径,可以根据这个路径转发或重定向,redirect 布尔值。true 和false表示
重定向和转发。
4.ActionMappingManager类,有一个 Map<String, ActionMapping> 的静态哈希表。表示全部的配置信息。
包括方法 init() 解析xml读取配置信息;getActionMapping()截取传过来的路径,然后从Map找到对应的
ActionMpping返回回去。
5.获取发出请求的路径,String actionName = request.getRequestURI();
6.xml配置
<actions>
<action class="com.sword.servlet.actionimpl.LoginAction" name="login">
<result name="success" redirect="true">success.jsp</result>
<result name="input" redirect="false">register.jsp</result>
</action>
<action class="com.sword.servlet.actionimpl.RegisterAction" name="register">
<result name="success" redirect="true">success.jsp</result>
<result name="input" redirect="false">register.jsp</result>
<result name="error" redirect="false">register.jsp</result>
</action>
</actions>
第 5 章 Struts2 初体验
1.Struts2的资源获取。
http://archive.apache.org/dist/struts/binaries/ 有下载。本章使用struts-2.1.6-all.zip
2.添加Struts到项目中,
可以点击项目右键。选择MyElipse - add Struts 方式添加,也可以手动把
commons-fileupload-1.2.1.jar, ognl-2.6.11.jar,
freemarker-2.3.13.jar,struts2-core-2.1.6.jar,xwork-2.1.2.jar,
添加到项目中。
3.实例.
3.1第一步。页面:
页面表单:
<h1>${message}</h1>
<form action="helloWorld.action">
请输入您的姓名:<input name="name" type="text"/>
<input type="submit"></form>
3.2第二步。创建 HelloWorldAction类,
这个类实现 com.opensymphony.xwork2.Action 里面的Action接口。
public String execute() throws Exception {
this.setMessage("hello,"+this.getName()+"!");
return SUCCESS; //返回静态常量SUCCESS ,
}
private String message; //保存信息,在页面使用
private String name; //声明name属性,保存表单提交过来的name,
public String getMessage() { 在页面使用${message} 的时候,自动调用这个方法
return message;
}
public void setMessage(String message) { //设置message的值
this.message = message;
}
public String getName() { //在页面使用${name} 的时候,自动调用这个方法
return name;
}
public void setName(String name) { //通过setName 内部在进入这个Action类的时候就给name
属性填充了值。
this.name = name;
}
注意:这个类的属性name,声明之后并且提供set,get方法,就可以获取表单提交的name的值了,也可以
供el表达式使用了.
在Struts2中,可以直接使用Action实现类的属性来接收用户的输入,通过Struts2的数据绑定机制。传
递name请求参数,
实际上等于调用了setName方法。同样在页面中调用${message}等于调用了getMessage()方法
经验:也可以用类保存信息,比如在这个类中有个user对象,user对象里有username和password, 那么
直接声明user对象,
提供get,set就可以了。然后在页面上表单元素的name属性使用 "user.username","user.password"
那么进入的Action类的时候,自动填充好这个user 对象
3.3第三步。配置web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
2.1和之后的版本使用
它//org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
2.0版本使用它//org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
3.4第四步.编写配置文件
在src目录下创建struts.xml文件。内容如下。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="default" extends="struts-default">
//我们主要编写的就是action,每多一个操作,就添加一个Action.
<action name="helloWorld" class="action.HelloworldAction">
<result name="success">index.jsp</result>
</action>
</package>
</struts>
在Struts 2配置文件中,
package元素用于定义 Struts 2处理请求的逻辑单元,
name属性为必须的并且唯一,用来指定包的名称(被其他包引用),
extends属性类似Java的extends,用于指定要扩展的包。
action元素用于配置Struts 2框架的工作单元Action类,action元素将以个请求的URL(action的名字)对
应到一个Action类,
name属性是必须的,用来表示action的名字,
class属性可选用于设定Action类的全限定名,
result元素用来设定Action类处理结束后,系统下一步做什么,
name属性表示result的逻辑名,用于与Action类返回的字符串进行匹配,
result的值用来指定这个结果对应的资源的位置
3.5 Action接口常量字符逻辑含义
常量 逻辑含义
SUCCESS 表示程序处理正常,并成功给用户成功后的结果
NONE 表示处理正常结束,但不返回给用户任何显示
ERROR 表示处理结果失败
INPUT 表示需要更多用户输入才能顺利执行
LOGIN 表示需要用户正确登录后才能顺利执行
4.Struts 2 访问Servlet API
4.1 与Servlet API解耦访问方式
Struts 2框架对Servlet API中的HttpServletRequest,HttpSession,ServletContext进行了封装,
构造了三个Map对象来替代这三种对象。 如下代码案例:
4.1.1获取request
ActionContext ac = ActionContext.getContext();
Map request = (Map)ac.get("request");
4.1.3获取request
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
4.1.3获取request
ActionContext ac = ActionContext.getContext();
Map application = ac.getApplication();
4.1.4 使用
比如之前是request.setAttribute("score",50);
现在就是 request.put("score",50);
4.2 与Servlet API耦合访问方式
要直接获取Servlet API对象可以使用 org.apache.struts2.ServletActionContext类,
该类是AcationContext类的子类,该类有下面的方法来获取Servlet API对象
public static HttpServletRequest getRequest();
public static ServletContext getServletContext();
public static HttpServletResponse getResponse();
session对象的话。 在request里可以获取, 你懂的。
5.Struts 2 标签与数据校验
5.1 UI标签
1.表单标签
<s:form></s:form> 相当于<form>标签
<s:textfield></s:textfield> 文本输入框
<s:password></s:password> 密码输入框
<s:textarea></s:textarea> 文本域输入框
<s:radio></s:radio> 单选框
<s:checkbox></s:checkbox> 多选框
<s:submit/> 提交按钮
<s:reset/> 重置按钮
<s:hidden/> 隐藏域标签
2.使用实例
导入标签库
在页面上方 :<%@ taglib uri="/struts-tags" prefix="s" %>
<s:form action="register.action" method="post">
<s:textfield cssClass="text" label="用 户 名 " name="user.name" />
<s:password cssClass="text" label="密 码" name="user.password" />
<s:password cssClass="text" label="确认密码" name="repassword" />
<s:textfield cssClass="text" label="电 话" name="user.telephone"></s:textfield>
<s:textfield cssClass="text" label="用户姓名" name="user.username" ></s:textfield>
<div class="buttons"><s:submit name="submit" value="立即注册" /></div>
</s:form>
注意:web.xml的请求拦截 。必须配置成 /* 才能起作用。否则出错
5.2 数据校验
我们不实现Action类,而是继承ActionSupport类,完成Action的开发,
ActionSupport类全限定名为com.opensymphony.xwork2.ActionSupport;其中不仅
对ACtion接口进行了简单的实现,如果在Action配置中省略了class属性,则代表
访问ActionSupport类,其execute方法直接返回SUCCESS,同时ActionSupport类还
增加了对验证和本地化等的支持。
一般情况下的Action类开发,都会选择继承此类,他提供一个 validate方法。
在进入execute方法之前就会进入这个方法。则可以这样验证,如下代码
/**
* 执行验证操作
* 一旦验证失败,要求必须提供一个名为input的result配置
*<result name="input" type="dispatcher">/login.jsp</result>
* 只做一些非空,格式等等的表单的验证
*/
public void validate() {
if (name == null || name.length() == 0) {
super.addFieldError("name", "用户名不能为空");
}
if (pwd == null || pwd.length() == 0) {
super.addFieldError("pwd", "密码不能为空");
}
}
在页面中可以直接用<s:fielderror name="name" fieldName="name"></s:fielderror>
可以获取到失败之后的字符串. 或者<s:actionerror/>
0 0
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- struts2
- Struts2
- Struts2
- Struts2
- struts2
- struts2
- STRUTS2
- Struts2
- Struts2
- iOS 开发 后台机制
- Unix 套件管理工具
- (ros:Robot Operating System)卸载ros
- 学习笔记之在 LINQ 外部使用 Lambda 表达式(C# 编程指南)
- 使用*{padding:0;}遇到的坑
- struts2
- AppStore苹果应用支付开发(In App Purchase)翻译
- poi读取xlsx
- Android 下Spinner下拉框创建方法
- 交叉编译libx264,用于arm上视频采集的h264编码。
- SpringMVC如何准备数据
- hadoop2.6.0 namenode格式化报错
- Fragment笔记和源码阅读
- C++文本流fstream在Linux和Windows中换行的处理问题