• Struct2-使用随笔


    提要:最近写了一个2-3各页面的使用Struts2的Demo,在这里做下总结,都已经3年多没做J2EE了,有些感觉都快找不到了。

    目录

    1.必备开发工具

    2.必备jar包

    3.了解知识点

    4.遇到的问题

    一、必备开发工具

    1.MyEclipse

    2.Tomcat

    3.JDK

    4.MySQL

    二、必备jar包

    1.commons-collections-3.2.jar

    2.commons-dbcp-1.2.2.jar

    3.commons-io-1.4.jar

    4.commons-lang-2.3.jar

    5.commons-pool.jar

    6.freemarker-2.3.15.jar

    7.mysql-connector-java-5.1.6-bin.jar

    8.ognl-2.7.3.jar

    9.struts2-core-2.1.8.jar

    10.xwork-core-2.1.6.jar

    三、了解知识点

    1.Struts2简介
    Struts2与Struts1没有太多直接联系,是基于WebWork2发展而来.

    2.Struts2框架的体系结构
    C控制器 : FilterDispatcher(2.1.8之前版本使用),StrutsPrepareAndExecuteFilter(2.1.8及后续版本使用)
    V视图 : Result组件(JSP,freemarker,json等各种视图响应),Struts2标签+OGNL
    M模型 : Action组件,拦截器组件

    3.Struts2主要组件介绍
    FilterDispatcher:主要是负责请求和处理的转发,调用拦截器,Action,Result组件处理.
    Action:主要是负责接收请求参数,执行业务处理.
    Result:主要负责视图响应,比如完成JSP的跳转,将对象转成json字符并输出等
    Interceptor : 主要负责封装共通处理逻辑.比如将请求信息填充到Action对象(内置),权限检查等共通处理(自定义)

    4.Struts2配置文件介绍
    struts.xml : 开发者定义,定义程序的Action,拦截器,Result等组件
    struts.properties : 开发者定义,定义框架的一些属性参数
    struts-default.xml : 框架内置,定义框架内置的拦截器,Result和Action等组件
    default.properties : 框架内置,定义框架的一些默认参数值
    struts-plugin.xml : 插件内置,定义整合新技术的拦截器和Result组件

    5.Struts2核心处理流程
    (1)服务器启动时,控制器解析struts.xml,struts-default.xml,default.properties,struts.properties,struts-plugin.xml配置文件
    (2)客户所有请求发动到控制器,控制根据配置判断是否执行Struts2处理.(默认处理*.action或者*)
    (3)如果属于Struts2请求,创建Action,拦截器等对象执行处理
    a.执行拦截器前期处理
    b.执行Action对象
    c.执行Result生成响应信息
    d.执行拦截器后期处理

    6.入门实例
    (1)引入开发包
    struts2-core-2.1.8.jar
    xwork-core-2.1.6.jar
    freemarker-2.3.15.jar
    ognl-2.7.3.jar
    commons-fileupload-1.2.1.jar
    commons-io-1.3.2.jar
    javassist.jar(2.2版本需要)
    (2)配置控制器
    <filter>
    <filter-name>Struts2Filter</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>Struts2Filter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    (3)添加主配置文件
    在src下创建struts.xml主配置文件,dtd格式参考struts-default.xml
    (4)添加视图,Action,及Action配置

    7.Action相关配置
    (1) namesapce属性:命名空间,用于限定Action请求名
    示例1. namesapce属性为/user

    1 <package name="action" extends="struts-default" namespace="user">
    2     
    3 </package>

    http://localhost:8080/struts2.1/user/index.action
    示例2. namespace属性为/
    http://localhost:8080/struts2.1/login.action
    (2) 统配符*的使用
    <action>元素的name属性可以使用若干个通配符*,
    可以在其他属性中使用{1},{2}格式引用通配符代表的字符串
    (3)动态方法调用的请求格式
    /命名空间/请求名!业务方法名.action
    (4)<param>元素的作用
    可以为Action,拦截器,Result组件对象属性指定初始值.
    8.如何使用request,session等对象
    a. 从ActionContext获取Map封装类型
    Map<String,Object> request = (Map<String,Object>)ActionContext.getContext().get("request");
    Map<String,Object> session = ActionContext.getContext().getSession();
    Map<String,Object> application = ActionContext.getContext().getSession();
    b. 从ServletActionContext获取
    ServletActionContext.getPageContext();
    ServletActionContext.getRequest();
    ServletActionContext.getServletContext();
    ServletActionContext.getResponse();

    四.遇到的问题

    1.关于表单提交和Ajax提交

    先说下Ajax提交:

    html

    1 <button class="btn btn-custom-primary btn-lg btn-block btn-auth"  onclick='login()'></button>

    js(这里用的是JQuery)

     1 function login(){
     2      if($("#username").val().length==0){
     3        alert("用户名不能为空");
     4        return;
     5      }
     6      if($("#password").val().length==0){
     7         alert("密码不能为空");
     8         return;
     9      }
    10      $.ajax({
    11         type:'post',
    12         url:'${pageContext.request.contextPath}/theme/login.action',
    13         data:{
    14            'username':$("#username").val(),
    15            'password':$("#password").val(),
    16         },
    17         dataType:'json',
    18         success:function(returnData){
    19            if(returnData.success==true){
    20              window.location.replace("${pageContext.request.contextPath}/theme/main.jsp");
    21            } else {
    22                 alert("用户名或密码错误");
    23            }
    24         },
    25         error:function(e) {
    26              alert("登录失败");
    27         }
    28      });
    29   }

    再说Form表单:

     1 <form class="form-horizontal" role="form" action="${pageContext.request.contextPath}/theme/login.action">
     2                 <h4 class="modal-title" id="myModalLabel">账号:</h4>
     3                     <div class="form-group">
     4                         <label for="username" class="control-label sr-only">Username</label>
     5                         <div class="col-sm-12">
     6                             <div class="input-group">
     7                                 <input type="text" name="username" id="username" class="form-control">
     8                                 <span class="input-group-addon"><i class="fa fa-user"></i></span>
     9                             </div>
    10                         </div>
    11                     </div>
    12                     <h4 class="modal-title" id="myModalLabel">密码:</h4>
    13                     <label for="password" class="control-label sr-only">Password</label>
    14                     <div class="form-group">
    15                         <div class="col-sm-12">
    16                             <div class="input-group">
    17                                 <input type="password" name="password" id="password" class="form-control">
    18                                 <span class="input-group-addon"><i class="fa fa-lock"></i></span>
    19                             </div>
    20                         </div>
    21                     </div>
    22                         <div id="placeholder" style="10px;height:10px"></div>
    23                     <button type="submit" class="btn btn-custom-primary btn-lg btn-block btn-auth"><i class="fa fa-arrow-circle-o-right"></i> Login</button>
    24  </form>

    在该请求过程中会带2个参数到后台,参数名1:username,参数名2:password

     1 public class LoginAction extends BaseAction{
     2     public String username;
     3     public String password;
     4     
     5     public String doLogin(){
     6         User user = UserDao.getUser(username,password);
     7         if(user != null) {
     8             ActionContext.getContext().getSession().put(Constanst.USERNAME_OF_SESSION, username);
     9             ActionContext.getContext().getSession().put(Constanst.PASSWORD_OF_SESSION, password);
    10             flag = true;
    11         }  else {
    12             msg = "用户名或密码错误";
    13         }
    14         String jsonStr = "{"success":" + flag + ", "msg":"" + msg + ""}";
    15         try {
    16             this.setInputStream(new ByteArrayInputStream(jsonStr.getBytes("utf-8")));
    17         } catch (UnsupportedEncodingException e) {
    18             e.printStackTrace();
    19         }
    20         return SUCCESS;
    21     }
    22     
    23     public String getUsername() {
    24         return username;
    25     }
    26 
    27     public void setUsername(String username) {
    28         this.username = username;
    29     }
    30 
    31     public String getPassword() {
    32         return password;
    33     }
    34 
    35     public void setPassword(String password) {
    36         this.password = password;
    37     }
    38 
    39 }

    2.请求返回json和html的写法

    待续

    3.连接数据库的问题

    待续

    4.先上图

    源代码:http://pan.baidu.com/s/1hq6RZYs

  • 相关阅读:
    汽车知识图谱
    医疗知识图谱与自动问答
    MongoDB(单节点)环境配置
    【字符串-01】
    【双指针-01】
    【排序-01】十大排序算法(Python实现)
    【队列-01】队列题目解析
    【栈-01】栈题目解析
    【贪心-02】贪心算法题目解析
    【贪心-01】贪心算法原理介绍
  • 原文地址:https://www.cnblogs.com/royi123/p/4975720.html
Copyright © 2020-2023  润新知