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

原文地址:https://www.cnblogs.com/chentingk/p/5647911.html