在javaweb开发过程中,如果只使用servlet,jdbc,jsp进行开发,也可以遵从MVC的模式,这时候,servlet相当于control层,属于负责处理业务逻辑的控制器,同时也需要对获取和返回数据,链接的跳转和转发进行封装。那么就显得比较臃肿了。(类似iOS开发中的MVC,如果viewController负担了数据处理,业务处理和页面跳转逻辑,会变得臃肿不堪,所以后面MVVM,VIP等模式进一步细化了模块划分)。

struts框架,是apache公司开发的一款基于servlet封装而成的框架,遵从MVC的设计模式,能进一步提高开发效率。

如果脱离struts框架,使用Servlet做项目开发,在项目启动以后,每个模块中的各个接口,都会被可能写成一个Servlet,每个Servlet在服务器启动一个都会在第一访问(可以配置)建时候被创建一个servlet对象。Struts框架,可以通过过滤器,把Servlet降低为一个,通过区分不同的action,来区分不同的业务功能接口,某种程度上优化了Servlet的实现。

structs2框架的使用:

1,导入struts2的jar包:

  struts2-core-xxx.jar 核心功能包

  xwork-core-xxx.jar  xword核心包

  commons-fileupload-xxx.jar  文件上传功能包

  commons-io-xxx.jar   io读写支持文件上传功能

  ognl-xxx.jar   ognl表达式支持包

  commons-langxxx.jar lang的扩展

  freemarker-xxx.jar 标签模版庫

  javassist-xxx.jar  字节码处理

  其他按需求导入

2,配置web.xml

  主要是引入过滤器,StrutsPrepareAndExecuteFilter,核心过滤器

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

3,开发Action

  action是动作类,通常继承ActionSupport

  action进行业务处理,执行具体的请求。

    必须返回字符串类型String

    方法无参数。

  

package actions;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L; public String login() throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter(); out.write("success");
out.close();
return null;
}
}

  如果返回具体的字符串,客户端会展示struts.xml中配置的result返回页面,返回null,然后进行response write方法,可以单纯返回字符串,相当于api接口

4,配置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/dtds/struts-2.0.dtd">
<struts>
<package name="actions" extends="struts-default">
<action name="login" class="actions.LoginAction" method="login">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>

  name: 访问的接口uri

  class:具体执行的Action类,带完整包名

  method:Action处理的具体函数名

(21) java web的struts2框架的使用的更多相关文章

  1. (21) java web的struts2框架的使用-Action实现的三种方式

    上一篇介绍了struts使用的四个步骤. 其中在开发action的时候,可以有三种实现方式: 1,写一个类,继承与ActionSupport 2,写一个类,实现Action接口 3,写一个类,实现业务 ...

  2. (24) java web的struts2框架的使用-action参数自动封装与类型转换

    structs可以对参数进行自动封装,做法也很简单. 一,action参数自动封装: 1,可以直接在action类中,声明public的属性,接受参数. 2,属性也是是private,如果是priva ...

  3. (22) java web的struts2框架的使用-struts配置文件

    1,配置文件的引用 struts中配置文件可以有多个,每个模块的包里面都可以单独设立一个struts配置文件. 主的配置文件,放在“src”文件夹下,可以引入其他配置文件,引入方式: <!-- ...

  4. (27) java web的struts2框架的使用-基于表单的多文件上传

    和单个文件上传配置都是一样的,只是在action中接受参数时候,接受的是数组,不再是单个的文件. 一,action的实现: public class MutableFilesUpload extend ...

  5. (25) java web的struts2框架的使用-基于表单的文件上传

    一,首先创建一个表单页面 <body> <form action="uploads" method="post" enctype=" ...

  6. (23) java web的struts2框架的使用-struts动态调用和通配符

    一,动态查找 1,配置允许动态调用 <!-- 允许动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocat ...

  7. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  8. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

  9. 【jframe】Java Web应用程序框架 - 第01篇:Get Started

    jframe是什么? jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化. ...

随机推荐

  1. 分享下自己的EmpireofCode进攻策略 https://empireofcode.com/ https://empireofcode.com/game/#

    # 没什么用,该游戏的模块调用不友好,取数据难import queue from battle import commander # import math unit_client = command ...

  2. 剑指Offer(书):二叉树的下一个节点

    题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析:若一个节点有右子树,那么他的下一个节点就是他右子树中 ...

  3. SQLServer__问题记录

    “备份集中的数据库备份与现有的xx数据库不同”  参考链接: http://www.cnblogs.com/huangfr/archive/2012/08/09/2629687.html RESTOR ...

  4. java中String数组和List的互相转化

    1.List转String数组 方法一: //先准备一个List List<String> testList=new ArrayList<>(); testList.add(& ...

  5. python003 Python3 基本数据类型

    Python3 基本数据类型Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建.在 Python 中,变量就是变量,它没有类型,我们所说的"类型&qu ...

  6. Leetcode 312.戳气球

    戳气球 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * n ...

  7. 七牛云成功通过 CMMI3 认证

    10 月 31 日,在上海七牛信息技术有限公司青岛会议室举行的 CMMI3 级认证结果发布会上,主任评估师王庆付老师和评估组向公司高层及参与评审的 EPG 成员及项目组成员郑重宣布:经过严格的现场审核 ...

  8. 路由选择(codevs 1062)

    题目描述 Description 在网络通信中,经常需要求最短路径.但完全用最短路径传输有这样一个问题:如果最终在两个终端节点之间给出的最短路径只有一条.则在该路径中的任一个节点或链路出现故障时,信号 ...

  9. BZOJ1573: [Usaco2009 Open]牛绣花cowemb

    求半径d<=50000的圆(不含边界)内n<=50000条直线有多少交点,给直线的解析式. 一开始就想,如果能求出直线交点与原点距离<d的条件,那么从中不重复地筛选即可.然而两个kx ...

  10. vagrant的学习 之 Laravel

    vagrant的学习 之 Laravel 本文根据慕课网的视频教程练习,感谢慕课网! 慕课视频学习地址:https://www.imooc.com/video/14218. 慕课的参考文档地址:htt ...