Struts2--day01

非本人总结的笔记,抄点笔记复习复习。感谢传智博客及黑马程序猿


记笔记啊记笔记

Struts2概述

什么是框架

框架帮我们实现一部分功能,使用框架可以省略一些代码

主流的框架

SSH Struts2、Spring、Hibernate。
其他框架:MyBatis、SpringMVC

什么是Struts2 框架

Struts2应用在web层框架,符合MVC思想

JavaEE三层结构:web层、Service层、持久化层(dao)

Struts2在Struts1和webwork框架基础上发展的全新的框架

Struts2核心功能:
1、允许POJO(Plain Old Java Object)对象作为Action
2、Action的execute方法不再与ServletAPI耦合,更易测试
3、支持更多的视图技术(JSP、FreeMarker、Velocity)
4、基于SpringAOP思想的拦截器机制,更易扩展
5、更强大、更易用输入校验机制
6、整合Ajax支持

JavaEE有三层支持

1、Web层:Struts2、Struts1
2、Service层:Spring
3、持久化层:Hibernate、mybatis

Web层框架特点

Web层有前端控制器(过滤器)

Struts2的入门案例

导入jar包

Struts2--day01_第1张图片
jar包

配置Struts2核心过滤器web.xml


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


    struts2
    /*

使用的struts2提供的过滤器,不需要写,直接配置就可以

创建Action继承ActionSupport

public class  HelloAction  extends ActionSupport {
/*
 * 之前学习的servlet中,请求servlet,自动执行servlet里面service方法
 * service根据请求调用doget和dopost方法
 *  1 创建servlet:实现接口,继承类
 *  2 配置servlet访问路径 
 * 访问action时候,默认自动执行action里面名称是 execute方法
 * 配置action访问路径
 */
    public  String execute()  {
       return "success";
    }
}

配置Action的访问路径

配置文件名必须是struts.xml,必须放在src下面,xml文件需要引入dtd约束






    
    
        /index.jsp
    



Struts2--day01_第2张图片
struts.xml在Struts2的文件路径

访问action

访问action:http://localhost:8080/web/index.action

Struts2的流程分析

Struts2--day01_第3张图片
Struts2流程分析

Struts2配置文件的加载顺序

Struts2配置文件,由核心控制器加载StrutsPrepareAndExecuteFilter(预处理,执行过滤)

init_DefaultProperties();   //1 org/apache/struts2/default.properties
init_TraditionXmlConfigurations();  //2  struts-default.xml struts-plugin.xml struts.xml
init_LegacyStrutsProperties();  //3 自定义struts.properties
init_CustomConfigurationProvider();  // 自定义配置提供
init_FilterInitParameters();  //web.xml
init_AliasStandardObjects();  //Bean加载

default.properties 该文件保存在struts2-core-2.3.7.jar 中org.apache.struts2包里面 (常量的默认值)
struts-default.xml 该文件保存在 struts2-core-2.3.7.jar (Bean、拦截器、结果类型)
struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar (在插件包中存在
,配置插件信息)
struts.xml 该文件是web应用默认的struts配置文件 (实际开发中,通常写struts.xml)
struts.properties 该文件是Struts的默认配置文件 (配置常量 )
web.xml 该文件是Web应用的配置文件(配置常量)

Struts2的配置文件Struts.xml中packname配置

package类似于包,区别不同的action
name:给package起名字,不要写中文,包含特殊符号,有多个package,但是name值不能相同
extends:属性是固定的,struts-default,表示package里面具的action具有Struts2的功能
namespace:属性值和action标签的name属性值,共同构成访问地址



     
     
          /index.jsp
      

namespace的值是/aa
action的name值是index
访问:http://localhost:8080/HelloWorld/aa/index.action

Struts2的配置文件struts.xml中action配置

元素配置默认值

元素 属性 默认值
namespace /
class ActionSupport类
name success

配置action的访问名称,返回到路径:action标签要写到package里面,一个package里面可以有多个action配置
action配置

属性 配置
name 和package里面的namespace值,构成访问名称,可以在多个action,但是name的值不能相同
class Action的全路径,包括类路径
method 默认执行execute方法,但是可以设置执行其他的方法

result标签

返回action里面的方法返回值,配置到路径

属性 配置
name 对应action方法返回值
type 如何到路径中(转发和重定向)

路径写法强调,Action的name值不要加/

配置文件struts.xml中默认action和action默认处理类

1.如果Action的class没有配置,执行action可以访问到,默认执行的Struts2的ActionSupport,执行这个类里面的execute方法
2.如果随便输入一个地址,也执行某个action


默认action

Struts2的常量配置

struts2默认常量在default.properties中配置

Struts2--day01_第4张图片
default.properties路径

第一种 在src下面创建struts.properties中配置

格式要求struts.properties
格式:struts.devMode=true

第二种 在struts.xml中进行修改

常量配置

常用常量
设置表单post提交中午乱码


修改struts.xml不需要重新启动服务器,自动加载


访问struts2框架Action访问路径(扩展名)


浏览器缓存,false不缓存,true缓存,产品环境设置true、开发环设置false


提供详细报错页面,修改struts.xml后不需要重启服务器


第三种 在web.xml中修改

    
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        
                struts.i18n.encoding
                UTF-8
        
    

Struts2的配置文件struts.xml中的include配置


Struts2的Action三种编写方式

第一种创建普通Java类,这个类不需要实现任何接口,不继承任何类

/**
 *创建普通Java类,这个类不需要实现任何接口,不继承任何类
 /
public class UserAction{
       public String execute(){
             return "success";
       }
}

第二种创建类,实现接口,Action

创建类,实现Action接口,在Action接口里面有几个常量


Struts2--day01_第5张图片
常量
常量 说明
ERROR 异常
INPUT 输入数据类型不一样
LOGIN 返回登录页面
NONE 返回null
SUCCESS 成功
public class UserAction implements Action{
      public String execute() throws Exception{
            //Action接口里面的常量
            retrun SUCCESS;
      }
}

第三种创建类,基础ActionSupport(建议使用)

ActionSupport类是Action接口的实现类

public class UserAction extends Actionsupport{
      public String execute() throws Exception{
            retrun SUCCESS;
      }
}

Struts2访问action的方法

第一种方法在method属性值里面写要执行方法的名称

在action里面有method属性,在method属性里面写要执行的方法名称,比如在action里面创建add方法。缺点:每个方法都需要配置action,造成大量的action配置


第二种方法使用通配符方式配置(经常使用)

使用通配符方式配置,使用*星号,表示任意值


Struts2--day01_第6张图片
通配符配置

Struts2--day01_第7张图片
分析说明

第三种方式使用动态访问方式

1、设置常量值为true

struts.enable.DynamicMethodInvocation=true  常量值为true

配置不需要使用method属性


配置

action的name值!,执行的action的方法名称


访问路径

Struts2访问Servlet的方式

第一种方式使用类ActionContext,里面的不同方法实现

使用类ActionContext,里面的不同方法实现
1、getContext()返回ActionContext实例对象
2、getParameters()类似调用HttpServletRequest的getParameterMap()
演示一:通过表单提交数据,在action获取数值

username:
password:
//ActionContext的实例
ActionContext actioncontext = ActionContext.getContext();
//使用getParameters()
//返回的map集合,key是表单输入项name的属性值,value是输入的值
Map map = actioncontext.getParameters();
//获取到username值
//返回value值是数据形式
String[] username = (String[]) map.get("username");
//获取到password值
String[] password = (String[]) map.get("password");

System.out.println(Arrays.toString(username));
System.out.println(Arrays.toString(password));
return SUCCESS;

演示二:向三个域对象里面设置值,到jsp页面中获取三个域对象里面的值

//向request域设置值
actioncontext.put("req", "requestValue");
//向session域设置值
actionicontext.getSession().put("session", "sessionValue");
//向ServletContext域设置值
actioncontext.getApplication().put("apps", "appsvalue");

第二种方式实现不同接口,分别得到Servlet里面request、response、servletcontext对象

public class UserAction extends ActionSupport implements ServletRequestAware, ServletResponseAware{
}

第三种方式使用类ServletActionContext类里面静态方法得到request、response、servletcontext对象

static PageContext getPageContext();
static HttpServletRequest getRequest();
static HttpServletResponse getResponse();
static ServletContext getServletContext();

案例

第一步:导入jar包

Struts2--day01_第8张图片
jar包

第二步:配置struts2核心过滤器web.xml


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


    struts2
    /*

第三步:配置LoginAction

package cn.itcast.login;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
       public String login() {
              //约定用户名admin 密码1314
              //获取表单数据
              HttpServletRequest  request = ServletActionContext.getRequest();
              String username = request.getParameter("username");
              String password = request.getParameter("password");
              //判断
              if("admin".equals(username) && "1314".equals(password)) {
                     return "loginsuccess";
              } else {
                     return "loginfail";
              }
       }
}

第四步:创建表单请求页面login.jsp

<%@ page language="java"  import="java.util.*" pageEncoding="utf-8"%>


  
    My JSP 'form1.jsp'starting page
  
  
    
username:
password:

第五步(1):和LoginAction在一个包下配置login.xml




    
    
    
    
       
           /success.jsp
           /fail.jsp
       
    
  

第五步(2)在用include配置到struts.xml中


第六步创建result的结果页面success.jsp和fail.jsp

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


  
    My JSP'success.jsp' starting page
  
  
    login success
  

fail.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


  
    My JSP 'fail.jsp' starting page
  
  
    login fail
  

最后简单总结

1、Struts2编写Action三种方式
2、Struts2访问action的三种方式
3、Struts2访问servlet的三种方式

过去2016

在过去的几个月里,一直在维护实验室的项目,那段时间,晚上都睡在实验室,白天上课睡觉,很少来逛逛了,偶尔也学点东西,不过感觉还是需要一些项目来练习,否则就容易忘记。暑假也学了安卓,虽然安卓的确让我感觉到神奇,但是我还是放弃了,也就偶尔玩玩看看。

未来2017

把那些笔记文档搞定,写几个SSH或者SSM的项目,争取在暑假出去找工作之前学好,还有就是计算机设计大赛,这个看情况吧。
10月份之前把驾照考到手。

最后,再过十几个小时,我就该坐火车回家了,对那三个留在实验室的小伙伴说声对不起了,我提前跑路了。

你可能感兴趣的:(Struts2--day01)