zoukankan      html  css  js  c++  java
  • Struts2

    Struts2

    一、概述:

    • struts2把Servlet、JSP、自定义标签、JSP标准标签库、信息资源全部整合起来了
    • 且已经实现了MVC开发模式。
    • 基于Struts2开发web project比原生开发有许多好处:
      • 1)开发人员如果基于Struts2进行web project的开发,就不用像原生开发那样,还得自己去实现MVC开发模式,自己去集成相应的servlet、jstl标签库的jar包到自己的project中,只需要引入Struts2的相应jar包,就可以直接使用其servlet API、标准标签库中的jsp标签了。
      • 2)struts2框架中除了集成了上述servlet、标签库等等,还扩展了另外一部分功能,也从极大程度上方便web project程序的开发,加快开发进程。这些功能包括:前端拦截器、运行时表单属性验证、类型转换、OGNL表达式语言、IoC容器。
      • 3)除了支持JSP之外,还支持FreeMarker、Velocity等表现层技术
      • 4)Struts2中的Action和Servlet实现了松耦合,使得Action更像一个普通的java对象,该控制器代码中没有耦合任何的Servlet API,这也使单元测试变得更加方便。

    二、编程思路

    • step1,下载Struts2开发包
        • 网址:http://struts.apache.org
        • 有多种版本可供选择,建议下载FullDistribution版
        • 解压下载所得压缩包,可以看到apps/docs/lib/src等文件夹,分别存放着使用Struts2的示例程序、相关文档、Struts2核心类库以及所依赖的三方类库、Struts2框架的所有源代码。 
    • step2,安装Struts2开发包至你的project中
        • 解压step1下载所得压缩包
        • 获取其lib文件夹下的jar包,将其复制粘贴至project的WEB-INF/lib/目录下
          •  
    • step3,在project的web.xml中配置Struts2的核心控制器,用来拦截客户请求

          •   <filter>
                <filter-name>struts2</filter-name>
                <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
                <init-param>
                    <param-name>struts.i18n.encoding</param-name>
                    <param-value>UTF-8</param-value>
                </init-param>
              </filter>
              <filter-mapping>
                <filter-name>struts2</filter-name>
                <url-pattern>*.action</url-pattern>
              </filter-mapping>
              <filter-mapping>
                <filter-name>struts2</filter-name>
                <url-pattern>*.jsp</url-pattern>
              </filter-mapping>
              <!-- 添加下面这行的目的是使程序可以使用struts2中的内置类型转换器实现简单类型转换 -->
              <filter-mapping>
                  <filter-name>struts2</filter-name>
                  <url-pattern>/struts/*</url-pattern>
              </filter-mapping>
    • step4,经过上述步骤,Struts2已经集成到你的project中了,下面就可以基于Struts2所提供的各种功能为你的web project添加各个功能模块
    • 例一,为你的web project添加用户登录模块
      •   功能  
        login.jsp 用户登录页面,可以输入用户名和密码  
        LoginAction.java 用于处理用户的“登录请求”,并且根据请求参数返回相应的结果  
             
             
             
          
    • step5,创建视图页面 login.jsp

          • <%@ page language="java" pageEncoding="UTF-8"%>
            
            <%@ taglib prefix="s" uri="/struts-tags"%>
            <font color="red" style="font-size:12px">
                <s:property value="#session.errorMsg_login"/><br><!-- 显示错误信息:LoginInterceptor.java返回的错误信息 -->
                <!-- 客户访问权限受限资源时,都会先将请求交给limittedResources.action进行处理,
                该action中引入了自定义拦截器loginInterceptor,该拦截器会判断用户是否是已登录用户,
                若是,则继续执行下面的拦截器或action,否则就将错误信息保存在session范围的Map集合中,key="errorMsg",并且跳转至登录页面login.jsp -->
                <s:property value="#session.errorMsg_null"/><br><!-- 显示错误信息:LoginAction.java返回的错误信息 -->
                <s:property value="#session.errorMsg_passwprd"/><br><!-- 用户名存在但是输入的密码不正确则显示此信息,该错误信息来自于LoginAction -->
                <s:property value="#session.errorMsg_username"/><br><!-- 用户名不存在时显示此信息,该错误信息来自于LoginAction -->
            </font>
            <s:form action="login_execute" method="post" namespace="/">
                <s:textfield name="user.username" label="用户名" title="请填写用户名,注意大小写" cssStyle="160px;height:26px;"/>
                <s:password name="user.password" label="密码" title="请填写密码,注意大小写" cssStyle="160px;height:26px;"></s:password>
                <s:submit value="登陆"></s:submit>
            </s:form>  
    • step6,创建业务控制器类LoginAction.java

          • /*
             * author:lxrm
             * date:2016/05
             * @function execute():用户登录,
             *         login.jsp中会触发该action,useraction.execute.action
             *         LoginAction-validation.xml文件来验证用户输入的数据是否合法(文件名:action名称-validation.xml;存放位置:放在对应action的同级目录下)
             * @function register():用户注册
             *             
             * */
            package lxrm.struts2demo.actions;
            import  lxrm.struts2demo.javabeans.User;
            import javax.servlet.http.HttpServletRequest;
            import javax.servlet.http.HttpSession;
            
            import org.apache.struts2.ServletActionContext;
            
            import com.opensymphony.xwork2.ActionSupport;
            
            public class LoginAction extends ActionSupport {
            
                private User user;
                @Override
                public String execute() throws Exception {
                    /*将username存放成session范围的属性,
                     * 这样就可以通过使用LoginInterceptor拦截器判断session范围内是否有username属性来
                     * 来得出用户是否已经登录的判断结果*/
                    HttpServletRequest request=ServletActionContext.getRequest();
                    HttpSession session=request.getSession();
                    if(user.getUsername()!=null&&!user.getUsername().equals("")){
                        session.setAttribute("username", user.getUsername());
                    }else{
                        session.setAttribute("errorMsg_null", "用户名不能为空");
                    }
                    if(user.getUsername().equals("lxrm")){
                        if(user.getPassword().equals("1")){
                            return SUCCESS;
                        }else{
                            session.setAttribute("errorMsg_password", "密码不正确,注意大小写");
                            return INPUT;
                        }            
                    }else{
                        session.setAttribute("errorMsg_username", "不存在的用户名");
                        return INPUT;
                    }
                }
                /*
                 * 和execute相似的逻辑处理函数,返回注册页面作为视图页面*/
                public String register(){
                    return "regist";
                }
                public void setUser(User user){
                    this.user=user;
                }
                public User getUser(){
                    return this.user;
                }
            }
    • step7,在src目录下新建struts.xml,并且在struts.xml中配置LoginAction

          • <action name="login_*" class="lxrm.struts2demo.actions.LoginAction" method="{1}">
                        <result name="success">/jsp/welcome.jsp</result>
                        <result name="input">/jsp/login.jsp</result>
                        <result name="regist">/jsp/register.jsp</result>
                    </action>
    • step8,创建welcom.jsp  register.jsp页面

    • step9,浏览器访问login.jsp      
    •                     
  • 相关阅读:
    微服务与SOA的区别
    @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
    pika常见问题解答(FAQ)
    大容量类Redis存储--Pika介绍
    Beego开启热升级
    Beego框架的一条神秘日志引发的思考
    Redis的最常被问到知识点总结
    go语言的defer语句
    GO-REDIS的一些高级用法
    go使用go-redis操作redis 连接类型,pipline, 发布订阅
  • 原文地址:https://www.cnblogs.com/lxrm/p/7087279.html
Copyright © 2011-2022 走看看