美文网首页struts程序员
马士兵struts2视频笔记--第一天

马士兵struts2视频笔记--第一天

作者: LOOK_LOOK | 来源:发表于2017-03-24 18:56 被阅读77次
    1、开发准备  
    2、第一个案例—Hello World 
          2.1.新建web project项目   
          2.2.配置项目  
                2.2.1 将开发库导入lib文件夹下 
                2.2.2 在src包下新建struts.xml配置文件    
                2.2.3 修改struts.xml  
                2.2.4 修改web.xml文件为  
                2.2.5 访问    
          2.3.原理    
    3、namespace 
    4、action    
    5、path  
          5.1 path.jsp  
          5.2 index.jsp 
    6、ActionMethod_DMI_动态方法调用   
          6.1 index.jsp页面   
          6.2 struts.xml文件  
          6.3 UserAction.java   
    

    1、开发准备

    jdk(http://www.oracle.com/technetwork/java/javase/downloads/index.html)
    myeclipse
    tomcat(http://tomcat.apache.org/)
    struts2(http://struts.apache.org/download.cgi)
    Struts2开发文档(http://struts.apache.org/docs/getting-started.html)

    2、第一个案例—Hello World

    2.1.新建web project项目

    File-new-web project,输入项目名,如sturts2_001

    2-1 新建项目.png

    2.2.配置项目

    2.2.1 将开发库导入lib文件夹下

    下载链接

    2.2.2 在src包下新建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>
        <!-- 
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="false" />
        <include file="example.xml"/>
        <package name="default" namespace="/" extends="struts-default">
            <default-action-ref name="index" />
            <action name="index">
                <result type="redirectAction">
                    <param name="actionName">HelloWorld</param>
                    <param name="namespace">/example</param>
                </result>
            </action>
        </package>
         -->
        <!-- Add packages here -->
    </struts>
    

    2.2.3 修改struts.xml

    在 下面添加:

    <constant name="struts.devMode" value="true" />
         <package name="default" namespace="/" extends="struts-default">
            <action name="hello">
                <result>
                    /Hello.jsp
                </result>
            </action>
     </package>
    

    说明:

    ①<constant name="struts.devMode" value="true" />开发模式
    ②action name:访问的名称
    ③package:类似于java中的包,解决重名问题

    2.2.4 修改web.xml文件为

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0"
        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_3_0.xsd">
         <welcome-file-list>
        <welcome-file>Hello.jsp</welcome-file>
      </welcome-file-list>
      
      <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>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
    

    2.2.5 访问

    新建Hello.jsp文件,然后部署项目,访问localhost:8080/struts2/hello即可访问到Hello.jsp页面

    图2-2 项目结构.png

    2.3.原理

    图3-1 struts2 核心原理.png

    3、namespace

    <package name="default" namespace="/" extends="struts-default">
            <default-action-ref name="index" />
            <action name="index">
                <result type="redirectAction">
                    <param name="actionName">HelloWorld</param>
                    <param name="namespace">/example</param>
                </result>
            </action>
        </package>
    

    namespace决定了action的访问路径,默认为"",可以接收所有路径的action
    namespace可以写为’/’,或者’/xxx’,或者’/xxx/yyy’,对应的action访问路径为’/index.action’‘/xxx/index.action’,或者’/xxx/yyy/index.action’。
    namespace最好也用模块来进行命名

    4、action

    图4-1 执行过程.png

    action不一定是servlet,可以是一个普通类。

    图4-2 程序结构.png

    <action name="path" class="com.bjsxt.struts2.path.action.PathAction">
    “class”是类的路径。当class属性没有配置时,默认访问ActionSupport类。
    action的三种实现方法

    ①普通类,手写execute方法。缺点:容易出错。

    public class IndexAction1 {
        public String execute() {
            return "success";
        }
    }
    

    ②实现Action类,重载execute方法。

    public class IndexAction2 implements Action {
        @Override
        public String execute() {
            return "success";
        }
    }
    

    ③继承已经实现好的类,有很多可以直接用方法。推荐使用

    public class IndexAction3 extends ActionSupport {
        @Override
        public String execute() {
            return "success";
        }
    }
    

    5、path

    struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
    虽然可以用redirect方式解决,但redirect方式并非必要。
    解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
    或者使用myeclipse经常用的,指定basePath。

    图5-1 程序结构.png

    5.1 path.jsp

    <?xml version="1.0" encoding="GB18030" ?>
    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <%@taglib uri="/struts-tags" prefix="s" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <base href="<%=basePath%>" />
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
    <title>Insert title here</title>
    </head>
    <body>
    struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br />
    <a href="index.jsp">index.jsp</a>
    <br />
    虽然可以用redirect方式解决,但redirect方式并非必要。
    <br />
    解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
    <br />
    或者使用myeclipse经常用的,指定basePath
    </body>
    </html>
    

    注:前面设置好了<base>标签,就可以使用绝对路径了。

    5.2 index.jsp

    <?xml version="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+"/";
    //在head中<base href>指定basePath
    --%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
    <title>Insert title here</title>
    </head>
    <body>
        <a href="path/path">路径问题说明</a>
    </body>
    </html>
    

    6、ActionMethod_DMI_动态方法调用.

    Action执行的时候并不一定要执行execute方法,也可以访问其他方法。
    访问方法有两种:
    ①在配置文件中配置Action的时候用method=“”来指定执行指定方法
    ②url地址中动态指定(动态方法调用DMI)(推荐)

    6.1 index.jsp页面

    <?xml version="1.0" encoding="GB18030" ?>
    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    
    <% String context = request.getContextPath(); %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
    <title>Insert title here</title>
    </head>
    <body>
    Action执行的时候并不一定要执行execute方法<br />
    可以在配置文件中配置Action的时候用method=来指定执行哪个方法
    也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />
        <a href="<%=context %>/user/userAdd">添加用户</a>
        <br />
        <a href="<%=context %>/user/user!add">添加用户</a>
        <br />
    前者会产生太多的action,所以不推荐使用
        
    </body>
    </html>
    

    说明:第一个超链接是普通方法,对应struts.xml中第一个action,需要配置method属性。
    第二个超链接是动态方法调用,struts.xml文件不需要改动,推荐使用。

    6.2 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>
        <constant name="struts.devMode" value="true" />
        <package name="user" extends="struts-default" namespace="/user">
            <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
                <result>/user_add_success.jsp</result>
            </action>
            
            <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
                <result>/user_add_success.jsp</result>
            </action>
        </package>
    </struts>
    

    6.3 UserAction.java

    package com.bjsxt.struts2.user.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport {
        public String add() {
            return SUCCESS;
        }
    }
    

    马士兵struts2视频笔记--第一天
    马士兵struts2视频笔记--第二天
    马士兵struts2视频笔记--第三天

    相关文章

      网友评论

        本文标题:马士兵struts2视频笔记--第一天

        本文链接:https://www.haomeiwen.com/subject/baofottx.html