struts2--1.入门程序

来源:互联网 发布:mysql触发器 编辑:程序博客网 时间:2024/06/05 02:53

1      Struts2概述

1 struts2框架应用javaee三层结构中web层框架

 

2 struts2框架在struts1和webwork基础之上发展全新的框架

 

3 struts2解决问题:

 

4 struts2版本

 

5 web层常见框架

(1)struts2

(2)springMVC

 

 

2      Struts2框架入门

2.1        搭建Struts2基本环境

2.1.1      第一步 加入 jar 包:

       在lib中有jar包,不能把这些jar都导入到项目中

       复制 struts-2.3.31\apps\struts2-blank\WEB-INF\lib 下的所有 jar 包到当前 web 应用的 lib 目录下.

 

2.1.2      第二步 创建action

 

2.1.3      第三步 配置action类访问路径

2.1.3.1       创建struts2核心配置文件

- 核心配置文件名称和位置是固定的

- 位置必须在src下面,名称 struts.xml

2.1.3.2       引入dtd约束

 

2.1.3.3       或者

复制 struts-2.3.31\apps\struts2-blank\WEB-INF\classes下的 struts.xml 文件到当前 web 应用的 src 目录下.

  

2.1.3.4       action配置

/*    * (1)每次访问servlet时候,都会执行service方法    * - 写类继承HttpServlet,重写类里面的方法    * - 在web.xml中配置servlet访问路径    *    * (2)访问action,每次访问action时候,默认执行名称execute方法    * - 配置action访问路径    * */   public String execute() {      System.out.println("action.............");      return "ok";        }

 

访问路径:

http://127.0.0.1/struts2_day01/hello.action

 

2.1.4      第四步 在 web.xml 文件中配置过滤器:

       复制 struts-2.3.31\apps\struts2-blank1\WEB-INF\web.xml 文件中的过滤器的配置到当前 web 应用的 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>        <url-pattern>/*</url-pattern></filter-mapping>

 

2.2        Struts2执行过程

画图分析过程

 

2.3        查看源代码

 

1 过滤器在服务器启动时候创建,创建过滤器时候执行init方法

(1)在init方法中主要加载配置文件

- 包含自己创建的配置文件和struts2自带配置文件

** struts.xml

** web.xml

 

2.4        Struts2的核心配置文件

1 名称和位置固定的

 

2 在配置文件中主要三个标签 package、action、result,标签里面的属性 

<struts><!—1、包含的其他配置文件  --><!—include  file=" "  --><!– 2、定义struts常量-->    <constant  name="常量名称 "  value="常量值 " /><!—3、定义bean  -->    <bean  name="bean名称"  class="" scope=" " static= " " option=" "/><!—4、定义包,package元素是Struts配置文件的核心  --> <package name="struts-default"  extends="" namespace="名称空间" abstract=""  externalReferenceResolver><!—5、定义返回值  -->         <result-types>     <result-type name="" class=""   default="true|false">           <param  name="参数名" >参数值</param>         </result-type>    </result-types><!—6、定义Action  -->        <action name="用户请求名"  class="Action实现类"  method="调用Action类的方法" >         <result name="Action定义的结果名">物理视图地址 </result>    </action> <!—7、定义拦截器  -->    <interceptors>          <interceptor name="" class=""/>             <interceptor-stack name="">                 <interceptor-ref name=""/>             </interceptor-stack>                 <default-interceptor-ref name="defaultStack"/></interceptors>     </package></struts>

2.4.1       标签package

1 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package里面才能 配置action

 

2 package标签属性

(1)name属性

- name属性值根功能本身没有关系的,

- 在一个配置文件中可以写多个package标签,name属性值不能相同的

 

(2)extends属性

- 属性值固定的,struts-default

- 写了这个属性之后,在package里面配置的类具有action功能

 

(3)namespace属性

- namespace属性值和action标签里面的name属性值构成访问路径

 

2.4.2       标签action

1 action标签配置action访问路径

 

2 action标签属性

(1)name属性

       namespace属性值和action标签里面的name属性值构成访问路径

       在package标签里面写多个action标签,但是action的name属性值不能相同的

 

(2)class属性

       action全路径

 

(3)method属性

       比如在action里面默认执行的方法execute方法,但是在action里面写其他的方法

       让action里面多个方法执行,使用method进行配置

 

2.4.3       标签result

1 根据action的方法返回值,配置到不同的路径里面

 

2 result标签属性

(1)name属性

- 和方法返回值一样

 

(2)type属性

- 配置如何到路径中(转发或者重定向)

- type属性默认值做转发操作

 

 

2.5        Struts2常量配置

1 struts2框架,帮我们实现一部分功能,struts2里面有常量,在常量里面封装一部分功能

 

2 struts2默认的常量位置(记住)

 

3 修改struts2默认常量值

(1)常用的方式

- 在struts.xml中进行配置

<constant name="struts.i18n.encoding" value="UTF-8"></constant>

 

(2)还有两种方式(了解)

- 在src下面创建 struts.properties,进行修改

- 在web.xml进行配置

 

4 介绍最常用常量(明天演示)

(1)表单提交数据到action里面,在action可以获取表单提交数据,

(2)表单提交数据有中文,有乱码问题,解决:

- post提交直接设置编码

- get提交做编码转换

(3)如果在action获取表单通过post方式提交中文,中文乱码问题帮解决了,不需要自己处理问题

 

2.6        分模块开发

1 单独写配置文件,把配置文件引入到核心配置文件中


2.7        Action三种编写方式

2.7.1      第一种 创建普通类

这个不继承任何类,不实现任何接口

 

2.7.2      第二种 创建类,

实现接口 Action

 

public classUserAction implementsAction{    @Override   public String execute() throws Exception {           return null;   } } 

源代码:

默认执行execute()方法

public interface Action  {public abstract String execute() throws Exception;        //执行成功,返回成功界面public static final String SUCCESS = "success";//执行成功,不需要返回成功界面public static final String NONE = "none";//执行失败,eg:信息验证失败           public static final String ERROR = "error";       //根据输入信息比如页码跳转       public static final String INPUT = "input";     //Action验证失败重新登录        public static final String LOGIN = "login";         } 

2.7.3      第三种 创建类—常用

       继承类ActionSupport(一般使用)


//继承类public classPersonAction extends ActionSupport{ }

 

2.8        访问action的方法(重点)

1 有三种方式实现

第一种 使用action标签的method属性,在这个属性里面写执行的action的方法

 

第二种 使用通配符方式实现

 

第三种 动态访问实现(不用)

 

2 演示错误

(1)如果action方法有返回值,在配置文件中没有配置,出现错误

 

(2)在action里面的方法有返回值,如果有返回值时候类型必须是String

(3)action里面的方法可以没有返回值,没有返回值时候,在result标签不需要配置

- 把方法写成void

- 让返回值,返回 ”none”

 

2.8.1      使用action标签method属性

1 创建action,创建多个方法

public classBookAction extends ActionSupport{    //添加   public String add() {      System.out.println("add..............");      return NONE;   }    //修改   public String update() {      System.out.println("update..............");      return NONE;   }} 

2 使用method配置

 

缺陷:action每个方法都需要配置,如果action里面有多个方法,配置很多的action

2.8.2      使用通配符实现(重点)

       在action标签里面name属性,name属性值里面写 符号 *  星号

* 理解: 表示匹配任意内容

       比如访问hello,* 可以匹配到;比如访问add,* 可以匹配到

     被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…{0} 匹配整个 URI

<!-- 通配符方式实现 -->   <package name="tongdemo" namespace="/"extends="struts-default">      <!-- name属性值里面写符号 *         (1)执行action里面的add方法,访问 book_add,使用book_*可以匹配到,*相当于变成 add                 (2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成 update         上面两个路径使用 book_* 可以匹配到         method属性写*值 -->      <action name="book_*"class="struts.action.tongpeifu.BookAction"method="{1}">      </action>    </package>

 

2.8.3      动态方法—了解,基本不用

Action执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用 “method=”来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI)(推荐)

Jsp:

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

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

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

 

struts.xml:

<constant name="struts.devMode"value="true" />    <package name="user"extends="struts-default" namespace="/user">        <action name="user" class="struts2.user.action.UserAction"method="add">            <result>/user_add_success.jsp</result>        </action>               <action name="user" class="struts2.user.action.UserAction">            <result>/user_add_success.jsp</result>        </action>    </package> 

2.9        案例-客户列表

action:

public classCustomerAction extends ActionSupport {    //客户列表   public String list() {      //调用service      CustomerServiceservice = newCustomerService();      List<Customer>list = service.findAll();           //放到域对象里面(明天讲到)      HttpServletRequestrequest = ServletActionContext.getRequest();      request.setAttribute("list", list);           return "list";   }} 

Servive:

public classCustomerService {    public List<Customer>findAll() {      CustomerDaodao = newCustomerDaoImpl();      return dao.findAll();   } } 

struts.xml:

<package name="demo" extends="struts-default"namespace="/">      <action name="customer_*" class="cn.itcast.action.CustomerAction" method="{1}">         <result name="list">/jsp/customer/list.jsp</result>      </action>   </package>


 

 源代码文件:http://download.csdn.net/detail/qq_26553781/9774592

 

 

 

0 0