zoukankan      html  css  js  c++  java
  • Struts2入门-十分简单的登陆

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。


    开始编写Struts的项目的时候,准备:tomcat服务器,eclipse,Struts2开源包

    下载地址:http://struts.apache.org/

    在页面中点击Download,选择需要的包,我选得时Full Distribution:下的

    解压完了之后是这样的:

    里面的lib文件夹包含了开发struts所用的包,apps是一些简单项目,docs应该是文档,src大概是源文件吧。主要用得就是lib和apps。

    在eclipse中导入开发所需的包,将apps/WEB-INF/lib里面的所有包导入。

    放在web项目的WEB-INF/lib文件夹

    编写初级项目需要配置web.xml,struts.xml

    格式都是固定的,保存一份以后要写复制就好了

    web.xml 加入如下代码,配置struts的核心过滤器

      <!-- 配置Struts2 核心 Filter -->
      <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>

    struts.xml内配置Action

    <!--  Action指定命名空间 -->
           <package name="struts2" extends="struts-default">
               <!-- login的Action,实现类为。。。 -->
               <action name="login" class="StrutsFund.LoginAction">
                   <result name="success">/login_success.jsp</result>
                   <result name="error">/login_failure.jsp</result>
                   <result name="input">/login.jsp</result>
               </action>
            </package>    

    解析:package照抄。

       action的name就是映射到struts的action的名称,也就是在这个项目里这个action就叫这个名了。class是你写的java类,继承ActionSupport实现Action具体事务的类。

       ActionSupport的execute()方法会返回一些字符串,根据字符串来决定跳转的页面。例如上面代码,返回success就跳转到login_success.jsp页面。

    LoginAction.java

    package StrutsFund;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport
    {
     
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private String username ; 
        private String password;
        
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getUsername() {
            return username;
        }
         
        public void setUsername(String username) {
            this.username = username;
        } 
        @Override
        public String execute() throws Exception {
            
             //方法一:在Action中使用ActionContext得到parameterMap获取参数:    
            ActionContext context=ActionContext.getContext();
            Map paramMap=(Map) context.getParameters();
            String[] s=(String[])paramMap.get("username");
            
            //方法二:在Action中取得HttpServletRequest对象,使用request.getParameter获取参数    
            HttpServletRequest request = (HttpServletRequest)context.get(ServletActionContext.HTTP_REQUEST);
            String httpString=request.getParameter("username");
            for(String str:s)
                System.out.println("str="+str);
            System.out.println("httpString"+httpString);
            //方法三:运用本类字段
            System.out.println("username="+username);
            
            if(httpString.equals(""))
                return ERROR;
            else{
                
                context.getSession().put("username", username);
                
                return SUCCESS;
            }
                
       
    
        } 
        public void validate(){
            if(getUsername()==null || getUsername().trim().equals(""))
                this.addActionError("必须输入用户名");
            if(getPassword()==null || getUsername().trim().equals(""))
                this.addActionMessage("必须输入密码");
            
        }
    }

    代码解释:execute()方法是重写的,框架会调用,只要写好javabean就好。里面写了三种和servlet通信的方法,可以获得jsp页面用户传来的参数。

           validate()这个方法是验证方法,在执行execute()方法之前先验证输入。

    写完java了,要编写jsp页面。

    struts2自己带有标签库s。

    必须在运用之前引入标签库

    <%@taglib prefix="s" uri="/struts-tags"%>

     

    login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@taglib prefix="s" uri="/struts-tags"%>
    <html> 
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登陆</title>
    </head>
    <body>
    <center>
        <s:actionerror />
        <s:form action="login">
        
        <s:textfield name="username" label="用户名"></s:textfield>
        <s:password name="password" label="密码"> </s:password>
        
        <s:submit value="提交"/>
        <s:reset value="重置"/>
        </s:form>
    </center>    
    </body>
    </html>

    login_success.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>This is a success page</title>
    </head>
    <body>
        <% String s=(String)session.getAttribute("username");%>
        <h1>SUCCESS</h1>
        <h2>用户名:<%= s%></h2>
    </body>
    </html>

    login_failure.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>This is a failure page</title>
    </head>
    <body>
        <h1>FAILURE</h1>
    </body>
    </html>

    struts2的执行流程在于请求转发,主要由核心过滤器来负责的。

    通过操作页面跳转,参数传递等功能,struts2会很容易做成一个进销存网站系统,但是大量业务代码写在jsp中,会难以维护和开发。

  • 相关阅读:
    苹果向Intel迁移的过程
    苹果向Intel迁移的过程
    UNIX发展简史
    UNIX发展简史
    不折腾的Windows+MAC双平台ADT-Bundle版本总结
    不折腾的Windows+MAC双平台ADT-Bundle版本总结
    MDICT的100G的辞典资源
    MDICT的100G的辞典资源
    android开发工具中的版本不一致问题的剖析
    android开发工具中的版本不一致问题的剖析
  • 原文地址:https://www.cnblogs.com/chentingk/p/5647911.html
Copyright © 2011-2022 走看看