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