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-all2.导入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:逻辑视图的名称,他对应的是动作方法的返回值,默认为successtype:达到目标的形式,默认为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 important1.动态参数(用户请求的参数)注入方式一:用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; }}方式两:模型和动作类分开模型就是一个javaBeanpublic 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一个javaBeanpublic 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; }}
原文地址:https://www.cnblogs.com/demo-deng/p/8304246.html
时间: 2024-10-12 04:18:20