struts2入门

一.环境搭建

1.导包

到要导入的9个包

commons-fileupload-1.2.2

commons-io-2.0.1

commons-lang-2.5

commons-logging-1.1.1

freemarker-2.3.18

javassist-3.11.0GA

ognl-3.0.4

struts2-core-2.3.1.2

xwork-core-2.3.1.2


2.web.xml

在其中添加过滤器,接收任何的网站,执行org.apache....类

<filter>
    <filter-name>struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3.struts.xml

在src下面新建struts.xml,并将<!.....>这其中的代码粘贴进去,在<struts>之间进行配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    
<struts>

</struts>

二.完成第一个struts2的例子

1.新建jsp文件:result.jsp

2.写一个继承ActionSupport的类:HelloWorldAction.java

public class HelloWorldAction extends ActionSupport{


	@Override
	public String execute() throws Exception {
		System.out.println("执行Action");
		
		return SUCCESS;
	}

	
}

3.在struts.xml中添加action行为

<struts>
    
    <package name="default" namespace="/" extends="struts-default">
      
      <action name="helloworld"  class="com.imooc.action.HelloWorldAction">
          <result>/result.jsp</result>

      </action>
    
    </package>
</struts>

指定了action的行为类是HelloWorldAction,然后调用其中默认的方法(execute),最后跳转到根目录下的result.jsp

注意这个action的name属性,默认的情况下调用的网址是:.../项目名/helloworld.action

4.原理

先来看张图


其过程是:客户请求,在web.xml中的过滤器进行过滤,当ActionMapper检测到网址的后缀名是以.action结尾的话,就交个StrusPrepareAndExecuteFilter(和之前web.xml中的filter的class是一样的),然后会通过Manager与struts.xml关联,在通过一些拦截器后执行action,并返回到Template,最后在通过拦截器,回复到客户端


三.struts的基本用法简介(讲接收参数,结果处理)

1.接收参数的三种方法

<1>action属性

<form action="helloworld.action" method="post">
用户名:<input name="username" type="text">
密码:<input name="password" type="text">
<input type="submit" value="提交" >
在和helloworld.action关联的方法中

public class HelloWorldAction extends ActionSupport{

	/*
	 * 第一种获取表单值的方法是使用和表单中相同的属性名,
	 * 一定要记得添加set,get方法,表单会自动通过这些方法将对应的值添加进去
	 */
	private String username;
	private String password;
	

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String execute() throws Exception {
		System.out.println(username);
		
		return SUCCESS;
	}
}

<2>使用DomainModel

传入一个对象,类User按照JavaBean写法,然后是在jsp的表单中属性名前面加上对象名

下面调用的是loginAction()方法,这个需要在struts的action里添加method属性为"loginAction"

public class HelloWorldAction extends ActionSupport{

	/*
	 * 第二种接收参数的方法是使用对象,同样要使用set,get方法
	 * 要实现表单中的属性名和该对象中的属性匹配,需要在表单中添加对象名,来确定往哪个对象中传值
	 */
	private User user;

	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@Override
	public String execute() throws Exception {
		System.out.println("执行Action");
		
		return SUCCESS;
	}

	public String  loginAction(){
		
		
	
		System.out.println(user.getUsername());
		return SUCCESS;
	}
}

<3>实现ModelDriven接口

与第二种方法不同的是不用再jsp页面使用对象名来命名了,直接使用和User匹配的属性,即第一种中使用的

public class HelloWorldAction extends ActionSupport implements ModelDriven<User>{

	/*
	 * 第三种方法是实现ModelDriven接口
	 */
	User user=new User();
	
	@Override
	public String execute() throws Exception {
		System.out.println("执行Action");
		
		return SUCCESS;
	}

	public String  loginAction(){
		System.out.println(user.getUsername());
		return SUCCESS;
	}

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}
}

2.关于input

限制输入的条件

HelloWorldAction类

public class HelloWorldAction extends ActionSupport implements ModelDriven<User>{

	User user=new User();
	@Override
	public String execute() throws Exception {
		System.out.println("执行Action");
		
		return SUCCESS;
	}

	public String  loginAction(){
		System.out.println(user.getUsername());
		return SUCCESS;
	}

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}

	@Override
	public void validate() {
		// TODO Auto-generated method stub
		if(user.getAge()==0){
			//如果年龄为空,就会调用下面这句,返回到struts中的result="input"的jsp页面
			this.addFieldError("age", "年龄不能为空");
			//if语句写在其他函数中要想自动返回还要加return INPUT;
		}
	}
}

上面的if条件是可以写到loginAction中的,只是要多加一条return的语句,因为下面struts.xml中action对应的方法就是loginAction,当然ActionSupport类给我们提供了更新的方法,会自动调用

struts.xml

<struts>
    
    <package name="default" namespace="/" extends="struts-default">
      
      <action name="helloworld" method="loginAction" class="com.imooc.action.HelloWorldAction">
          <result>/result.jsp</result>
          <result name="input">/login.jsp</result>
      </action>
    
    </package>
</struts>

在jsp页面中添加s标签

声明

<%@ taglib prefix="s" uri="/struts-tags" %>
在年龄input的后面添加如下语句

<s:fielderror name="age"></s:fielderror>
然后当login.jsp页面中提交后,如果age等于空,就会显示年龄不能为空



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值