配置Struts2后如何使用servlet五篇范文

时间:2019-05-12 02:51:42下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《配置Struts2后如何使用servlet》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《配置Struts2后如何使用servlet》。

第一篇:配置Struts2后如何使用servlet

配置Struts2后如何使用servlet 1.问题的提出

如果web.xml中struts2和servlet的配置如下:

struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*

ImageServlet com.servlets.ImageServlet ImageServlet /myImageServlet/* 当我们在页面在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常响应的(报错信息为:HTTP Status 404target.lastIndexOf(“/”)): target

.substring(target.lastIndexOf(“/”)+ 1);

if(this.includes.contains(target)){

RequestDispatcher rdsp = request.getRequestDispatcher(target);

rdsp.forward(req,resp);

} else

chain.doFilter(req, resp);

}

@Override

public void init(FilterConfig config)throws ServletException {

this.includes.addAll(Arrays.asList(config.getInitParameter(“includeServlets”).split(“,”)));

}

}

2.在web.xml中做适当配置,在struts2的配置前加上下面的代码:

redisp

com.kcjxkj.filter.ReDispatcherFilter

includeServlets

ValidateEmail

redisp

/*

其中,

中为web.xml中配置的要过滤的servlet名,多个之间用“,”逗号隔开。

第二篇:servlet生命周期

Servlet生命周期

Servlet的生命周期是由servlet容器来控制的。Servlet周期分为三个阶段:(一)初始化阶段;(二)运行阶段;(三)销毁阶段。

分阶段讲解:

(一)servlet初始化阶段,调用init()方法。

在下列时刻servlet容器载入servlet:

1、servlet容器启动时自动载入某些servlet,实现它只需要在web.XML

文件中的之间添加如下代码:

1

2、在servlet容器启动后,客户首次向servlet发送请求。

3、Servlet类文件被更新后,重新载入servlet。

Servlet被载入后,servlet容器创建一个servlet实例并且调用servlet的init()方法进行初始化。在servlet的整个生命周期内,init()方法只被调用一次。

(二)servlet运行阶段,调用service()方法。

对于用户到达servlet的请求,servlet容器会创建特定于这个请求的servletrequest对象和servletresponse对象,然后调用servlet的service方法。Service方法从servletrequest对象获得客户请求信息,处理该请求,并通过servletresponse对象向客户返回响应信息。

Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。

代码的最后调用了HTTPServlet自己的service(request,response)方法,然后根据请求去调用对应的doXXX方法,因为HttpServlet中的doXXX方法都是返回错误信息。

(三)servlet销毁(终止)阶段,调用destroy()方法。

当web应用被终止,或servlet容器终止运行,或servlet容器重新载入servlet新实例时,servlet会先调用servlet的destroy()方法,在destroy()方法中可以释放掉servlet所占用的内存资源。

第三篇:servlet小结

Tomcat服务器 http工作原理:

http超文本传输协议

HTTP是一个客户端和服务器端请求和应答的标准(TCP)

http请求响应步骤:

1客户端链接到web服务器 2发送http请求

3服务器接收请求并返回http响应 4释放链接tcp 5客户端浏览器解析html内容 Web应用程序 项目打包发布

1清缓存,重新生成.Class文件 2生成war包

3将war文件复制tomcat路径下的webapps 文件下 4启动项目

5通过浏览器访问

在eclipse中配置tomcat并发布项目

Windows-prefrence-servers-runtime envirment Add

tomcat 安装目录 Server 安装 运行

给servlet类 在Web.xml中配置servlet访问路径 Servlet生命周期

1在被访问时进行初始化 2请求到达时处理 3在应用结束时注销 Get与post请求的区别

1get请求不安全传输时,数据存放在url中,post传输对用户来说,是不可见的 2get请求传输数据较小,受限url长度的限制,post可以传输大量的数据,Httpservletrequest的getparameter 方法 获取地址栏参数,或者表单字段值 Servletcontext的getinitparameter Context-param设置全局变量

使用注解方式设置servlet访问路径 Loadonstartup设置初始化 转发和重定向 区别:

转发在服务器端完成,重定向在客户端完成 转发速度快,重定向速度慢

转发是同一次请求,重定向是两次请求 转发地址栏没有变化,重定向地址栏有变化 转发不可以访问其他外部资源,重定向可以

请求转发可以访问web-inf保护目录下的页面,重定向不能访问到 转发可以携带参数,重定向不能携带参数

Web-inf为保护目录,保护目录下的文件不能直接访问,如果要访问保护目录下的文件,只能通过转发的方式访问,重定向不能访问 Jsp表达式<%= 表达式%> Jsp脚本<%脚本%> Jsp声明<%!%> Jsp注释<%--%>

第四篇:Struts2介绍

Struts2集成指南

关于Struts2 Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。

Struts,a history 在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。

Craig McClanahan 2006年,WebWork与Struts这两个优秀的Java EE Web框架(Web Framework〕的团体,决定合作共同开发一个新的,整合了WebWork与Struts优点,并且更加优雅、扩展性更强的框架,命名为“Struts 2”,原Struts的1.x版本产品称为“Struts 1”。

至此,Struts项目并行提供与维护两个主要版本的框架产品——Struts 1与Struts 2。Struts1 vs.Struts2 侵入性

Struts 1 在编程方面是面向抽象类编程,而不是面向接口编程。Struts 1要求自定义Action 类继承一个特定的抽象基类Action。另一方面,Struts 1的 Action 依赖于 Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。例如 e.g.public class LogonAction extends Action {

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){

} }

Struts 2 Action 类可以实现一个Action接口,也可以实现其他接口,甚至不实现任何接口。这使得可选的和定制的服务成为可能。e.g.public class ExampleAction {

public String doSomething(){

return “success”;} }

线程模式

Struts 1 Action类 是单例模式并且必须是线程安全的,因为在web容器中,仅有Action类 的一个实例来处理所有的请求。

Struts2 Web容器为每一个请求产生一个Action类实例,因此没有线程安全问题。可测试性

Struts1 由于对Servlet API的依赖,使得针对于自定义Action类的测试变得复杂。

Struts2 由于自定义Action可以为POJO,所以可以向测试一个POJO一样来测试Action类。

请求参数封装

Struts1 使用ActionForm 对象封装用户的请求参数,所有的 ActionForm 必须继承一个基类:ActionForm。普通的JavaBean 不能用作ActionForm,并且需要在配置文件中定义ActionForm。e.g.public class LogonForm extends ActionForm {

private String userpassword;

private String username;}

Struts2 直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的 Rich对象类型。e.g.public class ExampleAction {

private String responseMessage;private String requestMessage;

public String getResponseMessage(){

return responseMessage;}

public void setResponseMessage(String responseMessage){

this.responseMessage = responseMessage;}

public String getRequestMessage(){

return requestMessage;

} } public void setRequestMessage(String requestMessage){ } this.requestMessage = requestMessage;public String doSomething(){

} setMessage(“Hi, ” + getRequestMessage());return “success”;EL Struts1 整合了 JSTL,因此可以使用JSTL 表达式语言。JSTL有基本对象图遍历,但在对集合和索引属性的支持上则功能不强。在向视图绑定值时,Struts1 使用标准JSP 机制把对象绑定到视图页面。

Struts2 Struts 2 可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2 下的表达式语言功能更加强大。在向视图绑定值时,Struts2 使用“ValueStack ”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。

校验框架

Struts1 Struts1 支持在 ActionForm 重写validate 方法中手动校验,或者通过整合 Commons-validator 框架来完成数据校验。

Struts2 Struts 2 支持通过重写validate方法进行校验,也支持整合XWork 校验框架进行校验。Struts2 architacture

名词约定

凡是代码、配置文件、IDE中出现的名词,均采用英文原称。

Roadmap 本文档的目标是,帮助读者在Eclipse中将Struts2集成至一个崭新的Dynamic Web Project。集成步骤大致如下:配置Struts2的代码环境-> 在web.xml中加入Struts2功能-> 测试Struts2。文档目标达成的标志是:页面请求能够通过Struts2的Action Mapping成功转发,并且基于Java的Struts2验证框架能够生效。

集成步骤

引入Struts2相关的jar文件

Struts2 jars           commons-fileupload-1.2.2.jar commons-io-2.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar freemarker-2.3.16.jar javassist.jar jstl-1.2.jar ognl-3.0.1.jar struts2-core-2.2.3.jar xwork-core-2.2.3.jar 加入build path 将以上10个jar文件,拷贝至WebContent/WEB-INF/lib下:

对于Web Dynamic Project,一般情况下,当你向lib目录下copy了jar文件,eclipse会自动将jar文件加入build path下的名为Web App Libraries的Library。请确认在工程下出现了名为Web App Libraries的Library。如果有,说明这些jar文件已经被添加至build path了:

如果在工程目录下找不到名为Web App Libraries的Library,说明jar文件没有被添加至build path,需要进行手动添加。首先进入build path设置界面,选中Libraries 页,并点击Add JARs:

在JAR Selection窗口中,选中lib下所有的jar文件。选中后点击OK:

你将看到被选中的jar文件已经被添加至build path:

在工程中会出现一个名为Referenced Libraries的Libraries。这说明jar文件已经被添加至build path:

以上两种方法都可以将jar文件添加至build path,它们的效果是一样的。

配置web.xml 添加filter 在web.xml中添加一个filter:

struts2

org.apache.struts2.dispatcher.FilterDispatcher

filter-name表示filter的名字,你可以任意决定这个名字。filter-class表示使用哪个类作为filter,从这个类的全称来判断,可以发现FilterDispatcher是Struts2提供的一个类。它是Struts2转发请求的起点。在web.xml中添加一个filter-mapping:

struts2

/*

filter-mapping用来映射url和filter的映射关系。filter-name表示filter的名字,这个名字必须和之前filter声明中的filter-name一致。url-pattern表示哪些格式的url会被此filter滤中。/*表示在此web应用域名下,所有的地址都会被filter滤中,换言之,所有的http请求都会通过Struts2进行转发。

filter的作用

通过以上的配置,FilterDispatcher和url与filter-name联系在了一起。

由于在web容器中注册了FilterDispatcher这个filter,Struts2可以收到所有http://localhost:8080/tyland-b2b 的http请求。随后,FilterDispatcher会根据我们定义的action-mapping规则,将请求分发到指定的action类以及它的拦截器栈。最后,Struts2按照action-mapping规则,将后台计算的结果返回给指定页面。笼统地来说,Struts2就是这样工作的,所以说,FilterDispatcher是Struts2工作的入口。

编写代码,测试Struts2 Struts2的环境已经配置好了,基于action-mapping的转发机制已经可以运行了。为了证明这一点,请编写一些测试jsp页面和java代码。

在编写代码的过程中,请确保代码文件的位置如下图所示:

代码清单如下:

Java代码

UserVO.java package com.tyland.b2b.vo;

// 一个Value Object(Data Model),用来存放用户名、密码 public class UserVO {

private String username;private String password;

// 成员变量password的getter方法。

// 在Strtus2中,用来在页面和服务器间传值的Value Object必须有getter方法

public String getPassword(){

return password;

} } // 成员变量password的setter方法。

// 在Strtus2中,用来在页面和服务器间传值的Value Object必须有setter方法 public void setPassword(String password){ } this.password = password;// 同password

public String getUsername(){ } return username;// 同password

public void setUsername(String username){ } this.username = username;BaseAction.java package com.tyland.b2b.web.base;

import com.opensymphony.xwork2.ActionSupport;

// 为了代码的灵活性和可扩展性,请声明一个BaseAction基类

// BaseAction继承Struts2的ActionSupport,因为我们想使用Struts2的一些额外帮助。// 对于ActionSupport的继承不是必须的

public class BaseAction extends ActionSupport {

private static final long serialVersionUID = ***74952195L;} UserAction.java package com.tyland.b2b.web;

import com.tyland.b2b.vo.UserVO;import com.tyland.b2b.web.base.BaseAction;

// 自定义的Action类,继承BaseAction // 由于继承了ActionSupport,我们可以使用Struts2默认的action方法execute()// 由于继承了ActionSupport,我们可以使用Struts2默认的校验方法validate()public class UserAction extends BaseAction {

private static final long serialVersionUID =-7***3684190L;

// 用来在页面和服务器之间传递用户名、密码的Value Object。变量名任意。

private UserVO userVO;

执行。// 用来在页面和服务器之间传递message变量。名称任意。private String message;//用来在页面和服务器之间传递sayHiTo变量。名称任意。private String sayHiTo;// 用来传值的变量必须有getter方法 public UserVO getUserVO(){ return userVO;}

//用来传值的变量必须有setter方法

public void setUserVO(UserVO userVO){ } this.userVO = userVO;public String getMessage(){ } return message;public void setMessage(String message){ } this.message = message;public String getSayHiTo(){ } return sayHiTo;public void setSayHiTo(String sayHiTo){ } this.sayHiTo = sayHiTo;// Override声明说明这个方法复写或实现了父类或接口方法。

// 如action-mapping中不显示指定别的方法,struts2会将execute()作为默认的action方法// 返回的SUCCESS常量,来自ActionSupport,值为“success”。

// action-mapping会根据不同的返回值采取不同的转发或页面跳转动作。@Override

public String execute()throws Exception {

} System.out.println(“******execute******”);System.out.println(userVO.getUsername()+ “ logins”);return SUCCESS;

// 在Struts2执行execute()之前,会先执行validateExecute()进行用户输入验证 // 这个方法名必须符合Struts2验证框架所规定的命名规范 public void validateExecute(){

}

} System.out.println(“******validateExecute******” + userVO.getUsername());if(null == userVO.getUsername()|| userVO.getUsername().length()< 5){ this.addFieldError(“username”, “USERNAME ERROR”);} if(null == userVO.getPassword()|| userVO.getPassword().length()< 5){ this.addFieldError(“password”, “PASSWORD ERROR”);} // 一个自定义方法。通过在action-mapping中的设置,可以实现使用POJO的自定义服务配置 public String sayHi()throws Exception {

} System.out.println(“say hi to ” + getSayHiTo());return SUCCESS;// 符合验证框架命名规范的、真对于sayHi()的验证方法 public void validateSayHi(){

} System.out.println(“******validateSayHi******” + getSayHiTo());if(null == getSayHiTo()|| getSayHiTo().length()< 5){ this.addFieldError(“sayHiTo”, “SAYHITO ERROR”);} ExampleAction.java package com.tyland.b2b.web;

import com.tyland.b2b.web.base.BaseAction;

public class ExampleAction extends BaseAction {

private static final long serialVersionUID =-***7281L;

private String message;private String sayHiTo;

public String getMessage(){

return message;}

public void setMessage(String message){

this.message = message;}

public String getSayHiTo(){

return sayHiTo;}

} public void setSayHiTo(String sayHiTo){ } this.sayHiTo = sayHiTo;public String finish(){

} System.out.println(“example finished”);setMessage(getSayHiTo());return SUCCESS;JSP代码

index.jsp <%@ page language=“java” contentType=“text/html;charset=UTF-8”

pageEncoding=“UTF-8”%>

<%@ taglib uri = “http://java.sun.com/jsp/jstl/core” prefix = “c” %>

Hello World

第五篇:Struts2试题

Struts2 试题

1.struts2的执行流程?

客户端提交一个HttpServletRequest请求(action或JSP页面)

请求被提交到一系列Filter过滤器,如ActionCleanUp和FiterDispatcher等

FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器 询问ActionMapper是否需要调用某个action来处理

如果ActonMapper据诶的那个需要调用某个A传统,FilterDispatcher则把请求教到ActionProxy,由其进行处理

ActionProxy通过Configuration Manager询问框架配置文件,找到需要调用的Action类 ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用action Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器 最后ActionInvocation负责根据struts配置文件中配置的result元素,找到与返回值对应的result

2.struts2的web里需要配置什么?

1. 2. 3.struts2 4. 5.org.apache.struts2.dispatcher.FilterDispatcher 6. 7. 8. 9. 10.struts2 11./* 12.

3.struts.xml文件哪个常量可以实现不用重新启动服务就可以得到反馈? 

4.struts中的package的作用是什么?namespace可以为空吗?如果namespace为空会意味着什么呢?

标识

可以、Timmer

如果没写,说明该包为默认空间 只要敲index没有精确对应的package都交给namespackage 如果还没有就崩溃

5.Action 的实现通集成常用那种方法? 一种是直接实现自己的Action 另一种是实现Action的接口 继承ActionSupport

6.路径设置用什么路径,绝对还是相对? 都可以

7.通配符有几种?要遵循什么原则? {1}

方法名

8.Action的属性?

path属性:指定请求访问Action的路径

type属性:指定Action的完整类名

name属性:指定需要传递给Action的ActionForm Bean scope属性:指定ActionForm Bean的存放范围

validate属性:指定是否执行表单验证

input属性:指定当表单验证失败时的转发路径。

元素还包含一个子元素,它定义了一个请求转发路径。

9.用于读取资源文件,实现国际化的Struts2的标签()。

10.一下关于struts的描述中,不正确的是(D)struts 是一个基于JAVA EE的MVC struts2的框架配置文件是struts-configxml struts2的控制组建核心包括核心控制和业务控制器

在struts中解决中文乱码可以通过修改struts。I18n。encoding的值为GBK来实现 11.不属于Struts2的动作类的常量返回值的是(C)

A.success

B.input

C.never

D.login 12.一下不属于Struts2动作执行的结果类型是(A)a.action b.redirect c.redirectAction d.dispatcher 13.在struts.xml中。假如在一个package中没有配置namespace,那么在其中配置一个Action名字叫做login,它的result是这样配置的/login.jsp,已知在此配置文件中还有另一个name为user的package其中也有一个Action名字为login,它的result是这样配置的/loginUser.jsp那么在以下什么情况下将能访问到login.jsp A A.在根路径后输入/login B.在根路径后输入/user/login C.在根路径后输入/login/user D.在根路径后输入/abc/login

14.正规开发中,在使用struts2时定义Action使用哪种方式。B A.直接定义Action类。B.从ActionSupport继承。C.从Action继承。D.实现Action接口。

15.不同的线程在调用Action时创建几个Action实例。C A.1个 B.2个

C.每个线程创建1个。D.可以自定义配置。

16.struts2的体系结构主要包括那几个部分(A)A.模型层

B.struts控制器组件 C。struts配置文件 D。struts标签库

17.struts提供了Action接口定义了5个标准字符串常量,不包括的有(C)A SUCCESS

B NONE C REG D LOGIN 18.struts中数据验证失败时,通过(B)标签显示错误信息。A

B

C

D

19.列举出action执行结果类型,并说明用途。

默认结果类型是dispatcher chain:Action链式处理的结果类型,也就是将结果转发到这个action中。dispatcher:用于整合JSP的结果类型

redirect:实际上dispatcher和redirect的区别就是在于转发和重定向的区别。redirect-action:重定向action

20.简述struts2文件上传的方法。

Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

21.在struts2标签内部 能否使用el表达式?

不可

22.struts2中result-type的chain和redirectAction的区别

chain,它是一个琏式的,是从一个Action转发另外一个Aciton redirectAction,是从新请求一个Action

23.能否取到Httpsession的值 不可

24.action的name里边写的名字是什么地方用的? From 表单action引用

25.action的class里面写的是什么? Action相应类的详细路径

26.action的extends里面调用的是什么?

从另外一个包继承、相当于拥有即承包的所有配置

27.如果不写action的后面mothod,默认的调用的方法是什么,如果写的话,写的时候有什么需要注意的?

不写会默认调用最上面的方法

28.输出值的strtus标签是什么?

s:property

28.循环的struts标签是什么?

s:iterator

29.判断的strtuts标签是什么?

s:if

30.显示文本的strtuts标签是什么?

31.要调用struts标签需要导入什么? <%@taglib uri=“/struts-tags” prefix=“s”%>

32.如果需要调用sc:datetimepicker需要导入什么,sc代表的是什么意思?

33.中的s代表的是什么,这个标签是干什么用的?

获取前台文本的值

34.请简述前台提交后是如何到达后台action的。

通过from表单action找到struts配置文件相应action的类 再去找相应action类里的方法

下载配置Struts2后如何使用servlet五篇范文word格式文档
下载配置Struts2后如何使用servlet五篇范文.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    struts2课件

    —高级软件人才实作培训专家!Struts2的启动配置在struts1.x中,struts框架是通过Servlet启动的。在struts2中,struts框架是通过Filter启动的。他在web.xml中的配置如下:struts2o......

    Struts2习题

    Struts2习题1 1.struts中的package的作用是什么?namespace可以为空吗?如果namespace为空会意味着什么呢? 标识、 可以 、如果没写,说明该包为默认空间 2.Action 的实现通集成常......

    Servlet和JSP经验总结[精选合集]

    Servlet和JSP经验总结 这里介绍Servlet和JSP经验总结,包括在servlet的init方法中缓存数据、禁止Servlet和JSP自动重载、将页面输出进行压缩和正确地确定javabean的生命周期......

    使用struts2和AJAX实现文件上传并显示进度条(范文大全)

    使用struts2和AJAX实现文件上传并显示进度条 (2011-05-25 21:48:48) 转载▼ 分类:java点滴 这个是刚进入公司,技术总监叫我做的东西,开始的确没有什么头绪,以前做的项目里只做......

    国有资产配置、使用、处置管理制度

    国有资产配置管理制度 1、按照“依法配置、保障需要、科学合理、优化结构、勤俭节约、从严控制”的原则进行资产配置。 2、每年的4月份,各部门应上报下一年度的资产配置计划,......

    全国PETCT配置使用调查报告

    全国PETCT配置使用调查报告 http://www.xiexiebang.com 日期:2011-06-29 10:02 来源:爱爱医 全国PET-CT(PET)配置、使用情况调查报告 2009年6月,中华医学会核医学分会受国家卫生......

    struts2复习题(含答案)

    Struts2复习题 1. 以下属于struts2的控制器组件是: A.ActionB.ActionForm C.ActionServlet D.dispatchAction 2. 以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D......

    struts2综合试卷范文合集

    Struts2学习增强练习课程名称: Struts2学习增强练习考试时间 xx分钟(闭卷■) 不定项选择题 1. 开发struts2 web项目,需要导入哪些jar包 A 必须导入struts2 解压lib下所有......