Struts2整理-----Struts2入门
Struts2简介
struts2是在webwork2基础上发展而来的。和struts1一样,struts2也属于MVC框架。不过有一点需要注意的是:struts2和struts2虽然名字很相似,但是在两者在代码编写风格上几乎是不一样的。那么既然有了struts1,为什么还要推出struts2。主要的原因是struts2有以下优点:
1.在软件设计上struts2不依赖于servlet API和struts API。而struts1跟servlet API和struts API有着紧密的耦合;struts2的应用可以struts2的这种设计属于无侵入式设计,而struts1却属于侵入式设计。
2.struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
3.struts2提供了类型转换器,可以把特殊的请求参数转化成需要的类型。在struts1中,如果我们要实现同样的功能,就必须向struts1的底层实现BeanUtil注册类型转换器才行。
4.struts2提供支持多种表现层技术,如:jsp、freemarker、velocity等。
5.struts2的输入校验可以对指定的方法进行校验,解决了struts1长久之痛。
6.提供了全局范围、包范围和Action范围的国际化资源文件实现。
另外struts2源码项目使用maven构建。这里提供struts-2.3.24源码包 http://pan.baidu.com/s/1mgVZAVu
Struts2开发环境搭建
step1:新建工程
eclipse新建web项目,项目名struts2demo
step2:导入jar包
commons-fileupload-1.2.1.jar
commons-logging.jar
freemarker-2.3.12.jar
ognl-2.7.3.jar
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
step3:配置web.xml文件
<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>
从上面可以看出,struts2框架是通过filter启动的。在StrutsPrepareAndExecuteFilter的init()方法中读取类路径下默认的配置文件struts.xml完成初始化操作。
PS:struts2读取到struts.xml中的内容后,以javabean的形式保存在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件。
step4:新建Action
package com.aaron.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() { return SUCCESS; } public String login() { String msg = "登录成功!"; Map<String, Object> map = ActionContext.getContext().getSession(); if ("aaron".equals(name) && "123456".equals(password)) { map.put("msg", msg); map.put("name", name); return SUCCESS; } else { msg = "用户名或密码错误!"; map.put("msg", msg); return LOGIN; } } }
step5: 新建视图页面
登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>登录页面</title> </head> <body> <form action="login" method="post"> <h3><font color="red">${msg}</font></h3><br> 用户名:<input type="text" name="name" /><br> 密码:<input type="password" name="password" /><br> <input type="submit" value="提交" name="提交" /> <input type="reset" value="重置" name="重置" /> </form> </body> </html>
登录成功页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>登录成功</title> </head> <body> <h3><font color="red">${msg}</font></h3> <h2>欢迎${name}!</h2> </body> </html>
step6:配置struts文件
<package name="default" extends="struts-default" namespace="/"> <action name="login" class="com.aaron.action.UserAction" method="login"> <result name="success">success.jsp</result> <result name="login">login.jsp</result> </action> </package>
step7:测试
输入地址:http://localhost:8080/struts2demo
测试OK!