您的位置:首页 > 编程语言 > Java开发

struts2框架搭建

2015-09-20 22:42 351 查看
最近在学习struts的使用,这里我也是第一次使用,所以我们在搭建之前先简单的介绍一下struts2


Struts2介绍


Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的 体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts
2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。


框架搭建


我用的是myEclipse搭建的,所以我们首先要创建一个web project,然后我就用一个登陆的小例子来为大家创建框架。 首先我们是一个登陆的框架,所以首先我们需要一个登陆的页面,那么就先创建一个JSP页面,我们命名为login.jsp,里边我们只需要在body里边添加如下代码:

<span style="font-size:14px;"><form action="login">
		username:<input type="text" name="username"> <br>
		password:<input type="text" name="password"> <br>

		<input type="submit" value="submit">
	</form></span>

我们登陆,输入完以后当然是需要把数据传输到后台,那么启动的时候我们当然是要运用这个框架的了,那么我就需要如下的一段代码来告诉Tomcat,启动的时候把这个加载了,而这个类是struts对程序启动准备和执行的一个过滤器,而过滤的对象是所有的类。
<span style="font-size:14px;">  <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></span>
既然用的是struts框架,我们就需要一个struts.xml文件,来配置我们的Action。路径在src目录下
<span style="font-size:14px;"><package name="struts2" extends="struts-default">
	
		<action name="login" class="com.tgb.struts2.LoginAction" method="myExecute">
			<result name="success" >/result.jsp</result>
		</action>

	</package></span>



上边话的意思是在包下,有一个类,他的名称死com.tgb.struts2.LoginAction,别名是login,这个类执行成功的结果,如果是success,那么他就跳转到result.jsp页面。

所以我们再创建一个上边说的类

<span style="font-family:SimSun;font-size:14px;">public class LoginAction {

	
	private String username;
	
	private String password;

	
	private int age;
	public int getAge() {
		return age;
	}

	private Date date;
	public void setAge(int age) {
		this.age = age;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	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;
	}
	
	
	public String execute()
	{
		return "success";
	}
	
}</span>


这个类就是struts.xml配置文件下制定的那个类,从他的编写我们可以看出,他主要是一些get,set方法,和一个execute的方法,而关键就是这个execute,他的返回值,就是咱们的业务逻辑的返回值,如果返回了一个success,那么就会按照struts.xml配置的一样跳转到result.jsp。

那我们发现如果从前台传到后台是一些字符串,我们怎么把他们转化车我们要的用户实体呢,这就需要一个转化器,这个转化器可以是java自带的一个转化器,也可以是struts给的转化器,下边我们都实践一下。

第一种:自带的转化器


<span style="font-family:SimSun;font-size:14px;"><span style="font-size:18px;">public class UserConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		
		
		if(User.class == toType)    //从页面向后台对象转换
		{
			String[] str = (String[])value;
			
			String firstValue = str[0];
			
			StringTokenizer st = new StringTokenizer(firstValue,";");
		
			//获取用户名和密码
			String username = st.nextToken();
			String password = st.nextToken();
			
			User user = new User();
			user.setUsername(username);
			user.setPassword(password);
			
			return user;
			
		}
		
		else if(String.class == toType)   //从后台对象向页面转换
		{
			
			User user = (User)value;
			
			String username = user.getUsername();
			String password = user.getPassword();
			
			String userInfo = "username: " + username + ",password:  " + password;
			return userInfo;
		}
		
		return null;
	}
	
}
</span></span>


第二种:利用struts的转化器
<span style="font-family:SimSun;font-size:14px;">public class UserConverter2 extends StrutsTypeConverter {
	
		@Override
		public Object convertFromString(Map context, String[] values, Class toClass) {
			User user = new User();
			
			String value = values[0];
			
			StringTokenizer st  = new StringTokenizer(value,";");
			
			user.setUsername(st.nextToken());
			user.setPassword(st.nextToken());
			
			return user;
		}
	
		@Override
		public String convertToString(Map context, Object o) {
			User user = (User)o;
			String username = user.getUsername();
			String password = user.getPassword();
			
			String userInfo = "username: " +  username + ", password" + password;
			
			return userInfo;
		}
	
	}
</span>


当然这两种都这样写还不行,还需要一个配置,来告诉我的程序,我的这个转换器要转换成Action中的哪个实体,例如我上边的Action中申明private User user,那么我我就需要在一个名称为UserActionConversion.properties的文件内加上这句话,那么他就回给我转化,如:user=com.tgb.bean.converter.UserConverter

既然我们是面向对象开发,免不了需要实体

<span style="font-family:SimSun;font-size:14px;">public class User {

	
	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;
	}
}
</span>


当然我这个例子没有链接数据库,如果那样的话,就需要加一个业务逻辑成层和数据访问层了。

其实我们为什么要把一个简单的例子用这么相对复杂的一个框架呢,就好像以前我也不懂我做.net的时候为什么要用MVC,一个三层难道还不够吗,可是在我们不断的添加代码的时候会发现,我们的三层也不太够用了,所以我们才有了这个Struts2的框架,她其实就是一个MVC的框架,view就是jsp,用来显示数据,讲数组整合成html页面,而Action,就是Controll,他对整个程序是一个承上启下的作用,而Moudle是java里的bean,就是实体模型,用来实现我们的面向对象的思想。

对于MVC我不说太多了,我又一片博客说的就是MVC,大家可以阅读一下。/article/2124350.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: