struts2--1.入门程序

    xiaoxiao2021-03-25  140

    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

     

     

     

    转载请注明原文地址: https://ju.6miu.com/read-5635.html

    最新回复(0)