JavaWeb学习——struts1框架篇

Struts1学习讲义

  • 环境准备
  • 整体框架结构
  • struts-config.xml配置文件
  • Formbean
  • Action
  • 注意事项

环境准备

1、相应的jar包,基本的有:javax-servlet-api:3.1.0, struts-core:1.3.10, jstl:1.2等,若需要连接数据库,还要commons-collections包等
2、eclipse新建web项目,不必自动添加struts属性,在web.xml中,注册对应的ActionServlet即可,如下:

<servlet>
    <servlet-name>actionServlet</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>actionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

真正的struts配置文件被连接在了/WEB-INF/struts-config.xml路径下,里面会配置Action, Formbean的具体属性参数,稍后详述;
定义了所有形如.do结尾的url均被struts的ActionServlet截获,由struts来处理


整体框架结构

基本流程是:
url请求(.do结尾的)
—>ServletMapping截获请求,交给ActionServlet处理
—>struts-config.xml根据url指派具体的Action(相当于Controller层)
—>Action的execute()方法执行具体的业务逻辑(Controller–>Model层)
—>返回ActionForward对象,struts-config.xml分发具体转向的jsp页面(Controller–>View层)
具体图示如下:
这里写图片描述
解释一下:
struts-config.xml中配置了FormBean和Action,action内部属性可以配置使用哪一个FormBean,同时配置了自己的url请求匹配规则,就可以把请求提交的表单域自动填充到对应的FormBean对象中
当然直接用formbean为媒介操作数据库不太合理,可以中间在加一层pojo类过度;
HelloAction实际调用方法execute内部处理具体的业务逻辑,最终返回一个ActionForward对象,struts-config.xml可以根据返回对象来决定转向哪一个页面,实现最终的展示View层


struts-config.xml配置文件

各项属性说明,见如下示例代码:

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

<struts-config>

    <description></description>

    <form-beans>            <!-- 配置Formbean -->
        <!-- name表示form-bean标识,type是类的全限定名 -->
        <form-bean name="helloForm" type="formbean.HelloForm" ></form-bean>
    </form-beans>

    <global-exceptions/>    <!-- 配置异常处理页面 -->
    <global-forwards/>      <!-- 配置全局jsp页面 -->

    <action-mappings>       <!-- 配置Action -->
        <action 
            path="/hello"               <!-- path标识映射url路径,匹配hello.do形势,自动加.do -->
            type="action.HelloAction"   <!-- 对应的Action类 -->
            attribute="helloForm"       <!-- FormBean在request中的位置,request.geteAttribute('helloForm') -->
            input="/hello.jsp"          <!-- 输入页,Action中执行mapping.getInputForward()得到该页 -->
            name='helloForm'            <!-- 本Action实用的Formbean,对应上面的FormBean -->
            scope="request" >           <!-- 作用域,包括request, session等 -->
            <forward name="success" path="/index.jsp"/> <!-- forward转向到的jsp页面,name是名称,用于Action中的mappiing.forward("") -->
        </action>   
    </action-mappings>

</struts-config>

struts-config.xml是核心配置文件,扮演MVC中controller的角色,负责分发具体action,接受返回参数并决定调用那个页面


web.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>struts1_compare</display-name>


  <servlet>
    <servlet-name>actionServlet</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>actionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <resource-ref>  
        <!-- struts1.3之后就不在支持在struts-config.xml中配置数据源了,需要在web.xml中配置 ,[JNDI配置数据源](https://www.cnblogs.com/xdp-gacl/p/3951952.html))
-->
    </resource-ref>

</web-app>

web.xml里面配置struts1的核心servlet类:ActionServlet,并配置servlet的url匹配规则,,本质上就是一个servlet
只不过在servlet内部以的形式配置了strtus-config.xml,这样就建立了关联关系
配置具体struts-config.xml 路径是,,必须制定param-name名为config,,Struts才能识别并解析;弱配置多个,则需要以config 为上级目录
如: config -》/WEB-INF/struts-config1.xml 这个配置文件被映射到应用的根路径下,代表总的配置文件 config即代表着应用根路径
config/user1 -》/WEB-INF/struts-config2.xml 这个配置文件被映射到应用的 /user1下,代表子模块配置


Action代码

package action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class HelloAction extends Action{

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        // TODO Auto-generated method stub

        request.setAttribute("aaa", "struts can be succeed!");
        System.out.println(11111111);
        return mapping.findForward("success");

    }
}

Action实现具体业务逻辑,传入参数包括ActionMapping 和 ActionForm类,前者代表了struts-config.xml中配置属性,后者代表了Form对象;
最后返回ActionForward类型,mapping.findForward(“success”),关键字success,对应着struts-config.xml中forward属性,配置了转向哪个页面


FormBean代码

package formbean;

import org.apache.struts.action.ActionForm;

public class HelloForm extends ActionForm{

    private String hello;

    public String getHello() {
        return hello;
    }

    public void setHello(String hello) {
        this.hello = hello;
    }

}

本例中基本没用到formbean,表单填充,操作数据库用的多

View层jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  </head>

  <body>
    <h1>This is my Hello page. </h1><br>

    <h3>
        Success for User's struts1!
    </h3>
    <h6>
        <%= request.getAttribute("aaa") %>
    </h6>

  </body>
</html>


结束

访问 http://localhsot:8080/projectName/hello.do
最终效果为:
这里写图片描述


最后,推荐一个更为详细讲解:struts1深入讲解

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值