servlet:
void init(ServletConfig cfg):// 读取servlet的配置参数
void service(ServletRequest request, ServletResponse response);// 服务方法,用户每次访问都会被执行
void destroy();// 销毁方法
filter:
void init(FilterConfig cfg);// 读取filter的配置参数
void doFilter(ServletRequest request, ServletResponse response,FilterChain chain);// 过滤方法,每次访问被过滤的资源都被执行
void destroy();// 销毁方法
OGNL:STRUTS2通过其读写对象的属性
搭建struts2的开发环境:
1.下载官方的struts2的发行包:struts2-2.3.15.3-all
2.导入jar包到lib目录下:直接拷贝struts2发行包的app\struts2-blank\WEB-INF\lib下的jar即可
3.在构建目录的顶端,建立一个struts2.xml配置文件
4.在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>
5.验证,部署到tomcat服务器,启动,没有错误提示,成功
// 规范
// 指定访问是添加的后缀名字,多个后缀名以英文逗号(,)隔开
<constant name="struts.action.extension" value="action,"/>
// 当struts2的配置文件修改后,系统是否加载修改后的文件,默认为false
<constant name="struts.configuration.xml.reload" value="false"/>
// 开发模式开启
<constant name="struts.devModel" value="true"/>
// 设置视图的主题
<constant name="struts.ui.theme" value="simple">
// 长传文件大小的设置
<constant name="struts.multipart.maxSize" value="1073930"/>
package元素:
name:必须唯一
extends:必须继承struts-default,否则struts2的核心功能将无法使用
namespace:命名空间,一般以"/" 开头,表示动作的访问路径:命名空间+动作名,不写默认为访问的该项目下的动作名
action元素:
name:动作名
class:动作类的完整路径名,会根据反射机制实例化.反射获得构造方法,获得普通方法,获得字段属性
method:方法名,默认是execute();
反射机制:反着来,有对象得到类名,Class.forName():获取类对象
在实际的操作过程中,凡是看到有参数传递了一个完整的"包.类"的形式,一般都是使用的反射机制作用的
有重大数据,或者除了美元之外,所有的指数都在跌,之前多头行情大涨,一出现跌,你就可以去买跌,因为买跌
是大趋势,在大趋势面前才可以稳定的赚钱 // 获取ServletAPI相关对象的实例
public class ActionDemo extend ActionSupport{
public String execute(){
HttpServletContext request = ServletActionContext.getRequest();
HttpServletContext response = ServletActionContext.getResponse();
ServletContext application = ServletActionContext.getServletContext();
return null;
}
}
获取ServletAPI的原因:拦截器(ServletConfig)会给你注入这些实例
结果视图:
1.局部视图:服务于当前动作的结果
<action name="upload" class="com.deng.UploadAction" method="execute">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
2.全局视图:动作访问,当在局部视图中没有找到时候,去全局视图找
<package name="p1" extends="struts-default">
<global-results>
<result name="success" type="dispatcher">1.jsp</result>
</global-results>
</package> result元素
name:逻辑视图的名称,他对应的是动作方法的返回值,默认为success
type:达到目标的形式,默认为dispatcher,转发 struts2的结果类型
在struts-default.xml中
1.chain:用户转发到另一个动作
<action name="c1" class="com.deng.Ac1" method="m1">
<result name="success" type="chain">c2</result>
</action>
<action name="c2" class="com.deng.Ac2" method="m2">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
转发到不同命名空间的另外一个动作
<action name="c1" class="com.deng.Ac1" method="m1">
<result name="success" type="chain">
<!--给chain对应类型的处理类,注入参数值,调用的是setter方法
<param name="namespace">/n2</param>
<param name="actionName">c2</param>
</result>
</action>
<action name="c2" class="com.deng.Ac2" method="m2">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
2.dispatcher:转发到另外一个jsp页面
<action name="upload" class="com.deng.UploadAction" method="execute">
方法一:<result name="success" type="dispatcher">/1.jsp</result>
方法二:<result name="success" type="dispatcher">
<param name="location">/1.jsp</param>
</result>
</action>
3.freemarker:用于转发到另外一个freemarker模板,页面静态化,一种用来生成静态文本的工具
4.velocity:用于转发到另外一个velocity模板
5.httpheader:用来输出http协议的消息头
6.redirect:用于重定向到另外一个页面
7.redirectAction:用于重定向到另外一个动作
8.stream:用于文件下载
9.plainText:以纯文本的形式展现 --------------------------------------
封装用户请求参数,very important
1.动态参数(用户请求的参数)注入
方式一:用Action的动作类作为模型对象
login.jsp
<form action="${pageContext.request.contextPath}/regist.action" method="post">
username:<input name="username" type="text">
password:<input name="password" type="text">
<input type="submit" value="ok"
</form>
struts.xml配置文件
<package name="p1" extends="struts-default">
<action name="regist" class="comg.deng.ResigtAction" method="regist">
<result name="success">/success.jsp</result>
<reuslt name="login">/login.jsp</result>
</action>
</package>
动作类,动作类当作模型对象
public class RegistAction extend ActionSupport{
private String password;
private String username;
public String getUsername(){
return username;
}
// 框架会按照表单的提交的参数值,调用对应的setter属性
public void setUsername(String username){
this.username = username;
}
。。。 public String regist(){
System.out.println(username+":"+password);
if("abc".equals(username)&&"123".equals(password))
return SUCCESS;
else
return LOGIN;
}
}
方式两:模型和动作类分开
模型就是一个javaBean
public class Person implements Serializable{
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(){
this.password = password;
}
@override
public String toString(){
return "Person[username="+"username+",password="+password+"]";
}
} 动作类
public class RegistAction extends ActionSupport{
// new 一个对象
Person person = new Person();
// 生成对象的getter和setter方法
public String getPerson(){
return person;
}
public void setPerson(Person person){
this.person = person;
} public String regist(){
System.out.println(username+":"+password);
if("abc".equals(username)&&"123".equals(password))
return SUCCESS;
else
return LOGIN;
}
}
配置文件
<package name="p1" extends="struts-default">
<action name="regist" class="comg.deng.ResigtAction" method="regist">
<result name="success">/success.jsp</result>
<reuslt name="login">/login.jsp</result>
</action>
</package> 表单
<form action="${pageContext.request.contextPath}/regist.action" method="post">
username:<input name="person.username" type="text">
password:<input name="person.password" type="text">
<input type="submit" value="ok"
</form> 方法三:模型驱动ModelDriven
一个javaBean
public class Person implements Serializable{
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(){
this.password = password;
}
@override
public String toString(){
return "Person[username="+"username+",password="+password+"]";
}
} 动作类
public class RegistAction implements ModelDriven<Person>{
// new 一个对象
private Person person = new Person();
// 生成对象的getter和setter方法
public String getPerson(){
return person;
}
public void setPerson(Person person){
this.person = person;
} public String regist(){
System.out.println(username+":"+password);
if("abc".equals(username)&&"123".equals(password))
return SUCCESS;
else
return LOGIN;
}
public Person getModel(){
return person;
}
} 配置文件
<package name="p1" extends="struts-default">
<action name="regist" class="comg.deng.ResigtAction" method="regist">
<result name="success">/success.jsp</result>
<reuslt name="login">/login.jsp</result>
</action>
</package> 表单
<form action="${pageContext.request.contextPath}/regist.action" method="post">
username:<input name="username" type="text">
password:<input name="password" type="text">
<input type="submit" value="ok"
</form> // 静态参数注入
<package name="p1" extend="struts-default" namespace="/usr">
<action name="a1" class="com.deng.TomorrowAction" method="m1">
<param name="name">student</param>
<action>
</package>
public class TomorrowAction extends ActionSupport{
private String name;// 这个name的值就是:student
public String getName(String name){
return name;
}
public void setName(){
this.name = name;
}
public String m1(){
System.out.println(name);
return null;
}
}

struts2的琐碎知识点的更多相关文章

  1. Java琐碎知识点

    jps命令是JDK1.5提供的一条显示当前用户的所有java进程pid的指令,类似Linux上的ps命令简化版,Windows和linux/unix平台都可以用比较常用的参数:-q:只显示pid,不显 ...

  2. struts2的使用知识点

    最开始学习java的时候学习过struts,但是对配置和struts的理解深度不够,现在工作虽然再用,但是自己搭建环境和使用心得始终很零散,所以现在决定重新理一遍,有条理的学习一下struts. 至于 ...

  3. linux琐碎知识点

    1.awk的使用方式,pattern支持正则表达式 awk 'pattern{action}' {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找 ...

  4. linux学习之一些琐碎知识点

    一.python 问:django中project和app之间到底有什么不同? 答:他们的区别就是一个是配置,另一个是代码. 一个project包含很多个django app以及对它们的配置.技术上, ...

  5. Java知识点:琐碎知识点(3)

    零碎 switch(x),x只可以是enum或byte.short.char.int. 枚举在switch-case语句作为标签时必须是枚举常量的非限定名称,否则Compile Error. Enum ...

  6. Java知识点:琐碎知识点(2)

    49个关键字一览 abstract default if private this boolean do implements protected throw break double import ...

  7. Java知识点:琐碎知识点(1)

    Java基本介绍 SUN:Stanford University NetworkJava之父:James GoslingJava的跨平台性因为有Java虚拟机,运行class文件.Java吉祥物:Du ...

  8. ROS机器人编程实践----琐碎知识点

    amcl原理: amcl将激光传感器数据与从地图预估的传感器数据相比较,给出可能的位姿.如果传感器数据和某个候选位姿处的预测数据相同,amcl就会给这个位姿一个较高的概率,反之,就会降低这个概率.概率 ...

  9. CSS琐碎知识点(持续补充)

    一.字体单位,pt?px?em?rem? pt:磅,一种固定长度的绝对的度量单位,是能够使用测量设备测得的长度,印刷业上经常使用,一般用于页面打印排版. px:屏幕设备上能显示出的最小的一个物理点,这 ...

随机推荐

  1. Python 之 向上取整、向下取整以及四舍五入函数

    import math f = 11.2 print math.ceil(f) #向上取整 print math.floor(f) #向下取整 print round(f) #四舍五入 #这三个函数的 ...

  2. 基本上每个应用程序领域的程序员都有使用 C++

    C++ 的使用基本上每个应用程序领域的程序员都有使用 C++. C++ 通常用于编写设备驱动程序和其他要求实时性的直接操作硬件的软件. C++ 广泛用于教学和研究. 任何一个使用苹果电脑或 Windo ...

  3. Linux Vi/Vim 的使用及实例

    什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是 ...

  4. 【PyMongo】连接10055错误的处理--windows7

    http://stackoverflow.com/questions/25621893/mongodump-utility-raise-socketexception

  5. php常见的坑

    10.filesize缓存的问题 PHP的filesize居然会缓存(当然还有不少,这里仅用filesize举例,其它会缓存的函数,以官方文档为准)线上代码经常随机出各种问题,排查了1个月,线上加各种 ...

  6. 静默安装oracle 11g,环境预检查时报错,SEVERE: [FATAL] PRVF-0002 : 无法检索本地节点名

    环境描述: 操作系统:Redhat 6.6_x64 oracle:11.2.0.4 x64 问题描述: 今天在安装oracle 11g的数据库,在进行预安装环境检查的时候,报下面的错误: [oracl ...

  7. Mac下,如何把项目托管到Github上(Github Desktop的使用)

    在上一篇中,详细讲解了使用X-code和终端配合上传代码的方法,这种方法比较传统,中间会有坑,英文看起来也费劲,不过Github官方提供了一个Mac版的客户端,如下图:

  8. Websphere停止服务不用输入账号密码

    启用了安全性的WebSphere Application Server,在日常维护中经常在停止服务的时候需要输入用户名和密码.停止的方式如下:[root@was /]# /opt/IBM/WebSph ...

  9. jdbc链接数据库,获取表名,字段名和数据

    import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import  ...

  10. linux发布项目

    1.右击项目 export --->war file 上传到linux服务器 2.解压 jiar -xvf xx.war 3.移动到 tomcat webapps文件中 4.启动tomcat 访 ...