Struts2入门-十分简单的登陆

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


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

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

Struts2入门-十分简单的登陆

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

Struts2入门-十分简单的登陆

解压完了之后是这样的:

Struts2入门-十分简单的登陆

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

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

Struts2入门-十分简单的登陆

放在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入门-十分简单的登陆

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

上一篇:【转】IOS --- OC与Swift混编


下一篇:Java多线程高并发学习笔记(一)——Thread&Runnable