1、02_尚学堂马士兵_Struts2_Struts2_HelloWorld_2.avi
指定Tomcat的目录,指定JDK搭建开发环境(拷贝jar包,复制struts.xml文件 此文件不要放在WEB-INF下面,应该放到src下面 ),在web.xml文件中:
<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>
其中<url-pattern>/*</url-pattern> 不要写/*.do 或者 /*.action约定俗成用/*
2、04_尚学堂马士兵_Struts2_Struts2_HelloWorld_3.avi
(1)
<!-- <constant >:常量的配置 -->
<!--name="struts.devMode" value="true":当前是开发模式,改动配置文件会自动装载 默认是false-->
<!--命名空间 ---> action -->相应的处理类或页面 -->
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="hell" class="package + class xxxx">
<result>
/Hello.jsp
</result>
</action>
</package>
(2)struts.xml不自动提示的解决办法: window--perferences-XML catalog---add---key Type="URI" key="*.dtd"
3、09_尚学堂马士兵_Struts2_Struts2_HelloWorld_7_2.avi
struts2的执行流程:
当用户在浏览器中敲入要访问的地址的时候,浏览器会将这个请求发送给tomcat然后tomcat判断应该交给那个WebApplication来处理,然后会读取它下面的web.xml配置发现有配置:
<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>因为<url-pattern> 为/* 它会过滤所有的请求然后就交给filter类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter处理执行调用doFilter()方法,然后再方法中会读取struts-xml文件,根据用户请求的地址找到相应的package、 action、 result、然后将相应的页面返回给浏览器
4、10_尚学堂马士兵_Struts2_Struts2_Namespace_命名空间.avi
(1)namespace决定了action的访问路径,默认为"",可以接收所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,
/xxx/index.action,或者/xxx/yyy/index.action
namespace最好也用模块来进行命名
5、11_尚学堂马士兵_Struts2_Struts2_Action.avi
(1)struts1 与struts2的一个重要区别:在struts1中进行多次访问的时候用到的是同一个Action对象。而struts2则是每一次访问都会创建一个Action对象,所以struts2不会有线程安全问题的发生
(2)<result>标签如果没有指定name属性默认返回值为success
(3)<action>标签中的class值如果没有配置相应的类,它会调用struts默认的一个处理类的execute()方法.
(4)实现struts的处理类的时候不要自己随便写类然后定义execute()方法,也不要实现Action类而要从ActionSupport类继承,可以直接使用它为我们定义好的方法.
6、12_尚学堂马士兵_Struts2_Struts2_Path_路径问题.avi
(1)struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath
(2)request.getContextPath()得到项目的名字,一般用来解决路径问题 如果项目为根目录,则得到一个"",即空的字条串。
request.getscheme()返回的协议名称.默认是http
request.getServerName()就是获取你的网站的域名,如果是在本地的话就是localhost
request.getServerPort()获取服务的端口号
7、13_尚学堂马士兵_Struts2_Struts2_ActionMethod_DMI_动态方法调用.avi
Action执行的时候并不一定要执行execute方法<br />
可以在配置文件中配置Action的时候用method=来指定执行哪个方法
也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />
<a href="<%=context %>/user/userAdd">添加用户</a>
<br />
<a href="<%=context %>/user/user!add">添加用户</a>
<br />
前者会产生太多的action,所以不推荐使用
配置文件:
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
<result>/user_add_success.jsp</result>
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
8、14_尚学堂马士兵_Struts2_Struts2_ActionWildcard_通配符配置.avi
主要学习通配符的使用 通配符可以将配置量降到最低,不过一定要遵守"约定优于配置"的原则
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student_add"></action>
<action name="Student_*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
<result>/Student_{1}_success.jsp</result>
</action>
<!-- 更简便的配置法 -->
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
</package>
说明:
(1){1}代表name="Student*"后面第一个'*',同理{2}代表第二个'*'
(2).如果action之间有重复配置,struts2会匹配最精确的action。如果通配符配置之间有重复,则看前后配置顺序
9、 15_尚学堂马士兵_Struts2_Struts2_用Action的属性接收参数.avi
在继承ActionSupport的类中定义要接受的参数,参数的名称与Action所传的名称无关在struts2内部调用的是属性的set方法,所以setxxx()的名字一定要与Action后面所传的值是一样的。
10、16_尚学堂马士兵_Struts2_Struts2_用DomainModel接收参数.avi
如果要接受的参数的个数很多,我们可以不用定义属性而是直接定义一个对象例如:
private User user (set get 方法)在调用Action传值的时候使用user!add?user.name=x&user.age=x的方式进行值得传递。(最常用的方式)
11、17_尚学堂马士兵_Struts2_Struts2_用ModelDriven接收参数.avi
继承ActionSupport类的处理类必须同时实现ModelDriven<Object>(实现getModel())在传值的时候使用user/user!add?name=bbb进入处理类的时候会调用getModel()方法返回User对象并且把传过来的值set到里面,注意:此时private User user = new User() 不能只定义,要同时实现这样getModel()才能拿到user对象。
12、18_尚学堂马士兵_Struts2_Struts2_2.1.6版本的中文问题.avi
在配置文件中加入:
<constant name="struts.i18n.encoding" value="GBK"/> 按照文档说明加入此句可解决中文乱码但是不行这是2.1.6的一个bug,会在下一个版本中修复 如何解决呢:在web.xml中:
<filter-name>struts2</filter-name>
<!--<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>-->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
把过滤器的版本改成老版本的即可解决该问题!
13、19_尚学堂马士兵_Struts2_简单数据验证_1.avi
使用addFieldError方法和s:fieldError标签简单处理数据校验
public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
在页面中显示错误信息:
<!-- 以固定的css样式取出错误信息,不方便我们进行相应的处理-->
<s:fielderror fieldName="name" theme="simple"/>
<!-- 从存储错误信息的Map中拿数据 -->
<s:property value="errors.name[1]"/>
<!-- 显示详细的栈信息-->
<s:debug></s:debug>
14、21_尚学堂马士兵_Struts2_访问Web元素_1.avi
注意:web.xml中关于struts的配置一定要采用2.1的,2.0的会取不到这是一个bug
(1)通过ActionContext对象取得Map类型的request, session, application HttpServletRequest, HttpSerletSession ServletContetext:
public class LoginAction1 extends ActionSupport {
private Map request;
private Map session;
private Map application;
//访问此方法,取得相应的对象但是是Map类型
public LoginAction1() {
request = (Map)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}
//在Map类型的对象中存入相应的值
public String execute() {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
}
//在页面中通过标签取得存入的数据 二种方法(通过标签, 通过原始方式):
<s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br />
<s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br />
<s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br />
<s:property value="#attr.a1"/><br />
<s:property value="#attr.s1"/><br />
<s:property value="#attr.r1"/><br />
<s:debug></s:debug>
<br />
我们存入Map中的数据居然可以在request,等对象中得到,那么在struts内部他是将Map中的数据全部复制到了request,session等对象中的 #attr ,可以取得所有的属性,但是不推荐使用,为了防止同名的情况,造成无法区别。
(2)通过实现RequestAware,SessionAware, ApplicationAware 接口获取(最常用 和重要的一种)
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
//DI dependency injection
//IoC inverse of control
public String execute() {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
(3)通过ServletActionContext()取得真实的相应的对象
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public LoginAction3() {
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
}
public String execute() {
request.setAttribute("r1", "r1");
session.setAttribute("s1", "s1");
application.setAttribute("a1", "a1");
return SUCCESS;
}
(4)通过实现ServletRequestAware接口获得相应的对象
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public String execute() {
request.setAttribute("r1", "r1");
session.setAttribute("s1", "s1");
application.setAttribute("a1", "a1");
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
}
分享到:
相关推荐
struts2.1.6-config-browser-plugin.api.chm struts2.1.6-config-browser-plugin.api.chm
struts2-convention-plugin-2.1.6.jar
struts2-struts1-plugin-2.1.6.jar
struts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jar...
Struts2.1.6-Lib: 深入理解Struts2框架核心与库文件 Struts2是一个流行的开源MVC(Model-View-Controller)框架,它为Java Web应用提供了一种强大的架构支持。Struts2.1.6是该框架的一个版本,其lib目录下的jar包...
以下是关于"马士兵Struts2笔记2013"中的关键知识点详解: 1. **建立Struts2工程** 创建一个Struts2工程通常涉及在集成开发环境中(如MyEclipse)创建一个新的Web项目,然后将必要的Struts2库添加到项目的`lib`目录...
在Struts2.1.6-apps这个压缩包中,包含了多个示例应用,这些应用能够帮助初学者理解Struts2的核心概念和实际应用。 首先,让我们深入了解一下Struts2框架的关键特性: 1. **Action与Result**:在Struts2中,Action...
这次我们讨论的是Struts2的特定版本——Struts2.1.6的更新内容和使用注意事项。 在描述中提到,之前上传的"struts2.1.6jar all.zip"文件出现了错误,里面包含了Hibernate的内容,而实际上应该是与Struts2相关的文件...
默认的struts2-config-browser-plugin包中的ftl文件include标签路径用的相对路径,会找到包内的include文件,将包内ftl里include的路径改成的/开头的全路径。
Struts 2.1.6 是一个非常重要的版本,在Java Web开发中占据着核心地位,尤其是在基于MVC(Model-View-Controller)架构的应用程序设计中。Struts 2 是Apache软件基金会的一个开源项目,它是Struts 1的升级版,提供了...
不论高低版本,要使用struts2-core这个jar包,当又需struts2-convention-plugin.jar时勿必要使两者版本一致哦,否则会有DefError、Unable to read class诸等错误
struts2-rest-plugin-2.1.6.jar
struts2-jfreechart-plugin-2.1.6.jar
`struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持。Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许...
struts2-junit-plugin-2.1.6.jar
在本文中,我们将深入探讨Struts2版本2.1.6中的核心jar包以及如何调整`web.xml`配置文件以实现正确部署。 首先,Struts2的核心jar包是框架运行的基础,它们提供了Action映射、拦截器、结果类型和其他关键功能。对于...
Struts2.1.6是Apache Struts框架的一个版本,它是基于MVC(Model-View-Controller)设计模式的Java Web应用程序开发框架。这个版本的jar包包含了运行Struts2应用所需的所有核心类库和依赖组件。以下是关于Struts...
使用struts2+spring方式开发,就必须要struts2-spring-plugin-2.1.6.jar这个包,因为它是两者融合的插件,如果没有肯定不会出错
标题中的“ide-eval-resetter-2.1.6.zip”是一个特定版本的插件,主要用于IDE(集成开发环境)的评估期重置。这个插件的版本号是2.1.6,通常版本号的更新意味着修复了之前版本的问题或增加了新功能。 描述中提到的...
标题 "ide-eval-resetter-2.1.6" 暗示这是一款针对IDE的插件,主要用于IDE的评估期重置。在IT行业中,尤其是软件开发领域,开发人员经常使用集成开发环境(IDE)如IntelliJ IDEA来编写代码。IntelliJ IDEA是一款非常...