webwork是struts2的前身,是一个mvc框架,使用方法和struts2很相似。研究webwork已经没有太大的意义,但是对于理解struts2的核心机制还是有一定意义的。下面介绍如何通过webwork2来搭建一个简单的demo。
第一步:建立maven工程,引入webwork依赖。
<dependency>
<groupId>com.opensymphony</groupId>
<artifactId>webwork</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
第二步:这里配置一个User实体,用来做简单登录和注册。
User.java
package com.xxx.webwork.entity;
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;
}
}
LoginAction.java
package com.xxx.webwork.action;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ModelDriven;
import com.xxx.webwork.entity.User;
public class LoginAction implements Action,ModelDriven {
private User user = new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
if(user.getUsername().equals("admin")&& user.getPassword().equals("123456")) {
return SUCCESS;
}else {
return ERROR;
}
}
@Override
public Object getModel() {
return user;
}
}
第三步:配置xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"
"http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<include file="webwork-default.xml"/>
<package name="webwork" extends="webwork-default">
<action name="admin" class="com.xxx.webwork.action.AdminAction">
<result name="success" type="freemarker">
<param name="location">/WEB-INF/content/admin/index.html</param>
</result>
</action>
<action name="login" class="com.xxx.webwork.action.LoginAction">
<result name="success" type="freemarker">
<param name="location">/success.html</param>
</result>
<result name="error" type="freemarker">
<param name="location">/error.html</param>
</result>
<interceptor-ref name="model-driven"/>
<interceptor-ref name="params"/>
</action>
<action name="regist" class="com.xxx.webwork.action.RegistAction">
<result name="success" type="freemarker">
<param name="location">/success.html</param>
</result>
</action>
</package>
</xwork>
第四步:配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>webwork</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
第五步:编写前台页面
index.html
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
</head>
<body>
<div id="container">
<div class="main">
<form method="post" action="login.action">
<div class="box-item">
<label>用户名:</label>
<input type="text" name="username"/>
</div>
<div class="box-item">
<label>密码:</label>
<input type="password" name="password"/>
</div>
<div class="box-item">
<input type="submit" value="登录"/>
</div>
</form>
</div>
<a href="register.html">注册</a>
</div>
</body>
</html>
success.html
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
</head>
<body>
<div id="container">
<h2>hello,welcome,${user.username}</h2>
</div>
</body>
</html>
error.html
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
</head>
<body>
<div id="container">
<h2>oh,sth is wrong.</h2>
</div>
</body>
</html>
启动web服务器,访问首页,出现登录页:
输入admin/123456,点击登录,会跳转到成功页面,同时,显示用户名admin。如果用户名密码不对,跳转到错误页面。
错误页面:
LoginAction中引入了模型驱动ModelDriven,这样,页面上的参数可以直接通过username,password的名字传过来封装成User对象,否则需要通过user.username,user.password来传过来。涉及到传参,一般需要在action中声明页面对应的参数。还有一种做法,就是通过request.getParameter("username")的方式获取参数,下面给出RegistAction的代码,通过该代码,了解一下如何通过request的方式获取参数。
package com.xxx.webwork.action;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionContext;
import com.xxx.webwork.entity.User;
public class RegistAction implements Action{
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String username =(String) request.getParameter("username");
String password = (String) request.getParameter("password");
System.out.println("regist : "+username+" --> "+password);
User user = new User();
user.setUsername(username);
user.setPassword(password);
ActionContext.getContext().put("user", user);
return SUCCESS;
}
}
这种方式也就是传统Servlet获取参数的方式。为此需要在项目中引入javax.servlet:javax.servlet-api的依赖。
另外页面使用freemarker作为模板,传统的freemaker需要.ftl文件后缀,但是我们如果使用.html文件作为freemarker模板,好像也是可以的。本例中的页面全部就是html文件。
xwork.xml的配置和struts.xml的配置基本类似,但是需要引入默认的webwork-default.xml配置文件。