struts2第一个项目搭建

Struts框架

Struts是一个基于J2EE平台的MVC框架,最早是作为Apache Jakarta项目的一部分问世的,其主要是采用Servlet和JSP技术来实现。
Struts框架发展至今经历了struts1→struts2的版本变更,Struts2 不是全新框架,而是在另一个非常流行的框架:WebWork基础上发展起来的,吸收了 Struts1 和 WebWork 两者的优势,在各种功能和性能方面都有很好的保证。
在 Struts2 中,常用的的组件有:

  • FilterDispatcher过滤器:用来分辨是否为Struts2处理的用户请求
  • JSP:页面展示
  • Action:行为处理
  • JavaBean:业务逻辑
  • 配置文件:其他配置信息
创建Struts项目

要编写基于Struts框架的应用,需要导入一些支持的包,也就是Struts开发包。可以到网上下载http://struts.apache.org/

  1. 加载jar包,将如下的几个包拷贝到项目中 WEB-INF 中的 lib 目录下
    struts2第一个项目搭建_第1张图片
  2. 配置Web.xml文件,启动struts的“coreFilter”,让服务器收到用户请求后都转交给struts2执行
    创建struts项目时,在创建窗口给项目取名之后点击next,在最后窗口里勾选Generate web.xml deployment descriptor选项,会自动在项目WEB-INF目录下添加web.xml文件,在文件中添加代码:
<filter>
  <filter-name>struts2filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
filter>
<filter-mapping>
  <filter-name>struts2filter-name>
  <url-pattern>/*url-pattern>
filter-mapping>

配置过滤器是struts2项目运行的基本条件,当tomcat服务器运行时,首先加载web.xml文件,然后加载其中定义的过滤器,StrutsPrepareAndExecuteFilter过滤器会过滤掉其他action请求并根据struts配置文件捕捉对应的action请求进行处理。
3. 创建表单,表单formaction字段根据后面struts.xml文件的actionname属性填写

<form action="LoginAction" method="post">
	<input type="text" name="account" placeholder="用户名"/><br/>
	<input type="text" name="passwd" placeholder="密码"/><br/>
	<input type="submit" value="登录">
form>
  1. 创建action类
    注意:
  • 表单中有的字段,都需要有同名的成员变量与之对应
  • 成员变量的类型是java的数据类型
public class indexAction extends ActionSupport{
	private String account;
	private String passwd;
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public String execute() {
		return "SUCCESS";
	}
}

Struts2 默认情况下可以将表单中输入的文本数据转换为相应的基本数据类型。这个功能的实现,主要是由于 Struts2 内置了类型转换器。
Action负责业务逻辑,其中的execute()方法用来处理业务逻辑。
Action 接收数据后,由框架自动调用它的execute方法,该方法的运行,在底层通过反射机制进行。
execute的格式为:public String execute(){}

  • 该方法不需要有任何的参数——对容器的分离
  • 该函数返回的字符串为目标页面的虚拟名称,由result标签进行匹配
  1. 建立struts.xml文件,关联表单和action类
    在src目录下建立struts.xml文件,名字不能改变,文件中首先声明这是一个struts的配置文件,配置信息写在根标签中。


<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="LoginAction" class="com.action.indexAction">
			<result name="SUCCESS">/welcome.jspresult>
		action>
	package>
  1. 运行程序,搭建完成。
    下面是一些配置项含义:
  • package配置:与项目中的package无关
    • name属性为package包的名字,区分不同package,必填;
    • namespace属性定义action的名字空间,可选;
    • extends属性指定继承其他包,可以继承其它包中的Action定义、拦截器定义等,一般都继承“struts-default”,可选;
    • abstract属性定义为抽象,等待继承,可选。
  • 每个action负责处理一个请求,默认一个package,同一package(命名空间)中的action不能同名
    • actionname属性为action请求的路径名,为form表单的action值,必填;
    • class属性为Action类的完整路径名(项目中),必填;
    • method属性为访问Action类中的具体方法,可选。
  • Action类处理完后会返回result,系统根据result配置信息进行页面跳转
    • name属性对应Action类method方法返回值,返回值随意,要与method方法返回值相同,但是一般使用特定的字符串:
      • SUCCESS:Action正确执行,返回相应视图,为name默认值
      • NONE:Action正确执行,但不返回视图
      • ERROR:Action错误执行,返回相应错误处理视图
      • INPUT:需要从前端获取参数,INPUT就是代表这个参数输入的界面。一般在应用中,需要对数据进行验证,若不通过,则会自动返回到INPUT视图
      • LOGIN:因用户没有登录,Action没有正确执行,则会自动返回到LOGIN视图
    <package name="default" namespace="/" extends="struts-default">
    	<action name="LoginAction" class="com.action.indexAction">
    		<result name="SUCCESS">/welcome.jspresult>
    		<result name="NONE">/index.jspresult>
    		<result name="ERROR">/error.jspresult>
    		<result name="INPUT">/index.jspresult>
    		<result name="LOGIN">/index.jspresult>
    	action>
    package>
    
    • type(类型)
      • dispatcher(默认):使用JSP来显示结果,地址栏不会改变,浏览器不知道转发的发生
      <result name="SUCCESS" type="dispatcher">/welcome.jspresult>
      
      • chain:将action和另一个action链接起来形成一个action链,被跳转的页面仍能读取上个页面的值
      <action name="LoginAction" class="com.action.indexAction">
      	<result name="ERROR" type="chain">chainActionresult>
      action>
      <action name="chainAction" class="com.action.chainAction">
      	<result name="SUCCESS">/index.jspresult>
      action>
      
      • redirectAction:重定向到一个已定义好的action,数据无法传递过去
      • redirect:重定向到一个已配置好的URL(本地网页、action、外站链接),地址栏会发生改变,浏览器知道转发的发生
      <action name="LoginAction" class="com.action.indexAction">
      	<result name="INPUT" type="redirect">http://www.baidu.comresult>
      	
      	
      action>
      
      • plainText:将网页源代码作为普通文本内容返回到网页,必须指定location作为目标页面,须指定charSet为utf-8,否则会出现乱码
      <action name="LoginAction" class="com.action.indexAction">
      	<result name="SUCCESS" type="plainText">
      		<param name="location">/index.jspparam>
      		<param name="charSet">utf-8param>
      	result>
      action>
      
      • stream:直接向响应中发送原始数据,一般在用户下载时使用

你可能感兴趣的:(struts2学习)