struts2 入门

   个人心得,错误在所难免,还望同门不吝指正,转载请注明出处.http://www.cnblogs.com/kingshing/p/7389028.html

  1)为什么不用基础的servlet开发?用struts开发(给你一个学习struts的理由)

      一句话:简化开发,便于维护,提高效率(针对中大型应用).

          详细:传统的servlet开发,有很多缺点,我曾写一个学生管理,十几个servlet,后来我根据功能模块,分成了几个servlet,一个servlet根据获取的请求method的不同,执行不同的方法,但一个servlet就包含很多方法,看起来很累赘,而且servlet很多东西都是写死的(方法返回结果--->跳转路径,业务需求--->方法),编译后无法更改,比如以前我注册后跳转到登录页面,现在需求改了,要求跳转到首页,这时要改代码,再重新编译,然后发布,可能你觉得无所谓啊,但是对于一个大型的项目来说,重新编译时需要时间的,比如淘宝,暂停服务一个小时,是不是少了很多交易,都是人民币啊.那能不能将这控制跳转的部分抽离出来呢,struts就是这干这事的,通过读取xml配置文件,达到控制的效果,而且只需要写业务逻辑,控制全部由配置文件来做,这样就不需要重新编译,重新读取配置文件就行了.(好处有很多,这里只是简单列一两个)

2)开发流程:

  a) web项目,引入struts2-jar包

  

  b)web.xml 配置核心过滤器

    注意:struts版本不同,核心过滤器的位置和名字会有不同

 1 <?xml version="1.0" encoding="UTF-8"?>
 2     <web-app id="WebApp_ID" version="3.1"
 3     xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
 5    <filter>
 6      <filter-name>struts2</filter-name>
 7        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
 8      </filter>
 9      <filter-mapping>
10        <filter-name>struts2</filter-name>
11       <url-pattern>/*</url-pattern>
12      </filter-mapping>
13   </web-app>

  c)开发action 

package struts2_test;
import com.opensymphony.xwork2.ActionSupport;
/**
    HelloAction只是一个普通的java类,理论上不需要继承或者实现任何接口,亲测不继承不会报错.

ActionSupport是一个工具类,,此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发
    所以一般情况(后者说习惯)继承这个类.
 */
public class HelloAction extends ActionSupport{// ActionSupport
 public String execute() {
  //1.这里的方法名字可以任意 但必须和struts.xml里的method属性一致
  //2.必须无参数
  //3.返回必须String
   System.out.println("模拟这里调用业务逻辑,service,dao等");
   return "success";
   //这里字符"success"也是任意  但也是和struts.xml里<result></result>里相对应
  }
 } 

 d)配置action src/struts.xml(xml文件位置,名字最好别改,容易报错[找不到])  

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <!-- struts2的action必须放在一个指定的包空间下定义 -->
    <package name="default" extends="struts-default">
    <!-- 定义处理请求URL为login.action的Action -->
        <action name="login" method="execute" class="struts2_test.HelloAction">
        <!-- 定义处理结果字符串和资源之间的映射关系 -->
            <result name="success">success.jsp</result>
            <result name="failed">error.jsp</result>
        </action>
    </package>
</struts>

注意:  <action>里name="xxx" 是访问路径,如 http://localhost:8080/项目名称/xxx

        class="bbb"是对应的action类的路径(包名.类名的形式)

        method=" aaa"是action类里对应的方法,方法返回的字符标记,会和result里name属性的比对,一样的就跳转到对应的页面,或者路径中

<package name="default" extends="struts-default" >里的default任意字符,package是为了不同包里名字相同时不会冲突,extends="struts-default"是固定写法,

3)整体目录结构如下:

 

  

  

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  最后...博主也是第一次写博客,如果这篇文章对你有一点点帮助,点个赞吧.谢谢支持.

posted @ 2017-08-18 12:39  KingShing  阅读(215)  评论(0编辑  收藏  举报