Stuts2.0总结
向先函 2009-11-25
PLSQLDev –Oracle10开发工具
一、配置tomcat自动重载
C:/Documents and Settings/Administrator/桌面/apache-tomcat-6.0.18/apache-tomcat-6.0.18/conf/server.xml
配置如下:
<!--docBase 是工程属性的location + WebRoot-->
<context path="struts2" docBase ="C:/Documents and Settings/Administrator/workspace/struts2.0/WebRoot" raloadable = "true"/>
</Host>
</Engine>
</Service>
</Server>
把tomcat加到MyEclipse就完成了。
基本的登录实现
2要加的初步jar包有: 在官方的struts2.0-all包下:
Common-io-1.3.2.jar
Common-logging-1.0.4.jar
Common-fileupload-1.2.1.jar
Freemarker-2.3.15.jar
Ognl-2.7.3.jar
Struts2-core-2.1.8.1.jar
Xwork-core-2.1.6.jar
1 web.xml
<?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>
</web-app>
2 login.jsp
<html>
<head>
<title>login.jsp</title>
</head>
<body>
<br>
<form method="post" action="login.action">
username:
<input name="username" type="text">
<br>
password:
<input name="password" type="text">
<br>
<input type="submit" name="Submit" value=" 提 交 ">
</form>
</body>
</html>
3 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">
<!--<action name="login"的name是表单的login.aciton的前面
result 是excuse 返回的页面,默认success -->
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.test.action.LoginAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
4 LoginAction
package com.test.action;
public class LoginAction {
private String username;
private String password;
GET 和Set 的复写
//最后执行的方法
public String execute() throws Exception
{
return "success";
}
}
5 success.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>success.jsp</title>
</head>
<body>
username:${requestScope.username}<br>
password:${requestScope.password }<br>
username:<%=request.getParameter("username") %><br>
password:<%=request.getParameter("password") %><br>
</body>
</html>
标签的使用:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>login2.jsp</title>
</head>
<body>
<s:form action = "login">
<s:textfield name ="username" label = "username"/>
<s:password name = "password" label ="password" />
<s:submit label = "submit" value="提交"></s:submit>
</s:form>
</body>
</html>
验证:
package com.test.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
GET 和Set 的复写
//最后执行的方法一般调用业务组件
public String execute() throws Exception
{
if("hello".equals(this.getUsername())&&"world".equals(this.getPassword()))
{
return "success";
}else
{
this.addFieldError("username", "username or password error");
return "failer";
}
}
@Override
public void validate() {
if(null == this.getUsername()||"".equals(this.getUsername().trim()))
{
this.addFieldError("username", "username required");
}
if(null==this.getPassword()||"".equals(this.getPassword().trim()))
{
this.addFieldError("password", "password required");
}
}
}
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">
<!--<action name="login"的name是表单的login.aciton的前面
result 是excuse 返回的页面,默认success
输入框的input 是固定的-->
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.test.action.LoginAction">
<result name="input">/login2.jsp</result>
<result name="failer">/login2.jsp</result>
<result>/success.jsp</result>
</action>
</package>
</struts>
Struts类型转换
Ognl 是一种表达式语言
input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>input.jsp</title>
</head>
<body>
<h3>使用逗号将点的两个坐标分割开</h3>
<s:form action = "pointConverter">
<s:textfield name ="point" label = "point"/>
<s:password name = "age" label ="age" />
<s:password name = "username" label ="username" />
<s:password name = "date" label ="birthday" />
<s:submit label = "submit" value="提交"></s:submit>
</s:form>
</html>
Webwork的官网,xwork或其他源码都在里面
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">
<!--<action name="login"的name是表单的login.aciton的前面
result 是excuse 返回的页面,默认success
输入框的input 是固定的-->
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.test.action.LoginAction">
<result name="input">/login2.jsp</result>
<result name="failer">/login2.jsp</result>
<result>/success.jsp</result>
</action>
<action name="pointConverter" class="com.test.action.PointAction">
<result name = "success">/output.jsp</result>
</action>
</package>
</struts>
PointAction.java
package com.test.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.Point;
public class PointAction extends ActionSupport {
private Point point;
private int age;
private String username;
private Date date;
GET 和Set 的复写
@Override//使用关键字返回
public String execute() throws Exception {
return SUCCESS;
}
}
PointAction-conversion.properties//一定和使用的Action在同一个目录下
point=com.test.converter.PointConverter
convertValue转化类
package com.test.converter;
import java.util.Map;
import com.test.bean.Point;
import ognl.DefaultTypeConverter;
public class PointConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
// 客户端到服务器的转换
if (Point.class == toType) {
Point point = new Point();
String[] str = (String[]) value;
String[] paramValues = str[0].split(",");
int x = Integer.parseInt(paramValues[0]);
int y = Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
return point;
}
// 服务器到客户端的转换如果不转换将执行里边的tostring方法
if (String.class == toType) {
Point point = (Point) value;
int x = point.getX();
int y = point.getY();
String result = "[x=" + x + ", y=" + y + "]";
return result;
}
return null;
}
}
Point类
package com.test.bean;
public class Point {
private int x;
private int y;
GET 和Set 的复写
}
output.jsp:
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<!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=gbk">
<title>output.jsp</title>
</head>
<body>
point:<s:property value = "point"/><br>
age:<s:property value = "age"/><br>
username:<s:property value = "username"/><br>
date:<s:property value = "date"/><br>
</body>
</html>
总结:流程input.jsp 》struts.xml: 》PointAction.java 》 PointAction-conversion.properties 》convertValue转化类》 Point类 》PointAction.java 》struts.xml: 》output.jsp:》PointAction.java 》convertValue转化类》PointAction.java 》output.jsp:
Struts类型高级转换
集合类型
输入页面
<h3>使用逗号将点的两个坐标分割开</h3>
<s:form action = "pointConverter">
<s:textfield name ="point" label = "point"/>
<s:textfield name ="point2" label = "point2"/>
<s:textfield name ="point3" label = "point3"/>
PointAction
private Point point;
private Point point2;
private Point point3;
PointAction-conversion.properties
point=com.test.converter.PointConverter
point2=com.test.converter.PointConverter
point3=com.test.converter.PointConverter
输出页面
point:<s:property value = "point"/><br>
point2:<s:property value = "point2"/><br>
point3:<s:property value = "point3"/><br>
全局类型转换:需要在SRC下建立如下文件和如下配置
xwork-conversion.properties
//所有的Point类都通过converter.PointConverter来转化
com.test.bean.Point=com.test.converter.PointConverter
StrutsTypeConverter类型转换
PointConverter2.Java
package com.test.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.test.bean.Point;
public class PointConverter2 extends StrutsTypeConverter {