struts2第三篇:踏入struts2世界第一步
/*
大家如果喜欢学习struts2可以随时来看看,欢迎大家的到来!
由于我的时间有限,很多地方都不能详细的讲解,因此需要大家的理解和支持,其实学这个,我也只能做一下指导,如果大家有不懂的可以留言询问。大家互相学习学习!
我会在每一天出一篇struts2讲解。如果有事耽搁了,请大家原谅!
*/
/*
大家注意代码中标有红记的地方,是学习的重点。
*/
第一步(view编写):(login.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- 导入struts2的主要标签库,在struts2中去掉了很多不必要的标签,也将标签全部整合在了一起,更方便开发-->
<%
?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>My JSP 'login.jsp' starting page</title>
??<meta http-equiv="pragma" content="no-cache">
??<meta http-equiv="cache-control" content="no-cache">
??<meta http-equiv="expires" content="0">
??<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
??<meta http-equiv="description" content="This is my page">
??<!--
?<link rel="stylesheet" type="text/css" href="styles.css">
?-->
?</head>
?<body>
??<s:form action="login">
<!--注意:login不是与action直接对应,而是通过struts.xml映射文件中的
name=“login”对应-->
???<s:textfield name="username" label="用户名"></s:textfield>
???<s:password name="password" label="密码"></s:password>
???<s:submit label="提交"></s:submit>
<!--在struts2中,表单提交后自动被传给action,其中的set方法会将值暂时保存在内存中,以供使用-->
??</s:form>
/*
利用标签创建提交表单,相信大家看得懂。
*/
?</body>
</html>
/*
?
*/
(result.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>My JSP 'result.jsp' starting page</title>
??<meta http-equiv="pragma" content="no-cache">
??<meta http-equiv="cache-control" content="no-cache">
??<meta http-equiv="expires" content="0">
??<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
??<meta http-equiv="description" content="This is my page">
??<!--
?<link rel="stylesheet" type="text/css" href="styles.css">
?-->
?</head>
?<body>
??${requestScope.username}
??<br>
??${requestScope.password }
?</body>
<!--jsp中的条件表达式,获取forward传递的值,在struts2中,如没进行具体设置,默认情况是服务器端跳转,也就是所说的forword,而并不是请求跳转Redirect-->
</html>
第二步(action)
?package com.newstar.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
?/**
? *
? */
?private static final long serialVersionUID = 9038781564022152594L;
?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;
?}
?public String execute(){
??if("hello".equals(username.trim())&&"world".equals(password.trim())){
???return "success";?
??}else{
???this.addFieldError("username","username or password is not right!");
???return "failer";
??}
/*
execute()只做调控作用,业务逻辑不应该在这里完成,这里因为比较简单,我才写在了这里。业务逻辑交给业务层,我以MVC模式举例。
*/
?}
?@Override
?public void validate() {
??if(username==null||"".equals(getUsername().trim())){
???this.addFieldError("username", "username is null");
??}
??if(password==null||"".equals(getPassword().trim())){
???this.addFieldError("password", "password is null");
??}
?}
/*
这个方法是做表单验证的,是struts2中很重要的一部分,后面我会作具体介绍。相信这点代码还是难不倒大家的。
*/
}
第三步(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>
<!--这是struts2的精华部分,大家看好了,大家记得struts1中是怎样配置的吧,这个是不是简单的多了呢。这个就是对所有用户输入数据的过滤器映射,也就是说只要用户有提交数据(不管是空值还是其他确切的值)都会首先经过struts2中的过滤器过滤,然后才传下去。就这么简单,大家感觉到乐趣了吧。。呵呵。。come on everyone!-->
?<welcome-file-list>
??<welcome-file>login.jsp</welcome-file>
?</welcome-file-list>
</web-app>
最后一步(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="struts" extends="struts-default">
????? <action name="login" import="java.util.*" pageEncoding="UTF-8"%><br/><span style='color: #ff0000;'><strong><%@ taglib prefix="s" uri="/struts-tags"%></strong></span></span></p>
<p style='text-align: left;'><span style=''><strong><span style='color: #ff0000;'><!-- 导入struts2的主要标签库,在struts2中去掉了很多不必要的标签,也将标签全部整合在了一起,更方便开发--></span></strong><br/><%<br/>?String path = request.getContextPath();<br/>?String basePath = request.getScheme() + "://"<br/>???+ request.getServerName() + ":" + request.getServerPort()<br/>???+ path + "/";<br/>%></span></p>
<p style='text-align: left;'><span style=''><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br/><html><br/>?<head><br/>??<base href="<%=basePath%>"></span></p>
<p style='text-align: left;'><span style=''>??<title>My JSP 'login.jsp' starting page</title></span></p>
<p style='text-align: left;'><span style=''>??<meta http-equiv="pragma" content="no-cache"><br/>??<meta http-equiv="cache-control" content="no-cache"><br/>??<meta http-equiv="expires" content="0"><br/>??<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><br/>??<meta http-equiv="description" content="This is my page"><br/>??<!--<br/>?<link rel="stylesheet" type="text/css" href="styles.css"><br/>?--></span></p>
<p style='text-align: left;'><span style=''>?</head></span></p>
<p style='text-align: left;'><span style=''>?<body><br/>??<span style='color: #ff0000;'><strong><s:form action="login"></strong></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><!--注意:login不是与action直接对应,而是通过struts.xml映射文件中的 </strong></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong>name=“login”对应--><br/>???<s:textfield name="username" label="用户名"></s:textfield><br/>???<s:password name="password" label="密码"></s:password><br/>???<s:submit label="提交"></s:submit></strong></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><!--在struts2中,表单提交后自动被传给action,其中的set方法会将值暂时保存在内存中,以供使用--><br/>??</s:form></strong></span></span></p>
<p style='text-align: left;'><strong><span style=''>/*</span></strong></p>
<p style='text-align: left;'><strong><span style=''>利用标签创建提交表单,相信大家看得懂。</span></strong></p>
<p style='text-align: left;'><strong><span style=''>*/</span></strong></p>
<p style='text-align: left;'><span style=''>?</body><br/></html></span></p>
<p style='text-align: left;'><span style=''>/*</span></p>
<p style='text-align: left;'>?</p>
<p style='text-align: left;'><span style=''>*/</span></p>
<p style='text-align: center;'><span style=''>(result.jsp)</span></p>
<p style='text-align: left;'><span style=''>?<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br/><%<br/>?String path = request.getContextPath();<br/>?String basePath = request.getScheme() + "://"<br/>???+ request.getServerName() + ":" + request.getServerPort()<br/>???+ path + "/";<br/>%></span></p>
<p style='text-align: left;'><span style=''><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br/><html><br/>?<head><br/>??<base href="<%=basePath%>"></span></p>
<p style='text-align: left;'><span style=''>??<title>My JSP 'result.jsp' starting page</title></span></p>
<p style='text-align: left;'><span style=''>??<meta http-equiv="pragma" content="no-cache"><br/>??<meta http-equiv="cache-control" content="no-cache"><br/>??<meta http-equiv="expires" content="0"><br/>??<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><br/>??<meta http-equiv="description" content="This is my page"><br/>??<!--<br/>?<link rel="stylesheet" type="text/css" href="styles.css"><br/>?--></span></p>
<p style='text-align: left;'><span style=''>?</head></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong>?<body><br/>??${requestScope.username}<br/>??<br><br/>??${requestScope.password }<br/>?</body></strong></span></span></p>
<p style='text-align: left;'><span style=''><strong><span style='color: #ff0000;'><!--jsp中的条件表达式,获取forward传递的值,在struts2中,如没进行具体设置,默认情况是服务器端跳转,也就是所说的forword,而并不是请求跳转Redirect--></span></strong><br/></html></span></p>
<p style='text-align: center;'><span style=''>第二步(action)</span></p>
<p style='text-align: left;'><span style=''>?package com.newstar.struts2.action;</span></p>
<p style='text-align: left;'><span style=''>import com.opensymphony.xwork2.ActionSupport;</span></p>
<p style='text-align: left;'><span style=''>public class LoginAction extends ActionSupport {</span></p>
<p style='text-align: left;'><span style=''>?/**<br/>? * <br/>? */<br/>?private static final long serialVersionUID = 9038781564022152594L;<br/>?private String username;<br/>?private String password;<br/>?public String getUsername() {<br/>??return username;<br/>?}<br/>?public void setUsername(String username) {<br/>??this.username = username;<br/>?}<br/>?public String getPassword() {<br/>??return password;<br/>?}<br/>?<br/>?public void setPassword(String password) {<br/>??this.password = password;<br/>?}<br/>?<span style='color: #ff0000;'><strong>public String execute(){<br/>??if("hello".equals(username.trim())&&"world".equals(password.trim())){<br/>???return "success";?<br/>??}else{<br/>???this.addFieldError("username","username or password is not right!");<br/>???return "failer";<br/>??}<br/><span style='color: #008000;'>/*</span></strong></span></span></p>
<p style='text-align: left;'><strong><span style=''>execute()只做调控作用,业务逻辑不应该在这里完成,这里因为比较简单,我才写在了这里。业务逻辑交给业务层,我以MVC模式举例。</span></strong></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><span style='color: #008000;'>*/<br/></span>?}<br/>?</strong><strong><span style='color: #ff0000;'>@Override<br/>?public void validate() {<br/>??if(username==null||"".equals(getUsername().trim())){<br/>???this.addFieldError("username", "username is null");<br/>??}<br/>??if(password==null||"".equals(getPassword().trim())){<br/>???this.addFieldError("password", "password is null");<br/>??}<br/>?}</span></strong></span></span></p>
<p style='text-align: left;'><span style=''><strong>/*</strong></span></p>
<p style='text-align: left;'><strong><span style=''>这个方法是做表单验证的,是struts2中很重要的一部分,后面我会作具体介绍。相信这点代码还是难不倒大家的。</span></strong></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><span style='color: #008000;'>*/<br/></span></strong><span style='color: #333333;'>}</span></span></span></p>
<p style='text-align: center;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'>第三步(web.xml)</span></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><br/><span style='color: #000000;'><?xml version="1.0" encoding="UTF-8"?><br/><web-app version="2.5" xmlns="</span><a href='http://java.sun.com/xml/ns/javaee'><span style='color: #000000;'>http://java.sun.com/xml/ns/javaee</span></a><span style='color: #000000;'>"<br/>?xmlns:xsi="</span><a href='http://www.w3.org/2001/XMLSchema-instance'><span style='color: #000000;'>http://www.w3.org/2001/XMLSchema-instance</span></a><span style='color: #000000;'>"<br/>?xsi:schemaLocation="</span><a href='http://java.sun.com/xml/ns/javaee'><span style='color: #000000;'>http://java.sun.com/xml/ns/javaee</span></a><span style='color: #000000;'> <br/>?</span><a href='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd'><span style='color: #000000;'>http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</span></a></span><span style='color: #000000;'>"></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><span style='color: #ff0000;'><strong>?<filter><br/>??<filter-name>struts2</filter-name><br/>??<filter-class><br/>???org.apache.struts2.dispatcher.FilterDispatcher<br/>??</filter-class><br/>?</filter><br/>?<filter-mapping><br/>??<filter-name>struts2</filter-name><br/>??<url-pattern>/*</url-pattern><br/>?</filter-mapping></strong></span></span></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><strong><span style='color: #008000;'><!--这是struts2的精华部分,大家看好了,大家记得struts1中是怎样配置的吧,这个是不是简单的多了呢。这个就是对所有用户输入数据的过滤器映射,也就是说只要用户有提交数据(不管是空值还是其他确切的值)都会首先经过struts2中的过滤器过滤,然后才传下去。就这么简单,大家感觉到乐趣了吧。。呵呵。。come on everyone!--><br/></span></strong>?<welcome-file-list><br/>??<welcome-file>login.jsp</welcome-file><br/>?</welcome-file-list><br/></web-app></span></span></span></p>
<p style='text-align: center;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'>最后一步(struts.xml)</span></span></span></p>
<p style='text-align: left;'><span style=''><?xml version="1.0" encoding="UTF-8" ?></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><!DOCTYPE struts PUBLIC<br/>??? "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br/>??? "</span><a href='http://struts.apache.org/dtds/struts-2.0.dtd'><span style='color: #000000;'>http://struts.apache.org/dtds/struts-2.0.dtd</span></a><span style='color: #000000;'>"><br/><struts><br/>?<span style='color: #ff0000;'><strong>? <package name="struts" extends="struts-default"><br/>????? <action name="login" uri="/struts-tags"%> 这个提示找不到标签什么的...
注意两点:
1.标签地址。
2。标签库。 12 楼 lijiang 2009-02-11 struts2入门的文章