Struts 2初体验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts 2初体验相关的知识,希望对你有一定的参考价值。
Struts2简介:
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Struts 2 目录结构:
apps目录:Struts2示例应用程序
docs目录:Struts2指南、向导、API文档
lib目录:Struts 2的发行包及其依赖包
src目录:Struts 2项目源代码
使用Struts 2 开发程序的基本步骤
--手动添加Struts支持
1.第一步:加载Struts2 类库,既是添加jar包
1. commons-logging-1.1.x.jar ASF出品的日志包,struts2使用这个日志包来支持JDK和Log4j的日志记录。
2. freemarker-2.3.x.jar 表现层框架,定义了struts2的可视组件主题,struts2的UI标签的模版,使用FreeMark编写
3. ognl-2.6.x.jar 对象图导航语言(Object Graphic Navigation Language),struts2框架通过其读写对象属性,一种功能强大的表达式语言
4. struts2-core-2.x.x.jar struts2的核心类库
5. xwork.jar webwork的核心库,struts2在其上构建
6. commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件
7.struts2-dojo-plugin-2.3.4 为struts所提供的一些控件例如:日历
2.第二步:配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置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> </filter-mapping> <!-- 注意: 1.filter-class中类的地址可在: (1)可建一个类,在类中点出来。 (2)或直接在Libraries 下 struts2-dojo-plugin-2.1.8.jar下找到右键copy类的路径,但必须把后缀点class删掉。 2.url-pattern中的值: (1)/*代表所有页面都会经过此过滤器。 (2)或*.action或*.do后缀的页面都会经过此过滤器。 --> </web-app>
3.第三步:开发视图层页面login.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>登录页面</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> <h3>登录页面</h3> <form action="userAction" method="post" > 用户名:<input type="text" name="uname"/><br /> 密码: <input type="password" name="upassword" ><br /> <input type="submit" value="提交登录" > </form> </body> </html>
4.第四步:开发控制层com.struts包下或com.action包
package com.struts; /** * 控制层 * @author asus * */ public class UserAction { /** * 此属性用来接收form表单提交过来的值,属性名与form表单中name属性名一致 * 必须生成get,set方法 */ private String uname; private String upassword; public String execute(){ if(uname!=null && uname.equals("admin") && upassword.equals("123")){ //进入则代表账号密码输入正确 return "success"; } return "error"; } /** JavaBean */ public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpassword() { return upassword; } public void setUpassword(String upassword) { this.upassword = upassword; } }
5.第五步:配置Struts 2配置文件src下创建(struts.xml)需要选TDT struts-2.1.dtd
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" > <!-- 配置Struts2配置文件 --> <struts> <!-- package:包 name:包名,唯一的,必选项 namespace:命名空间,唯一的,相当于房间号。可选项,省略情况下是“/” extends:继承 extends=“struts-default”:struts2框架底层提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件 为什么要继承这个struts-default.xml文件 因为struts框架底层提供的struts-default.xml声明了所有的拦截器和拦截器栈。 我们知道struts2框架运行时执行struts-default.xml中的拦截器栈完成必要功能。 如果不继承struts-default.xml文件,就没有办法使用struts2提供的所有拦截器。 --> <package name="struts2" namespace="/" extends="struts-default" > <!-- action: name:对应页面请求链接的后面半部分 class:对应要执行的类的完整路径 --> <action name="userAction" class="com.struts.UserAction" > <!-- result:结果类型 name:对应的是执行的类的方法的返回值 后半部分文本内容:转向的页面 --> <result name="success" >/loginSuccess.jsp</result><!-- 账户密码正确跳转此页面 --> <result name="error" >/login.jsp</result><!-- 账户密码错误跳转登录页面重新输入 --> </action> </package> </struts>
6.第六步:部署、运行项目
--自动添加Struts支持
--MyEclipse自动添加Struts 支持
右键项目-->MyEclipse-->Add Struts Capabilities
注意:Hibernate+Struts2时,若两个支持都是自动生成的则会有一个 antlr-2.7.2.jar 包冲突。必须去掉一个。一般是移掉Struts2的。
附加移除操作图:
使用对象接收from表的提交的值
属性设值的方式
(1):简单:在Action设置属性,生成SET与GET方法。
参数的名称与属性的名称一致。
(2):Action中设置Bean的属性
Bean必须生成SET、GET方法。Bean不可以实例化。
Bean中必须要有一个默认的空参数的构造方法。
参数的名称 = bean的名称.bean中属性的名称。
Struts 2访问Servlet API
/** Struts 2访问Servlet API */ /**1.与Servlet API解耦的访问方式*/ //上下文对象 ActionContext context = ActionContext.getContext(); //request范围 Map<String, Object> request=(Map<String, Object>) context.get("request"); request.put("num1", 1); //session范围 Map<String, Object> session = context.getSession(); session.put("num2", 2); //application范围 Map<String, Object> application = context.getApplication(); application.put("num3", 3); /** 2.与Servlet API耦合的访问方式*/ //request范围 HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("num1", 4); //session范围 HttpSession session = ServletActionContext.getRequest().getSession(); session.setAttribute("num2", 5); //application范围 ServletContext application = ServletActionContext.getServletContext(); application.setAttribute("num3", 6);
以上是关于Struts 2初体验的主要内容,如果未能解决你的问题,请参考以下文章