Struts2(0):Struts2框架入门

Model 1和Model 2:

Model 1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收并处理客户端请求,对请求处理后直接作出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。

Model 1模式的实现比较简单,适用于快速开发小规模项目。但从工程化的角度看,它的局限性非常明显:JSP页面同时身兼视图和控制器两种角色,将控制逻辑和表现逻辑混杂在一起,导致代码的重用性非常低,增加了应用的扩展性和维护的难度。

Model 2模式下,Servlet充当前端控制器,负责接收客户端发过来的请求,在Servlet中只包含控制逻辑和简单的前端处理;然后调用后端JavaBean来完成实际的逻辑处理;最后,转发到相应的JSP页面处理显示逻辑。

由于引入了MVC模式,使Model 2具有组件化特点,更适用于大规模应用的开发,但也增加了应用开发的复杂程度。原本需要一个简单的JSP页面就能实现的应用,在Model2中被分解为多个协同工作的部分,需要花更多时间才能真正掌握其设计和实现过程。

Struts2:

Struts2就是一个MVC框架。我们先看例子然后再分析总结:

① 新建一个Web工程,引入Struts2框架的开发包,置于lib目录下。这里只引入了最基本的7个开发包,具体见上图。

② 在web.xml中配置核心控制器。web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<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>
	
</web-app>
核心控制器是一个Filter,具体实现类为: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。这个类可以在struts2-core-2.1.8.1.jar下找到。尽量选择找到此类,复制包名和类名,而不要敲键盘。filter-name的值随意,url-pattern为/*,表示过滤所有请求,即所有请求都会被struts2框架首先拦截下来。

③ 如果需要以post方式提交请求,则要编写包含表单数据的JSP页面。如果仅仅只是以get方式发送请求,则可以不编写JSP页面。本例中为post请求。login.jsp :

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<form action="test/login" method="post">
姓名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>

④ 编写处理用户请求的Action类。Login.java :

public class Login {

	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;
	}
	public String execute(){
		if(getUsername().equals("scott")&& getPassword().equals("tiger")){
			ActionContext.getContext().getSession().put("username",getUsername());
			return "success";
		}
		return "login";
	}
}

这一步也是所有MVC框架中必不可少的,因为这个Action就是MVC中的C,即控制器,该控制器负责调用Model中的方法来处理请求。由于文章只是介绍Struts2框架的用法,所以可能并未调用Model的方法,而是让Action对用户请求进行了简单处理。

根据上面的介绍,我们不难发现,在Struts2框架中,控制器实际上由2个部分共同组成,即拦截所有用户请求,处理请求的通用代码都由核心控制器StrutsPrepareAndExecuteFilter完成,而实际的业务控制(诸如调用Model,返回处理结果等)则由业务控制器XxxAction处理。

⑤ 在src目录下新建一个struts.xml文件,在其中配置Action类。dtd的内容到struts2-core-2.1.8.1.jar下找到struts-default.xml文件,从里面拷贝。struts.xml :

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

<struts>
<package name="demo" extends="struts-default" namespace="/test">
<action name="login" class="action.Login">
<result name="success" type="dispatcher">/ok.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
</action>
</package>
</struts>
⑥ 编写视图资源。 ok.jsp :

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%
Object obj=session.getAttribute("username");
if(username==null){
response.sendRedirect("login.jsp");
}
%>
 login success! welcome ${username}...
</body>
</html>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值