java web从零单排第六期《struts2》

来源:互联网 发布:互换期权 知乎 编辑:程序博客网 时间:2024/05/16 09:29

struts2概述:

1.给予MVC模式的java EE 技术WEB开发框架。可以对使用javaEE技术的web项目开发进行代码的分层,优点是利于维护。

2.struts2来源于webwork框架,是在webwork框架基础上再与struts1的优点进行整合而设计出的新的MVC分层框架。

3.struts2的优点主要体现在解耦上,其他的附属技术也比struts1有所加强,使用上更加快捷方便,如取消了struts1中的ActionForm及简化了配置文件的代码。

4.在网站http://struts.apache.org/可以找到其全部相关资料,包括源代码,开发帮助文档,javaAPI的使用帮助等。

5.如果以前没有使用过struts1框架,请查阅与MVC模式相关的资料,这样有易于以后的学习,至少需要知道MVC模式中的作用。

 

本次从零单排系列中,相关理论性的知识会很少,主要以代码为主。

下面把上一节的servlet用struts2框架来完成。

1.在eclipse中新建一个web项目struts,单击finish按钮完成创建:

2.添加struts2框架支持,首先要下载struts的jar包,将如图所示的jar文件复制到lib目录中:

这几个jar文件可以在http://struts.apache.org下载,官网提供集成版下载,包括jar及源代码和帮助文档。

3.新建三个jsp页面,分别是登陆页面,成功页面,失败页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>    <body>  <form action="login.action" method="post" name="login">   <p>     用户:     <input type="text" name="username" id="textfield1"><br>     <br>     密码:     <input type="password" name="password"  id="password1"> <br>     <br>     <input type="submit" name="button" value="提交">   </p>    </form>    </body></html>

form标签中的action属性值为login.action,因为struts2的访问后缀是action,而login则是他的请求路径。

新建登陆成功页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE body PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>  <body>     success!  </body></html>


新建登陆失败页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE body PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>  <body>     wrong!  </body></html>

4.新建业务控制组件

struts2的业务组件非常简洁美观。新建一个package包命名为controller,然后在改包新建一个Login类,其功能是MVC中的控制层。

package controller;public class Login {private String username;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;}private String password;public String execute(){if(username.equals("hello")&&password.equals("struts2")){return "success";}else{return "false";}}}

上述代码新建了两个属性username和password,在Myeclipse中生成这两个属性的set和get方法:

source->Generate setters and getters->select all->finish则会自动生成。

还要加入一个execute方法,但这个方法的声明是有严格规定的,必须是以一个public开头,该方法的返回类型是String类型,方法名称是execute(),该约定就像是public static void main(String args[])一样固定。

 execute()方法返回值是一个指向物理文件地址的逻辑名称,在配置文件中进行配置,相当于struts1中的ActionForward类。

在execute中队username和password的只进行判断,这里需要的注意的是,class Login类的两个属性username和password实际上是jsp页面中的表单名称(name)相对应。

至此已经创建完了jsp页面和控制层文件,而且已经在控制层类Login中实现了一个简易的验证登陆功能,下一步就是通过配置文件将jsp页面与Login类和其它组件关联起来。

5.在xml文件中加入过滤器:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name></display-name>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <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>

添加过滤器的目的是拦截所有请求。

6.新建中心配置文件

在src中创建struts.xml文件。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtd/struts-2.0.dtd"><struts>   <package name="Maybe" extends="struts-default">        <action name="login" class="controller.Login">       <result name="success">/true.jsp</result>       <result name="false">/false.jsp</result>   </action>   </package></struts>

标记package和Java中的package相类似,随便起一个名字都可以。extends属性的功能是对原有struts2的功能进行继承,使得注册的action自带一些功能,所以在系统中包含一个自带的struts-default.xml文件:


标记action是本例的主要部分,属性值name是访问action的URL,就像servlet的mapping一样,是映射地址,通过这个名称就可以访问到action。属性class是这个action在项目中的具体路径,要带上包名和类名。子标记result是执行完action到达的jsp页面。

7.部署项目

运行程序:

输入登录数据:

 



点击提交按钮:


8.总结:

回顾一下执行流程:

(1)进入login.jsp页面

(2)输入明户名hello 密码struts2

(3)注册文件webxml中的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter进行URL的捕捉,将访问路径在struts.xml中进行查找,找到一个名为login.action的路径。此时对username和password的值进行自动填充,为了更加清晰的看到自动填充,我们在username和password的set方法中添加system.out.print()来看看控制台是否会有反应:

运行,填写用户名和密码,提交之后控制台如下;

这就证明了set方法的自动调用。

然后执行execute()方法,之后返回一个字符串,这个字符串就是struts.xml配置文件的result name,通过这个逻辑名称就可以找到真实的物理jsp页面了。

StrutsPrepareAndExecuteFilter起到了中心控制类的作用,与servletAPI进行解耦。

细心的同学可以和servlet的的代码进行对比,看看是不是简单了许多?恩,这就是struts2框架带给我们的方便,今天只是入门,今后的学习会更加有趣!

 

原创粉丝点击