JavaEE高级框架学习笔记(二)Struts框架的基本介绍及使用方法

0.前言

其实我之前学过Struts2的基本使用使用方法,大致上就是导入相应的Struts包,建立映射关系,然后请求跳转。今天学习的Struts更加的细致,虽然和Struts2比起来稍微麻烦了一点,但是可以更加清楚的看到整个流程是怎么运作的,Struts作为框架在底层为开发者做了哪些工作。
本文用的是Struts1.2的Jar包,这里去下载
https://pan.baidu.com/s/1p03nyXDxf7PMQyyLPERxZA

1.为什么要使用Struts框架

MVC的设计思想非常的好,但是不同的开发者基于MVC设计模式写出的代码都不同,这在团队协作和分工、后期修改等方面都造成了许多不便。Struts框架有其一定的规范性——建立映射关系,表单的发送与结果打包,结果跳转。这种规范化的操作对上述提到的问题有着很好的效果。
需要导入七个包(如果只有六个的话,struts-config.xml需要自己建立)
在这里插入图片描述

同时需要在tomcat的lib文件夹下复制这几个jar包在这里插入图片描述

2.Struts基本思路

JSP表单内容首先提交给ActionServlet,ActionServlet把信息打包在ActionForm中,ActionForm里面,会调用JavaBean存储好结果,最后跳转到结果页面。

要编写的内容有:JSP、ActionForm、Action、配置文件、JavaBean
还看不太懂这个图,但是以后还是会经常用到的
还看不太懂这个图,但是以后还是会经常用到的

题目:开发一个界面,输入学生的模糊信息,点击确定后,可以输出学生的个人详细信息。

初始化配置文件struts-config.xml和web.xml

struts-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config  PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
	<data-sources />
	<form-beans />
	<global-exception />
	<global-forwards />
	<acntion-mappings />
	<message-resources parameter="JavaWeb2.ApplicationResources" />
</struts-config>

这里的JavaWeb2.ApplicationResources,JavaWeb2是我web项目的名称。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
	<servlet-name>action</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>
	<init-param>
		<param-name>debug</param-name>
		<param-value>3</param-value>
	</init-param>
	<init-param>
		<param-name>detail</param-name>
		<param-value>3</param-value>
	</init-param>
	<load-on-startup>0</load-on-startup>
</servlet>

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

</web-app>

queryForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息查询表单</title>
</head>
<body>
查询表单<br>
	<form action="???" method="get">
	请输入学生姓名:
	<input name="sname">
	<input type="submit" value="模糊查询">
	</form>
</body>
</html>

按照上述Struts开发的流程,这里表单提交的对象应该是ActionServlet,ActionServlet在把信息打包到ActionForm中,所以接下来需要编写ActionForm

QueryForm.java:

package Action;
//ActionForm容纳表单提交的值
//规范:
//1.必须继承org.apache.struts.action.ActionForm
//2.必须编写和表单同名的属性(例如sname)
//3.在配置文件中注册
import org.apache.struts.action.ActionForm;

public class QueryForm extends ActionForm{
	private String sname;

	/**
	 * @return the sname
	 */
	public String getSname() {
		return sname;
	}

	/**
	 * @param sname the sname to set
	 */
	public void setSname(String sname) {
		this.sname = sname;
	}
}

编写完了去配置,在struts-config.xml中:

	<form-beans>
	<!-- name:名称(随便) type:类路径 -->
		<form-bean name="queryForm" type="Action.QueryForm"></form-bean>
	</form-beans>

这里的Action是我的包名,QueryForm是我的类名(DAO和Bean较为简单,这里不贴了)

QueryAction.java:

package Action;

import java.util.ArrayList;

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;

import Dao.StudentDao;

//Action负责接受ActionForm的数据,处理
//1.必须继承org.apache.struts.action.Action
//2.重写execute方法执行业务逻辑(便于自动执行业务逻辑)
public class QueryAction extends Action{

	@Override
	//ActionForward:封装了跳转目标的路径
	//mapping:访问配置文件
	//form:传过来的ActionForm对象
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		QueryForm queryForm=(QueryForm)form;
		String sname=queryForm.getSname();
		sname=new String(sname.getBytes("ISO8859-1"), "utf-8");
		StudentDao studenDao=new StudentDao();
		ArrayList student=studenDao.getInfo(sname);
		request.setAttribute("student", student);
		
		ActionForward af=new ActionForward("/queryResult.jsp");
		return af;
	}
	
}

值得一提的是,这里重写的execute是ActionForward类型的,默认使用forward,所以不用担心request的值会丢失。
编写完了去配置,在struts-config.xml中:

<acntion-mappings>
	<!-- type:类路径,name:相应的ActionForm名称,path:客户端提交到服务器时指定的路径 -->
		<action name="queryForm" path="/query" type="Action.QueryAction">
		
		</action>
	</acntion-mappings>

这里决定了jsp提交表单的路径,所以可以在前面的queryForm.jsp的action里面补上:

<form action="/Action/query.do" method="get">

这里的Action是我QueryAction所在的包名

queryResult.jsp:

<%@page import="java.util.ArrayList"%>
<%@page import="Bean.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<body>
显示结果
<%
	ArrayList student=(ArrayList)request.getAttribute("student");
%>
	<table bgcolor="#ff80ff">
	<tr>
	<td>姓名</td>
	<td>性别</td>
	<td>年龄</td>
	</tr>
	<%
		for(int i=0;i<student.size();i++){
			Student student2=(Student)student.get(i);
	%>
	<tr>
	<td><%=student2.getName()%></td>
	<td><%=student2.getSex()%></td>
	<td><%=student2.getAge()%></td>
	<td></td>
				
	</tr>
	<%
		}
	%>
	</table>
</body>
</html>

3. 流程处理

在jsp中,表单会根据/Action/query.do,先提交到ActionServlet,ActionServlet是Struts的核心组件,可以读取strust-config.xml配置文件,ActionServlet根据action里面的“/query.do”,先去掉“.do",,然后在配置文件里面找到:

<action name="queryForm" path="/query" type="Action.QueryAction">

path里面的/query,找到了path之后去找name,这里name和上面的

<form-bean name="queryForm" type="Action.QueryForm"></form-bean>

name是一样的,所以来到了这里,找到type,把内容打包到QueryForm里面,又根据path找到QueryAction,把打包的内容交给QueryAction。
这就是完整的流程。

struts-config.xml:

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

<struts-config>
  <data-sources />
  <!-- 在此注册ActionForm -->
  <form-beans>
  	<!-- name:名称  type:类路径 -->	
  	<form-bean name="queryForm" type="Action.QueryForm"></form-bean>
  </form-beans>
  
  <global-exceptions />
  
  <!-- 设置URL逻辑名称(全局,任意的Action都可以识别到)-->
  <global-forwards>
  	<forward name="RESULT" path="/queryResult.jsp"></forward>
  </global-forwards>
  
  <!-- 注册Action -->
  <action-mappings>
  	<!-- type:类路径; name:相应的ActionForm的名称; path:客户端提交到服务器端时指定的路径 -->
  	<action name="queryForm" path="/query" type="Action.QueryAction">
  	 	<!-- 设置URL逻辑名称(局部,只有这个Action可以识别到)-->
  		<forward name="RESULT" path="/queryResult.jsp"></forward>
  	</action>
  </action-mappings>
  <message-resources parameter="Action.ApplicationResources" />
</struts-config>


web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>action</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>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

</web-app>


在这里插入图片描述

4.小结

struts的规范化操作,让打包成为一个固定的环节,在日后需要修改打包的内容时,修改会十分方便(比如输入学生的学号进行查询),将开发流程模块化,利于分工合作,代码出现问题时修改起来也快。而且它通过配置文件进行联系,耦合度非常的低,代码和代码之间几乎没什么联系,全靠xml文件。Struts框架还帮助开发者自动完成了许多工作,比如打包,业务逻辑,结果跳转等等,虽然他的年龄很大了,而我还是个小孩子,但是Struts是基于MVC的开发框架的优秀产品,对于Java高级框架的入门和理解是一个很好的实例。在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值