最近大家都在找工作,我好迷茫,觉得自己会的东西太少了。所以决定开始学习SSH三大框架。

首先是struts.

struts是基于mvc模式的框架。(struts其实也是servlet封装,提高开发效率!)

Servlet起到控制器作用!主要可以:

----》 获取请求数据封装 【BeanUtils可以优化,(调用方法?)】

----》 调用Service处理业务逻辑

----》 跳转(转发/重定向)              【跳转代码写死】

传统mvc开发:

1. 跳转代码写死,不灵活

2. 每次都去写servlet,web.xml中配置servlet!

(配置目的: 请求, Servlet处理类)

aaarticlea/png;base64,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" alt="" width="560" height="255" />

软件中的框架,是一种半成品; 我们项目开发需要在框架的基础上进行!

因为框架已经实现了一些功能,这样就可以提高开发效率!

下面是我做的struts的一个helloworld.简要介绍开发步骤:

1.引jar包。

一种很方便的引法:工程上右键BuildPath-->Add Libraries-->UserLibrary-->next-->右边的library-->点进去 直接new .加入你需要加入的jar包。这样只需加一次,后边的开发就可以直接引用了,不需要再拷贝。

struts需要引入:大家自己网上下载。

commons-fileupload-1.2.2.jar   【文件上传相关包】

commons-io-2.0.1.jar

struts2-core-2.3.4.1.jar           【struts2核心功能包】

xwork-core-2.3.4.1.jar           【Xwork核心包】

ognl-3.0.5.jar                       【Ognl表达式功能支持表】

commons-lang3-3.1.jar          【struts对java.lang包的扩展】

freemarker-2.3.19.jar            【struts的标签模板库jar文件】

javassist-3.11.0.GA.jar           【struts对字节码的处理相关jar】

在这里说一下tomcat启动时,对于struts的调用顺序,就知道为什么这样配置了。

服务器启动:

1. 加载项目web.xml

2. 创建Struts核心过滤器对象, 执行filter à  init()

struts-default.xml,    核心功能的初始化

struts-plugin.xml,     struts相关插件

struts.xml    用户编写的配置文件

访问:

3. 用户访问Action, 服务器根据访问路径名称,找对应的aciton配置, 创建action对象

4. 执行默认拦截器栈中定义的18个拦截器

5. 执行action的业务处理方法

2.web.xml的过滤器的配置。写法基本固定。 struts2配置 ,struts核心功能的初始化,通过过滤器完成

<?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">
<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>

3.开发action

处理请求的类  (struts中的action类取代之前的servlet)

处理请求,    execute()必须返回String,方法不能有参数

import com.opensymphony.xwork2.ActionSupport;

public class hello extends ActionSupport{//必须继承ActionSupport
@Override
	public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("访问action,,正在 处理 请求");
System.out.println("调用service");
return "success";//返回跳转的标记
} }

4.配置action

在src下建立一个struts.xml.     一个类需要在struts.xml中配置一个action.

 <?xml version="1.0" encoding="UTF-8" ?>

 <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
//必须继承struts-default,核心功能的初始化。下边有解释
<package name="xxxx" extends="struts-default">
//name是访问路径 class是对于哪个action
<action name="hello" class="action.hello" method="execute">
//返回标记是success
<result name="success" type=" ">/success.jsp</result>
</action>
</package>
</struts>

访问http://localhost:8080/工程名/hello;会返回success.jsp的内容。

struts-default.xml, 详解

struts2-core-2.3.4.1.jar/ struts-default.xml

内容:

1. bean节点指定struts在运行的时候创建的对象类型

2.指定struts-default包  【用户写的package(struts.xml)一样要继承此包 】

package  struts-default  包中定义了:

a.  跳转的结果类型

dispatcher    转发,不指定默认为转发

redirect       重定向

redirectAction  重定向到action资源

stream        (文件下载的时候用)

b. 定义了所有的拦截器

定义了32个拦截器!

为了拦截器引用方便,可以通过定义栈的方式引用拦截器,

此时如果引用了栈,栈中的拦截器都会被引用!

defaultStack 默认的栈,其中定义默认要执行的18个拦截器!

c. 默认执行的拦截器栈、默认执行的action

<default-interceptor-ref name="defaultStack"/>

<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />

<interceptor  name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>

<interceptor  name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

过滤器与拦截器

拦截器功能与过滤器功能类似。

区别:

共同点: 都拦截资源!

区别:

过滤器,拦截器所有资源都可以;  (/index.jsp/servlet/img/css/js)

拦截器,只拦截action请求。

拦 截器是struts的概念,只能在struts中用。

过滤器是servlet的概念,可以在struts项目、servlet项目用。

struts理解的更多相关文章

  1. Struts简介、原理及简单实现

    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...

  2. 《转载》struts旅程《2》

    上一篇我们简单了解了struts原理,学习SSH,第一部是傻瓜式学习法,人家怎么做就跟着怎么做就ok.我们以登录为例,Struts配置步骤总结如下(如图2.1): 图2.2 1.          j ...

  3. 谈谈你对 Struts 2 的理解

    谈谈你对Struts的理解. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子 ...

  4. 对spring,struts,hibernate及MVC的理解

    对于spring,hibernate,struts等框架,刚开始的时候总是会很迷茫,不知道他们是用来做什么的. 1.对框架的作用理解 个人认为框架的作用是把代码进行了分类,减少了代码的耦合性. 如果不 ...

  5. 对Java框架spring、hibernate、Struts的粗浅理解

    对 Struts 的理解:1. struts 是一个按 MVC 模式设计的 Web 层框架,其实它就是一个大大的 servlet,这个Servlet 名为 ActionServlet,或是 Actio ...

  6. 深入理解struts的运行机制

    扫码关注公众号,不定期更新干活 在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在此文章基础上进行优化 ...

  7. 对Struts的理解

    1.struts是一个按MVC模式设计的Web层框架,其实他就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类.我们可以在web.xm ...

  8. Java面试题之谈谈你对Struts的理解

    1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类.我们可以在web.x ...

  9. Struts学习之值栈的理解

    转自:http://blog.csdn.net/hanxuemin12345/article/details/38559979 页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心 ...

随机推荐

  1. GDB 和 windbg 命令对照(转载)

    From:http://blog.csdn.net/joeleechj/article/details/10020501 命令                                      ...

  2. 配置springmvc在其他类中(spring容器外)获取注入bean

    学习https://github.com/thinkgem/jeesite 今天在写JedisUtils的时候要注入JedisPool,而这个属性被设置为static,@Resource和@Autow ...

  3. python基础知识理解

    一.概述 看了一天的python基础语法,基本对python语法有了一个大概的了解(其实之前断断续续也看过python),学习网址:Python 基础教程.因为之前我学过C++,因此在学习python ...

  4. 解决AndroidStudio升级版本后恢复初始化设置的问题

    今天把AndroidStudio升级到1.5后发现所有的个性设置全变为初始化了.包括皮肤啊,字体大小.颜色啊,以及快捷键等等.一瞬间就懵了. 升级完后好像有一个弹窗就是提示是否要继续使用之前的配置的, ...

  5. Hibernate框架之双向多对多关系映射

    昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...

  6. ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

    首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般 ...

  7. 算法實例-C#-歸併排序-MergeSort

    # 算法实例 # 排序算法Sort 歸併排序MergeSort 算法說明 歸併的思路是任意兩個元素可以比較大小,那麼任意兩個有序的元素集合也可以通過比較大小的方式歸併成一個有序的元素集合 任何的無序元 ...

  8. Web Api中的get传值和post传值

    GET 方式 get方式传参 我们一般用于获取数据做条件筛选,也就是 “查” 1.无参 var look = function () { $.ajax({ type: "GET", ...

  9. Android Volley框架的使用(5)

    6. 设置超时时间 可以为请求设置超时时间.最大重试次数.重试时间增长因子等.其中new DefaultRetryPolicy()的第一个参数是超时时间,第二个参数是最大重试次数.第三个参数是重试时间 ...

  10. [转]CSS编码规范

    单行形式书写风格的排版约束 1.      每一条规则的大括号 { 前后加空格 2.      多个selector共用一个样式集,则多个selector必须写成多行形式 3.      每一条规则结 ...