zoukankan      html  css  js  c++  java
  • 【SSH 基金会】SSH框架--struts进一步的详细解释(两)


    继上篇博客        

    既然我们知道了不使用struts给我们带来这么多弊端,那么以下我们来看看struts是怎样封装的。怎么解决我们出现的问题的?

     

    先来说一下struts的基本流程,帮助大家理解以下的代码:

     

     Struts基本简要流程例如以下:

         1、client浏览器发出HTTP请求。

         2、依据web.xml配置。该请求被FilterDispatcher接收。

         3、依据struts.xml配置。找到须要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。

         4、Action调用业务逻辑组件处理业务逻辑,这一步包括表单验证。

         5、Action运行完成,依据struts.xml中的配置找到相应的返回结果result,并跳转到相应页面。

         6、返回HTTP响应到client浏览器。

     

    演示样例分析(使用struts

     

    配置文件web.xml

    <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>	
    

    add.jsp

    <%@ page language="java" contentType="text/html; charset=GB2312"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    	<head>
    		<title>加入页面</title>
    	</head>
    	<body>
    		<center>
    			<s:form action="grade">
    				<s:textfield name="grade.USERID" label="用户编号" />
    				<s:textfield name="grade.USERNAME" label="用户姓名" />
    				<s:textfield name="grade.CHINESE" label="语文成绩" />
    				<s:textfield name="grade.MATHS" label="数学成绩" />
    				<s:textfield name="grade.ENGLISH" label="英语成绩" />
    				<s:submit value="确定" />
    				<s:reset value="重置" />
    			</s:form>
    		</center>
    	</body>
    </html>
    

    Struts.xml


    <package name="book" extends="struts-default">
    		<action name="grade" class="action.GradeAction">
    			<result name="show">show.jsp</result>			
    		</action>
    		<action name="login" class="action.UserAction">
    			<result name="success">success.jsp</result>
    			<result name="error">error.jsp</result>
    		</action>
    </package>
     
    

    GradeAction.java


    public class GradeAction {
    	private Grade grade;
    	private List<Grade> gradeList;
    	public Grade getGrade() {
    		return grade;
    	}
    	public void setGrade(Grade grade) {
    		this.grade = grade;
    	}
    	public List<Grade> getGradeList() {
    		return gradeList;
    	}
    	public void setGradeList(List<Grade> gradeList) {
    		this.gradeList = gradeList;
    	}
    	public String execute() throws Exception{
    		GradeDao gradeDao=new GradeDao();
    		gradeDao.insertGrade(grade);
    		ArrayList<Grade> gradeList = (ArrayList) gradeDao.listGrade();
    		this.setGradeList(gradeList);
    		return "show";
    	}
    

    单纯的看,这两套代码(结合上篇博客来看),从代码量上来看,都是完毕相同的加入功能,使用struts后,明显代码量降低了很多。并且每一个操作完毕后的跳转页都配置到了配置文件里,这样给我们系统的维护带来了极大的便利。它相当于从界面到action传递的过程中,是以对象的方式传递的,就不须要我们像之前的操作那样一个字段一个字段的去获取。

     

    当然另一点,就是struts是怎样解决servlet过多的问题的?


    Struts.xml


     <package name="testlogin2" namespace="/user" extends="struts-default">
       
       		<action name="login" class="com.action.LoginAction2" method="doFun">
       			<result name="success">/success.jsp</result>
       			<result name="error" type="redirect">/error.jsp</result>
       			
       		</action>
       		<!-- 第三种方式 :一个action处理多个请求 如:user/modifyUser
       		<action name="*User_*" class="com.action.UserManagerAction" method="{1}User">
        		<result name="success">/{2}.jsp</result>
        		<result name="error">/error.jsp</result>
        	</action>-->
       		
       		<action name="*User" class="com.action.UserManagerAction" method="{1}User">
        		<result name="success">/success.jsp</result>
        		<result name="error">/error.jsp</result>
        	</action>
       		
       		
       </package>
    

    public class UserManagerAction extends ActionSupport {
    	
    	private User user;
    	public User getUser() {
    		return user;
    	}
    	public void setUser(User user) {
    		this.user = user;
    	}
    	public String addUser(){
    		System.out.println("---------AddUser()-------");
    		return "success";
    	}
    	public String modifyUser(){
    		System.out.println("---------ModifyUser()-------");
    		return "success";
    	}
    	public String delUser(){
    		System.out.println("---------DelUser()-------");
    		return "success";
    	}
    }
    

    servlet的关系

     

         前面我们说对于Model 2模型来说。Servlet过多,转向频繁。流程。配置等不易集中管理,那么strutsServlet有什么关系?它怎么就能解决Servlet的这些问题呢?

     

         能够说Struts2本质还是一个Servlet。仅仅是对Servlet进一步的封装罢了

       

         对于解决这个问题来说:

         打个例如:做Web项目,好比建房子。

         Servlet好比木材。用一根根的木材搭,也可盖起房子。仅仅是速度慢而已。

         Struts2好比是用木材做好的一个房子大概结构,要建房子时,仅仅需把它拿过来,再往其里面添砖加瓦,修修补补,就能非常快盖好房子,这要比直接使用Servlet要快得多

     

     

    以上仅仅是我对struts的简单理解,用一句话概括,struts就是将某些功能进行提取,然后做了一个封装。能让我们更好的使用(框架)。

    当然对于它的优势还须要我们在以后做项目的过程中慢慢体会!





    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    python爬虫面试总结
    Android 开发之避免被第三方使用代理抓包
    类的惰性属性
    [转载]Python: 你不知道的 super
    转 白话解析:一致性哈希算法 consistent hashing
    转 appium解决每次运行都需要安装Unlock以及AppiumSetting的问题
    233
    windows中Appium-desktop配合夜神模拟器的使用
    CentOS 6.4 添加永久静态路由所有方法汇总(原创)
    牛逼的lsof命令!!!
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4640750.html
Copyright © 2011-2022 走看看