Struts2的第一个案例

 

package com.struts2.demo1; 

import java.net.URLEncoder; 

publicclass HelloWord {
    private Stringinfo; 

    private Stringusername; 

    public String getUserName() {
       returnusername;
    }
    publicvoid setUserName(String userName) {
       this.username = userName;
    }
    public String getInfo() {
       returninfo;
    }
    public String execute()throws Throwable{

       this.username=URLEncoder.encode("小龙","UTF-8");

       this.info="Struts2第一个Demo";

       return"success";

    }

}

Strutst.xml下的文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

    <package name="demo1" namespace="/test" extends="struts-default">

       <action name="list" class="com.struts2.demo1.HelloWord"    method="execute">

<!---这里是使用了动态的获取Action类中的属性值 -->

           <result name="success" type="redirect">/employeeAdd.jsp?username=${UserName}</result>

       </action>

        <!--redirect重定向页面-->

       <action name="redirect">

           <result type="redirect">/employeeAdd.jsp</result>

       </action>

<!--       redirectAction重定向本包中的Action-->

<!--       <action name="redirectAction">-->

<!--          <result type="redirectAction">list</result>-->

<!--       </action>-->

       <!--redirectAction重定向到另一包中的Action-->

       <action name="redirectAction">

           <result type="redirectAction">

              <param name="actionName">xxx</param>

              <param name="namespace">/control</param>

           </result>

       </action>

    </package>

   

    <package name="other" namespace="/control" extends="struts-default">

       <action name="xxx">

           <result>/WEB-INF/page/hello.jsp</result>     

       </action>

    </package>

</struts>
 
MyJsp.jsp文件

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
      <title>MyJsp.jsp</title>
  </head>
  <body>
   ${Info}aaaa
  </body>
</html>

  

employeeAdd.jsp文件

<%@ page language="java" pageEncoding="UTF-8"%>

<%@page import="java.net.URLDecoder"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
      <title>employeeAdd.jsp</title>
         <meta http-equiv="pragma" content="no-cache">
         <meta http-equiv="cache-control" content="no-cache">
         <meta http-equiv="expires" content="0">   
  </head>

  <body>
      <%=URLDecoder.decode(new String(request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8") %>
    <form action="/xx">
             姓名:<input type="text" name="name">
    </form>

  </body>

</html>

 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
  </head>
   <body>
    ${Info}
  </body>
</html>

访问 web 元素( Request Session Application

最常用的方式:

Index.Jsp页面

<?xmlversion="1.0"encoding="GB18030"?>

<%@ page language="java"contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%> 

<% String context = request.getContextPath();%> 

<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=GB18030"/>

<title>Insert title here</title>

</head>

<body>

取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:

<ol>
    <li>前三者:依赖于容器</li>

    <li>前三者:IOC</li> (只用这种)

    <li>后三者:依赖于容器</li>

    <li>后三者:IOC</li>

</ol>

<br/>

<formname="f"action=""method="post">

用户名:<inputtype="text"name="name"/>

密码:<inputtype="text"name="password"/>

<br/>

<inputtype="button"value="submit1"οnclick="javascript:document.f.action='login/login1';document.f.submit();"/>

<inputtype="button"value="submit2"οnclick="javascript:document.f.action='login/login2';document.f.submit();"/>

<inputtype="button"value="submit3"οnclick="javascript:document.f.action='login/login3';document.f.submit();"/>

<inputtype="button"value="submit4"οnclick="javascript:document.f.action='login/login4';document.f.submit();"/>

</form>

   

</body>

</html>


user_login_success.jsp

<?xmlversion="1.0"encoding="GB18030"?>

<%@ page language="java"contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

    <%@tagliburi="/struts-tags"prefix="s"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=GB18030"/>

<title>Insert title here</title>

</head>

<body>

    User Login Success!

    <br/>

    <s:propertyvalue="#request.r1"/> |<%=request.getAttribute("r1")%><br/>

    <s:propertyvalue="#session.s1"/> |<%=session.getAttribute("s1")%><br/>

    <s:propertyvalue="#application.a1"/> |<%=application.getAttribute("a1")%><br/>

    <s:propertyvalue="#attr.a1"/><br/>

    <s:propertyvalue="#attr.s1"/><br/>

    <s:propertyvalue="#attr.r1"/><br/>

    <s:debug></s:debug>

    <br/>

</body>

</html>


Struts.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

    <constantname="struts.devMode"value="true"/>

    <packagename="login"extends="struts-default"namespace="/login">

        <actionname="login*"class="com.bjsxt.struts2.user.action.LoginAction{1}">

            <result>/user_login_success.jsp</result>

        </action>

    </package>

</struts>


LoginAction1.java

package com.bjsxt.struts2.user.action;

import java.util.Map; 

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; 

public class LoginAction1 extends ActionSupport {

         private Map request;

         private Map session;

         private Map application;

         //以来容器来实现的ActionContext

         public LoginAction1() {

                  request = (Map)ActionContext.getContext().get("request");

                  session = ActionContext.getContext().getSession();

                  application = ActionContext.getContext().getApplication();

         }
         public String execute() {

                   request.put("r1", "r1");

                   session.put("s1", "s1");

                   application.put("a1", "a1");

                   return SUCCESS;

         }

}


LoginAction2.java最为常用的方法

package com.bjsxt.struts2.user.action;

import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
 

public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {

        private Map<String, Object> request;

        private Map<String, Object> session;

        private Map<String, Object> application;

        //DI dependency injection==   //IoC inverse of control()模式

        public String execute() {

                  request.put("r1", "r1");

                  session.put("s1", "s1");

                  application.put("a1", "a1");

                  return SUCCESS;

        }

        @Override

        public void setRequest(Map<String, Object> request) {

                  this.request = request;

        }

        @Override

        public void setSession(Map<String, Object> session) {

                  this.session = session;

        }

        @Override

        public void setApplication(Map<String, Object> application) {

                  this.application = application;

        }

}

LoginAction3.java

package com.bjsxt.struts2.user.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; 

public class LoginAction3 extends ActionSupport {        

         private HttpServletRequest request;

         private HttpSession session;

         private ServletContext application;       

         public LoginAction3() {

                  request = ServletActionContext.getRequest();

                  session = request.getSession();

                  application = session.getServletContext();

         }       

         public String execute() {

                   request.setAttribute("r1", "r1");

                   session.setAttribute("s1", "s1");

                   application.setAttribute("a1", "a1");

                   return SUCCESS;

         }    

}


LoginAction4.java

package com.bjsxt.struts2.user.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;

 
public class LoginAction4 extends ActionSupport implements ServletRequestAware {

         private HttpServletRequest request;

         private HttpSession session;

         private ServletContext application;        

         public String execute() {

                   request.setAttribute("r1", "r1");

                   session.setAttribute("s1", "s1");

                   application.setAttribute("a1", "a1");

                   return SUCCESS;

         }

         @Override

         public void setServletRequest(HttpServletRequest request) {

                   this.request = request;

                   this.session = request.getSession();

                   this.application = session.getServletContext();

         }       

}


数据的验证方法

Index.jsp

<?xmlversion="1.0"encoding="GB18030"?>

<%@ page language="java"contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>
<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=GB18030"/>

<basehref="<%=basePath%>"/>

<title>Insert title here</title>

</head>

<body>

使用addFieldError方法和s:fieldError标签简单处理数据校验

<ahref="user/user!add?name=adm">添加用户</a>

</body>

</html>


User_add_error.jsp

<?xmlversion="1.0"encoding="GB18030"?>

<%@ page language="java"contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

<%@tagliburi="/struts-tags"prefix="s"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=GB18030"/>

<title>Insert title here</title>

</head>

<body>

    User Add Error!

    <s:fielderrorfieldName="name"theme="simple"/>

    <br/>

    <!—获取错误的信息 -->

    <s:propertyvalue="errors.name[1]"/><br/>

    <s:propertyvalue="fieldErrors"/><br/>

    <s:propertyvalue="errors.name[0]"/><br/>

    <%--这里是显示debug信息--%>

    <s:debug></s:debug>

</body>

</html>


Struts.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

    <constantname="struts.devMode"value="true"/>

    <packagename="user"extends="struts-default"namespace="/user">

        <actionname="user"class="com.bjsxt.struts2.user.action.UserAction">

            <resultname="success">/user_add_success.jsp</result>

            <resultname="error">/user_add_error.jsp</result>

        </action>

    </package>

</struts>

 


UserAction.java

package com.bjsxt.struts2.user.action;
import com.opensymphony.xwork2.ActionSupport; 

publicclassUserAction extends ActionSupport {

    private Stringname;  

    public String add() {

       if(name ==null || !name.equals("admin")) {

           this.addFieldError("name","name is error");

           this.addFieldError("name","name is too long");

           returnERROR;

       }

       returnSUCCESS;

    }

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }  

}

Action中接受参数值为中文时出现乱码解决方案

Strutst.xml配置

<!--配置是是解决乱码 -->

    <constantname="struts.i18n.encoding"value="utf-8"/><!-- internationalization -->

struts.xml每次更改内容可以不需要重启服务器的配置

<!-- 配置常量,为true为开发模式,表示struts.xml每次更改内容可以不需要重启服务器 -->

 <constantname="struts.devMode"value="true"/>

 ActionMethodAction方法的调用)

Index.jsp

<?xmlversion="1.0"encoding="GB18030"?>

<%@ page language="java"contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

 

<% String context = request.getContextPath();%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=GB18030"/>

<title>Insert title here</title>

</head>

<body>

Action执行的时候并不一定要执行execute方法<br/>

可以在配置文件中配置Action的时候用method=来指定执行哪个方法

也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br/>

    <ahref="<%=context%>/user/userAdd">添加用户</a>

    <br/>

    <ahref="<%=context%>/user/user!add">添加用户</a>

    <br/>

前者会产生太多的action,所以不推荐使用  

</body>

</html>

Struts.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <constantname="struts.devMode"value="true"/>

    <packagename="user"extends="struts-default"namespace="/user">

        <actionname="userAdd"class="com.bjsxt.struts2.user.action.UserAction"method="add">

            <result>/user_add_success.jsp</result>

        </action>

       

        <actionname="user"class="com.bjsxt.struts2.user.action.UserAction">

            <result>/user_add_success.jsp</result>

        </action>

    </package>

</struts>

 

UserAction.java

package com.bjsxt.struts2.user.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

publicclassUserAction extends ActionSupport {

    public String add() {

       returnSUCCESS;

    }

}

通配符的使用案例

 

 

 

Index.jsp

<?xmlversion="1.0"encoding="GB18030"?>

<%@ page language="java"contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

 

<% String context = request.getContextPath();%>

 

<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=GB18030"/>

<title>Insert title here</title>

</head>

<body>

使用通配符,将配置量降到最低<br/>

<ahref="<%=context%>/actions/Studentadd">添加学生</a>

<ahref="<%=context%>/actions/Studentdelete">删除学生</a>

<br/>

不过,一定要遵守"约定优于配置"的原则

<br/>

<ahref="<%=context%>/actions/Teacher_add">添加老师</a>

<ahref="<%=context%>/actions/Teacher_delete">删除老师</a>

<ahref="<%=context%>/actions/Course_add">添加课程</a>

<ahref="<%=context%>/actions/Course_delete">删除课程</a>

   

</body>

</html>

其它的jsp页面只是提示功能这里就不写了。

 

 

Struts.xml其核心也就是在这里配置,和jsp要按照一定的约束

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

    <constantname="struts.devMode"value="true"/>

    <packagename="actions"extends="struts-default"namespace="/actions">

        <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">

            <result>/Student{1}_success.jsp</result>

        </action>

       

        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">

            <result>/{1}_{2}_success.jsp</result>

            <!-- {0}_success.jsp -->

        </action>

    </package>

</struts>

 

StudentAction.java

package com.bjsxt.struts2.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

publicclassStudentAction extends ActionSupport {

    public String add() {

       returnSUCCESS;

    }

    public String delete() {

       returnSUCCESS;

    }  

}

TeacherAction.java

package com.bjsxt.struts2.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

publicclassTeacherAction extends ActionSupport {

    public String add() {

       returnSUCCESS;

    }

   

    public String delete() {

       returnSUCCESS;

    }  

}

 

Action中接收值的方式

1.         DomainModelParamInput(该方式最常用)

 

使用Domain Model接收参数<ahref="user/user!add?user.name=a&user.age=8">添加用户</a>

Action类的代码

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;

import com.opensymphony.xwork2.ActionSupport;

 

public class UserAction extends ActionSupport {   

         private User user;  //实体对象

         //private UserDTO userDTO;

         public String add() {

                   System.out.println("name=" + user.getName());

                   System.out.println("age=" + user.getAge());

                   return SUCCESS;

         }

         public User getUser() {

                   return user;

         }

         public void setUser(User user) {

                   this.user = user;

         }       

}

2.        ActionAttrParamInput(该方式最常用)

使用action属性接收参数<ahref="user/user!add?name=a&age=8">添加用户</a>

 




Action类中的代码

package com.bjsxt.struts2.user.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

publicclassUserAction extends ActionSupport {

    private Stringusername;

    privateintage

 

    public String add() {

       System.out.println("name=" +username);

       System.out.println("age=" +age);

       returnSUCCESS;

    }

    public String getName() {

       returnusername;

    }

    publicvoid setName(String name) {

       this.username = name;

    }

    publicint getAge() {

       returnage;

    }

    publicvoid setAge(int age) {

       this.age = age;

    }  

}

 

 

3.        ModelDrivenParamInput

 

使用ModelDriven接收参数<ahref="user/user!add?name=a&age=8">添加用户</a>



Action类中的代码

package com.bjsxt.struts2.user.action;

 

import com.bjsxt.struts2.user.model.User;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

 

public class UserAction extends ActionSupport implements ModelDriven<User>{       

         private User user = new User();

        

         public String add() {

                   System.out.println("name=" + user.getName());

                   System.out.println("age=" + user.getAge());

                   return SUCCESS;

         }

         @Override

         public User getModel() {

                   return user;

         }

        

}




























配置默认 Action

当访问莫页面不存在是可以用到

<?xmlversion=”1.0”encoding=”UTF-8”?>

<!DOCTYPEstruts PUBLIC

“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”

“http://struts.apache.org/dtds/struts-2.0.dtd”>

<struts>

<constantname=”struts.devMode”value=”true”/>   

<packagename=”default”namespace=”/”extends=”struts-default”>

     <default-action-ref name=”index”></default-action-ref>

    <actionname=”index”>

        <result>/default.jsp</result>

    </action>

</package>

</struts>

 














Action总结

Result配置

Struts.xml配置

普通配置

 

<struts>

    <constantname="struts.devMode"value="true"/>

    <packagename="resultTypes"namespace="/r"extends="struts-default">   

        <action name="r1">

        <!--不写是默认的跳转,是服务器跳转forword,是跳转到页面的 -->

        <result type="dispatcher">/r1.jsp</result>

        </action>    

        <action name="r2">

        <!--只能是个重定向到页面的-->

        <result type="redirect">/r2.jsp</result>

        </action>    

        <action name="r3">

        <!-- forword跳转到另一个action -->

        <result type="chain">r1</result>

        </action>

        <action name="r4">

        <!--    客户端跳转到action-->

        <result type="redirectAction">r2</result>

        </action>    

    </package>

</struts>

 


















Index.jsp

<body>

Result类型

<ol>

<!--不写是默认的跳转,是服务器跳转forword,是跳转到页面的 -->

    <li><ahref="r/r1">dispatcher</a></li>

<!--只能是个重定向到页面的-->

    <li><ahref="r/r2">redirect</a></li>

<!-- forword跳转到另一个action -->

    <li><ahref="r/r3">chain</a></li>

<!--   客户端跳转-->

    <li><ahref="r/r4">redirectAction</a></li>

<!--   -->

    <li>freemarker</li>

   

    <li>httpheader</li>

<!--   下载用的-->

    <li>stream</li>

    <li>velocity</li>

    <li>xslt</li>

<!--显示页面源文件-->

    <li>plaintext</li>

   

    <li>tiles</li>

</ol>

   

</body>

 

 全局结果集配置

Struts.xml

<struts>

    <constantname="struts.devMode"value="true"/>

    <packagename="user"namespace="/user"extends="struts-default">

     <global-results>

        <result name="mainpage">/main.jsp</result>

    </global-results>

        

    <actionname="index">

        <result>/index.jsp</result>

    </action>    

        <action name="user"class="com.bjsxt.struts2.user.action.UserAction">

        <result>/user_success.jsp</result>

        <result name="error">/user_error.jsp</result>

        </action>    

    </package>   

    <packagename="admin"namespace="/admin"extends="user">

    <actionname="admin"class="com.bjsxt.struts2.user.action.AdminAction">

        <result>/admin.jsp</result>

    </action>

    </package>

</struts>

 

 

Jsp.xml

 

 

Result类型

<ol>

    <li><ahref="user/user?type=1">返回success</a></li>

    <li><ahref="user/user?type=2">返回error</a></li>

    <li><ahref="user/user?type=3">返回global result</a></li>

    <li><ahref="admin/admin">admin,继承user</a></li>

</ol>

 


 


 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值