Struts2



1、Struts2 核心是一个filter,该filter会拦截所有请求,

     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

2、Struts2 拦截所有请求后,具体访问哪个类需要在Struts.xml文件中配置。

3、Struts.xml必须位于工程的类文件夹下。

运用Struts2 的步骤

1、将工程中需要用到的jar包引入到lib文件夹下,自动加载jar包

2、配置web.xml文件

             <filter>
                <filter-name>struts2</filter-name>
                <filter-class>
                org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
                </filter-class>
            </filter>

            <filter-mapping>
                <filter-name>struts2</filter-name>           <!-- 根据<filter-name> 找到对应的<!-- <filter-class>对应的类 StrutsPrepareAndExecuteFilter中 -->
                <url-pattern>/*</url-pattern>              <%@ page contentType="text/html;charset=GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%>
<%@ taglib prefix="btn" uri="http://www.isoftstone-ai.org/BtnRight"%>
<html>
     <head>
          <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
          <meta http-equiv="Pragma" content="no-cache">
          <title>学生信息查询</title>

          <style type="text/css">
               <!--
               @import url("<%=request.getContextPath()%>/newcss/main.css");
               -->
          </style>
          <script type="text/javascript"
               src="<%=request.getContextPath()%>/js/common.js"></script>
          <script type="text/javascript"
               src="<%=request.getContextPath()%>/js/export.js"></script>
          <script type='text/javascript'
               src='<%=request.getContextPath()%>/cm_dwr/interface/funcDWR.js'></script>
          <script type='text/javascript'
               src='<%=request.getContextPath()%>/cm_dwr/engine.js'></script>
          <script type='text/javascript'
               src='<%=request.getContextPath()%>/cm_dwr/util.js'></script>
          <script language="javascript">
<!--
var msg = '<fmt:message key="${message}"/>';
var errMsg = '<c:out value='${error}'/>';
if(errMsg != ''){
     alert("<fmt:message key="${error}"/>");
}
if(msg != '' && msg!='??????' ){
     alert(msg);
  <c:remove var="message"/>
}
-->
</script>
     </head>

     <body onLoad="getFuncNme();">
          <form name="pageform" id="pageform" method="post"
               action="<%=request.getContextPath()%>/StudentController.do?cmd=queryList">
              
               <div class="rightbox">
                   <div class="top">
                       <div class="lev1">
                      <div class="lev2">
                      <div class="lev3">
                           <h5 id="functionNme"></h5>
                          <span>
                                    <button name="query_result" onClick="javascript:pageform.submit();"
                                         class="button_link" onMouseOver="this.className='button_hover'" οnmοuseοut="this.className='button_link'">查询<div></div></button>
                                        <button name="btn15" onClick="javascript:doAdd();"
                                             class="button_link" onMouseOver="this.className='button_hover'" οnmοuseοut="this.className='button_link'">增加<div></div></button>
                                        <button name="btn152" onClick="javascript:viewForUpdate();"
                                             class="button_link" onMouseOver="this.className='button_hover'" οnmοuseοut="this.className='button_link'">编辑<div></div></button>
                                        <button name="btn153" onClick="javascript:doDel();"
                                             class="button_link" onMouseOver="this.className='button_hover'" οnmοuseοut="this.className='button_link'">删除<div></div></button>
                                        <button name="btn153422" onClick="doReset();"
                                             class="button_link" onMouseOver="this.className='button_hover'" οnmοuseοut="this.className='button_link'">重置<div></div></button>
                                        <button name="btn153422" onClick="exports('tableList','导出文件');"
                                             class="button_link" onMouseOver="this.className='button_hover'" οnmοuseοut="this.className='button_link'">导出<div></div></button>
                     </span>
                      </div>
                      </div>
                      </div>
                  </div>
              
               <div class="mid">
             <div class="lev1">
            <div class="lev2">
            <div class="lev3">
                 <table class="search" width="100%" border="0" cellspacing="0" cellpadding="0">
                              <tr>
                                   <td>学生代码:
                                        <input name="studentCode" value="<c:out value="${pageInfo.studentCode}"/>" />
                                   </td>
                                   <td>学生姓名:
                                        <input name="studentName" value="<c:out value="${pageInfo.studentName}"/>" />
                                   </td>
                              </tr>
                              <tr>
                                   <td>学生年龄:
                                        <input name="studentAge" value="<c:out value="${pageInfo.studentAge}"/>" />
                                   </td>
                                   <td>学生专业:
                                        <input name="studentMajor" value="<c:out value="${pageInfo.studentMajor}"/>" />
                                   </td>                                            
                              </tr>
                         </table>
                   
                    <table class="maintable" border="0" cellspacing="0" cellpadding="0" id="tableList">
                              <tr>
                                   <th nowrap  width="3%">序号</th>
                                   <th nowrap width="10%">学号</th>
                                   <th nowrap width="10%">姓名</th>
                                   <th nowrap width="15%">年龄</th>
                                   <th width="30%" >专业<br></th>
                                   <th nowrap  width="5%">状态</th>
                              </tr>
                              <c:forEach items="${list}" varStatus="state" var="dto">
                                   <c:if test="${state.count%2 == 1}">
                                        <tr class="td1" onClick="selectThis(this);setCdeValue('<c:out value="${dto.studentCode}"/>');">
                                             <td >
                                                  <c:out value="${state.count}" />
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.studentCode}" />&nbsp;
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.studentName}" />&nbsp;
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.studentAge}" />&nbsp;
                                             </td>
                                             <td class="td1">
                                                  <c:out value="${dto.studentMajor}" />&nbsp;
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.state}" />&nbsp;
                                             </td>
                                        </tr>
                                   </c:if>
                                   <c:if test="${state.count%2 == 0}">
                                        <tr class="td2" onClick="selectThis(this);setCdeValue('<c:out value="${dto.studentCode}"/>');">
                                             <td>
                                                  <c:out value="${state.count}" />
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.studentCode}" />&nbsp;
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.studentName}" />&nbsp;
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.studentAge}" />&nbsp;
                                             </td>
                                             <td>
                                                  <c:out value="${dto.studentMajor}" />&nbsp;
                                             </td>
                                             <td nowrap>
                                                  <c:out value="${dto.state}" />&nbsp;
                                             </td>
                                        </tr>
                                   </c:if>
                              </c:forEach>
                              </table>
                  </div>
                  </div>
                  </div>
                  </div>
               <div class="bottom">
                       <div class="lev1">
                      <div class="lev2">
                      <div class="lev3">
                         <c:out value="${pageInfo.html}" escapeXml="false" />
                         </div>
                      </div>
                      </div>
               </div>
            </div>
          </form>
     </body>
</html>
<script type="text/javascript">
<!--
var sUserCde = '';
function setCdeValue(cId){
     sUserCde = cId;
}
function viewForUpdate(){
     if(sUserCde==''){
          alert("请选择一条记录");
          return;
     }
     modalWindow('<%=request.getContextPath()%>/StudentController.do?cmd=queryInfo&act=update&key='+sUserCde,800,350);
}
function doDel(){
     if(sUserCde==''){
          alert("请选择一条记录");
          return;
     }
     if(confirm("确定要删除吗?")){
          pageform.userCde.value = sUserCde;
          pageform.action = '<%=request.getContextPath()%>/StudentController.do?cmd=del';
          pageform.submit();
     }
}
function doAdd(){
     modalWindow('<%=request.getContextPath()%>/turningController.do?cmd=user_info&act=save',800,350);
}
function doReset(){
  pageform.userCde.value="";
  pageform.userNme.value="";
  pageform.state.value="";
  pageform.subDept.value="";
  pageform.dept.value="";
}
function getFuncNme(){
     funcDWR.getFuncNme('<c:out value="${sessionScope.functionCde_}"/>',function(args){
          document.getElementById("functionNme").innerHTML=args;
     });
}
//-->
</script>
    <!-- 拦截所有请求 -->     
            </filter-mapping>

3、配置Struts.xml文件
      <struts>
             <!—package 用户配置action的组织包名,用于对Action进行归类   -->
              <package name="first" namespace="/first" extends="struts-default">
                <!—配置当前action 访问路径,以及对应的action类和调用的方法 -->
                <action name="HelloWorld" class="cn.itcast.action.HelloWorldAction" method="sayHello" >
                    <!— 配置处理结果,继承struts-default包,默认结果处理类型为 dispatcher -->
                    <result name="success">/WEB-INF/hello.jsp</result>
                </action>
               </package>
            </struts>

(1)<package>元素:
name 包名,用于被继承
namespace   配置访问路径
extends   指定继承的包

(2)<action>元素属性:
name   配置浏览器访问的路径名称  访问路径格式为:localhost:8080/项目名/<package>标签name/<action>标签的name/
           后缀默认为 action和”” 可以通过常量进行配置,后缀名如果有多个用","分隔
          <constant name="struts.action.extension" value="do"></constant>

class    访问的具体的类    如果继承struts-default 包,默认class 为ActionSupport,该类的 execute方法默认返回 "success"
           我们在写 Action 类时通常会选择继承ActionSupport,也就自动继承了 execute 方法,同时可以使用父类定义的常量  SUCCESS、ERROR 等

method  访问类中的具体方法  不写默认执行execute方法

(3)<result>标签属性
name   访问的方法返回的字符串的值

(4) 通配符映射
    一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
    通配符的映射规则
        若找到多个匹配, 没有通配符的那个将胜出
        若指定的Action不存在, Struts 将会尝试把这个URI与任何一个包含着通配符 * 的Action名及进行匹配
        若 Struts 找到的带有通配符的匹配不止一个, 最后一个匹配将胜出
        被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
        * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.
    例:
    <action name="*_add" class="cn.itcast.action.Girl" method="add"></action>
    匹配路径 Boy_add.action  Girl_add.action

    <action name="Boy_*_*" class="cn.itcast.action.Boy" method="{1}">
        <result name="success">
            <param name="location">/WEB-INF/jsp/{2}.jsp</param>
        </result>
    </action>

    Boy_add_delete 会调用 Boy的add方法, 转发给 delete.jsp

4、写一个javaBean 文件 标准的set get方法

5、新建一个action文件 
     创建一个action的类继承  ActionSupport 以及实现  ModelDriven<带上JavaBean泛型> 
   重写 ActionSupport 类的 execute()方法 以及 ModelDriven 类的 getModel()方法
      getModel()的固定写法:
      private PersonBean person ;
     public PersonBean getModel() {
           this . person = new PersonBean();
           return person ;
     }
里面的方法都要用string类型的返回值
返回的字符串用作Struts.xml文件中的<result>标签的name属性的值,从而定向到相应的页面
          < action name = "personAdd" class = "com.ldl.person.PersonAction" method = "personAdd" >
               < result name = "personView" > /personView.jsp </ result >
           </ action >
6、创建jsp页面 
     在页面上可以通过el表达式直接获取action文件中的值 通过页面提交的数据也能在action文件中直接获取

     








































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值