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中,会难以维护和开发。

  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/chentingk/p/5647911.html
Copyright © 2011-2022 走看看