Struts2框架学习之一:Hello World程序
来源:互联网 发布:公积金网络消费贷款 编辑:程序博客网 时间:2024/06/04 18:06
前言
Struts2框架Apache基金组织下的一个开源框架,基于MVC模式设计的Web应用开发框架。Struts 2是一个用于开发Java EE网络应用程序的开源Web应用框架,它利用并扩展了Java Servlet API,鼓励开发者采用MVC架构。目前struts2的最高版本是2.5(测试版)。
快速入门
1、下载和安装
可以从官网直接下载最新的struts开发包,官网有多个版本,使用的时候下载full版本即可。下载之后,只需要进行解压就可以使用了
2、Hello World程序
以下是建立Struts2的HelloWorld程序的详细步骤:
- 在myeclipse中创建web project
从下载的struts解压文件中导入jar包
说明:这里的jar包为了简洁,建议直接从app目录下的struts2_blank.war中的lib目录下的jar包拷贝过来。这样做的原因是比较省事,自己找jar包太麻烦。
其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> </filter-mapping>
- 编写action类文件。在src目录下创建HelloWorld.java文件,如下:
package example;public class HelloWorld { private String meg; public String getMeg() { return meg; } public void setMeg(String meg) { this.meg = meg; } public String execute(){ meg = "Hello World"; return "success"; }}
- 配置structs.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.enable.DynamicMethodInvocation" value="false" /> <!-- 这项配置表示是否启用开发者模式,开发者模式的好处可以自动部署代码的修改,方便调试 --> <constant name="struts.devMode" value="true" /> <!-- name属性指定在浏览器中的访问地址,class属性指定该action对应的类的全限定名 --> <action name="hello" class="example.HelloWorld"> <!-- result指定该action跳转的路径,其name属性的默认值就是success,所以当name属性是success的时候可以不写name属性 --> <result name="success">/index.jsp</result> </action> </package> <!-- Add packages here --></struts>
- 编写jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!-- 添加这项配置表示使用struts2的标签库,就像使用jstl时一样 --><%@ taglib uri="/struts-tags" prefix="s" %><%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>struts2</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> </head> <body> <!-- 这是struts2自带的标签,value属性表示获取meg属性的值 --> <s:property value="meg"/> </body></html>
- 启动服务器,在浏览器中就可以看到hello world了。至此,hello world程序建立成功。
Struts2项目开发小结
Struts2的开发步骤主要分为:
- 准备jar包,建议直接使用struts-blank.war项目中的jar包,这是该版本最精简的jar包了
- 在web.xml中添加struts2过滤器的相关配置(这个步骤在整个项目开发过程中只会编写一次)
- 开发Action,针对不同的功能开发不同的Action。就像在Servlet中开发不同的Servlet类似
- 在struts.xml配置文件中添加上一步骤开发的Action的相关配置
- 编写相关的结果页面
struts2表单处理
我们继续在现在的项目基础上创建一个表单,用以说明struts2中如何接受和设置参数。
- 创建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>login.jsp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <form action="login" method="post"> <table> <tr> <td>用户名:</td> <td><input name="user.username"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="user.password"></td> </tr> <tr> <td colspan="2"> <input type="submit"> </td> </tr> </table> </form> </body></html>
- 创建LoginAction
package action;import bean.User;public class LoginAction { private User user; public String execute() { if ("admin".equals(user.getUsername()) && "123".equals(user.getPassword())) return "success"; return "error"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
- 配置Action
<!-- 登录Action --> <action name="login" class="action.LoginAction"> <result>/success.jsp</result> <result name="error">/error.jsp</result> </action>
- 创建User类
package bean;public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
- 编写success.jsp和error.jsp文件
success.jsp(省略部分代码)
<body> <h3> <s:property value="user.username"/>,登录成功 </h3> </body>
error.jsp(省略部分代码)
<body> 登录失败,请重新登录 <a href="login.jsp">返回</a></body>
注意在表单name属性的书写格式:user.username
。但是我们在LoginAction中并未使用任何初始化的方法构造User对象,那么值是怎么传递过来的呢?在Struts2中使用了自动绑定的机制,当LoginAction中获取user.username
属性的时候,实际上会执行以下过程:
action.getUser();//当Struts2发现获取的User对象是null的时候,调用以下的语句action.setUser(new User());//通过调用User类的默认构造方法,实例化User对象之后,就可以设置username的属性的值了action.getUser().setUserName();
除了以上的方式,还可以使用Action属性获取jsp页面表单的值,就是form表单的属性写在Action中,然后添加set和get方法,同样可以获取。不过个人感觉这种方式没有上一种简洁,所以就不贴代码了。
Struts2访问Request、Session和Application对象
在Struts2中有多种方式可以访问以上三个对象,但可以分为两类:与Servlet API解耦的访问方式(也是个人推荐使用的方式,一目了然,简单清晰)和与Servlet API耦合的访问方式。下面介绍与Servlet API解耦的方式。
通过访问com.opensymphony.xwork2.ActionContext类可获取以上三个对象,方式如下:
//获取以上三个对象 request = (Map) ActionContext.getContext().get("request"); session = ActionContext.getContext().getSession(); application = ActionContext.getContext().getApplication(); //在request中放值 request.put("hello", "欢迎访问"); //在session放值 session.put("user", user); //在Application中放值 Integer counter = (Integer) application.get("counter"); if(counter == null){ counter = 1; }else{ counter++; } application.put("counter", counter);
然后在success.jsp页面访问以上对象设置的值:
<body> <h3> ${requestScope.hello },${sessionScope.user.username },访问量是${applicationScope.counter } </h3> </body>
- Struts2框架学习之一:Hello World程序
- Hibernate框架学习之一:Hello World程序
- struts2框架的第一个hello world程序
- Nginx学习之一-第一个程序Hello World
- Nginx学习之一-第一个程序Hello World
- Nginx学习之一-第一个程序Hello World
- Nginx学习之一-第一个程序Hello World
- SSH框架学习之Struts2(1):Hello World
- 7.Struts2 Hello World,开发Hello World程序
- python学习之一始于hello world
- ruby学习之一(安装、第一个小程序“hello, world”)
- Struts2 学习笔记01 Hello World !
- struts2学习笔记2-strut2 hello world
- yaf框架下编写Hello World程序
- RabbitMQ 之一"Hello World"
- rpc框架之gRPC 学习 - hello world
- yaf框架学习第一篇hello world
- yaf框架学习第一篇hello world
- iOS 扩展 UINavigationController 出栈返回到先前标记的位置
- IOS UI详解(UIButton,UISwitch,UITextView)
- R语言使用RODBC包联接数据库
- ThinkPHP I()函数详解
- HMM Part-of-Speech Tagging
- Struts2框架学习之一:Hello World程序
- iOS-Foundation框架(NSDateFormatter)
- 浅谈数据库中的触发器
- 线程中使用m_wndStatusBar.SetPaneText函数出错
- Spring jar 的简介
- Android获取当前屏幕截图,简单粗暴!
- 防止图片decode时候(内存溢出)oom
- OC-020.OC的构造方法-01基础
- 引言二