刚学习web开发,肯定会有很多不对的地方,请一定要提出。
最近学习Struts2,看介绍说Struts2是WebWork的升级,与Struts1差距很大。
今天看着书做了个简单的例子,
从这个例子看来与Struts1的机制似乎还是很接近的。都是把提交的请求先发送到一个代理类,然后根据配置文件,找到Action.
只是现在2的Action不在是继承的理念了,使用了接口的实现。
接口的好处就不说了。
现在2中的方法也不再像1那样需要(ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse)如此多的参数了。
只需要实现Acion.我没用过webwork,对Struts1有所了解,所以学习时常会和1比较。
登录例子:
一.先导入Struts2的核心包
(commons-logging.jar,freemarker.jar,ognl.jar,struts2-core.jar,xwork.jar)
注意:Struts 2 应用默认需要Java 5 运行时环境,需要支持 Servlet API 2.4
二.编辑Web.xml,配置Struts2的核心文件
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
这样就配置了基于Struts的基本web应用了。但有请求时,FilterDispatcher类将会起拦截作用,并分析请求。
下面类编辑MVC框架。
三.页面请求。
我们写个jsp页面来发送请求,就已登录功能为例。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Struts2学习</title>
</head>
<body>
<form action="login.action" method="post">
<table align="center">
<caption>Logging</caption>
<tr>
<td>UserNaem:<input type="text" name="username"/></td>
</tr>
<tr>
<td>UserPwd:<input type="password" name="userpwd"/></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="submit"/><input type="reset" value="reset"/></td>
</tr>
</table>
</form>
</body>
</html>
我们看这个登陆表单的action属性:login.action。2中默认以.action后缀。这个时候FilterDispatcher就将自动起作用,
拦截请求,并分析表单数据,然后请求到对应的Action.
这时候我们还需要一个控制器,来接收处理请求。
四.实现控制器
控制器是MVC框架的核心,他处理页面的请求,根据不同结果,返回给页面数据,跳转页面。
2中的控制器比1简单多了,他看上去就如同一个普通的类。不再像1那样继承了,他就是一个包涵execute方法的普通类。
这样Action 就可以继承其他的类。
import com.opensymphony.xwork2.ActionContext;
public class LoginAction {
private String username;
private String userpwd;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
public String execute() throws Exception{
if(getUsername().equals("mryang")
&&getUserpwd().equals("111")){
ActionContext.getContext().getSession().put("user", getUsername());
return "success";
}else{
return "error";
}
}
}
这个类有2个属性:Username和Userpwd,和一个execute() 方法,和普通类没什么两样.execute方法就是判断
如果Username为'mryang'并且userpwd为'111'就返回"success",并把用户名保存到Session,反之返回"error".
这就是2中的一个简单的控制器。
但他怎么和页面发生关系的呢?怎么跳转页面呢?
和1一样,还需要一个配置。
五.配置Action.
没有配置,请求就找不到Action.Struts2的Action除了处理请求外,还要处理结果与资源映射。
这些都离不开配置---也就是struts.xml.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- package name指定项目名,extends="struts-default" --> <package name="javaStrutstwo" extends="struts-default"> <!-- action name与页面请求对应,class指定请求到哪个Action --> <action name="login" class="com.sccin.web.control.LoginAction"> <!--处理结果,与Action中返回的字符串对应 --> <result name="error">/error.jsp</result> <result name="success">/success.jsp</result> </action> </package> </struts>
一个package节点,name属性为项目属性,extends为"struts-default",这个不改。
package节点下就是配置Action,name属性值与页面请求一致,class为action的路径。
result 是结果处理。action中返回的字符串在配置文件中一定要对应。
这样只需要在有个error.jsp和success.jsp页面这个web应用就完成了。
success.jsp
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="utf-8"%>
<%@ page isELIgnored="false" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>WELCOME</title>
</head>
<body>
登录成功:欢迎
${sessionScope.user }
</body>
</html>
error.jsp
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="UTF-8"%>
<html>
<head>
<title>登录失败</title>
</head>
<body>
登录失败
</body>
</html>
Struts2的页面请求应用的流程就是这样
非常的简单吧。如果要添加其他请求只需要增加Action,配置Action就行了。
接下了,迫不及待的往下学习。