struts2自学
一、轻量级的MVC框架,主要解决请求分发问题,重心在控制层和表现层。
二、主要配置文件:web.xml配置filter,struts.xml配置action路径,其他插件配置logback.xml...
三、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>
四、struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <!-- START SNIPPET: xworkSample --> <struts> <package name="up" namespace="/learning" extends="struts-default"> <action name="sayhi" class="action.HelloAction" method="SayHello"> <result name="fail" > /index.jsp </result> <result name="success" > /succ.jsp </result> </action> <action name="login"> <result name="success">/index.jsp</result> </action> </package> <!-- <package name="day1" namespace="/learning" extends="struts-default"> <interceptors >// 注册拦截器 <interceptor name="fistInter" class="interceptor.FirsrInterceptor"></interceptor> <interceptor name="secondInter" class="interceptor.SecondInterceptor"></interceptor> <interceptor-stack name="myInterceptorStack">// 拦截器栈 <interceptor-ref name="fistInter"></interceptor-ref> <interceptor-ref name="secondInter"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="defaultStack"></default-interceptor-ref> <default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref> <constant name="struts.multipart.maxSize" value="50000"></constant> <package name="up" namespace="/upload" extends="struts-default"> <default-interceptor-ref name="defaultStack"></default-interceptor-ref>// 引用拦截器 <action name="upload"> <result name="success">/WEB-INF/upload.jsp</result> </action> <action name="toupload" class="action.UpLoadAction" method="execute"> <result name="upsuccess">/WEB-INF/upsuccess.jsp</result> <result name="upunsuccess">/WEB-INF/upfail.jsp</result> </action> <action name="xx_*" class="action.UpLoadAction" method="{1}">// 表示action接收页面通过通配符传过来的值,如book_add会调用action中的add方法,如此可以不用为每一个方法写一个action路径了 <result name="upsuccess">/WEB-INF/upsuccess.jsp</result> <result name="upunsuccess">/WEB-INF/upfail.jsp</result> </action> </package> --> </struts>
五、Action编写
1.获取页面参数 基本属性注入和域模型注入(对象属性注入),action中有该属性的set方法,或其他传值方式
2.action返回参数 action返回的参数为string类型,且与struts中result的name一致
3.页面获取返回参数 通过el表达式(${user.name})或者ognl语言(<s:property value="user.name"/>),使用ognl语言时要引入标签<%@taglib uri="/struts-tags" prefix="s"%>,或者引入其他标签使用其他展现返回参数的方式
六、拦截器
适合封装一些通用处理,便于重复利用。
1.创建拦截器 创建class实现Interceptor接口,并实现intercept方法
2.注册拦截器
3.引用拦截器
struts2默认引用defaultStack拦截器,一旦在action下配置了其他拦截器则默认的拦截器失效,需加上该拦截器
多个拦截器遵循先进后出的原则,挡执行到拦截器中的invoke()方法时会确认之后是否还有拦截器,若有则继续执行后面的拦截器,没有则执行action方法
4.FileUpload 拦截器 默认拦截器,用于文件上传:将表单中提交的文件以临时文件的形式保存到服务器临时路径下,此拦截器将该临时文件对象注入给action,action自助处理该文件后,拦截器将删除该临时文件
// jsp文件中代码
<form action="/struts222/upload/toupload" method="post" enctype="multipart/form-data"> <h2>选择文件:<input type="file" name="wedefine"/></h2> <input type="submit" value="上传文件"/> </form>
// action中代码
private File wedefine;// 注入文件对象 private String wedefineFileName;// 从jsp获取文件的名称:name属性+FileName public String execute() { String copyPath = "WEB-INF/"+wedefineFileName; copyPath = ServletActionContext.getServletContext().getRealPath(copyPath);// 新文件路径 File finalFile = new File(copyPath);// 创建新文件 System.out.println("创建文件路径"+copyPath); if(!finalFile.exists()){ try { finalFile.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } boolean flag = FileUtil.copyFile(wedefine, finalFile); if(flag) return "upsuccess"; else return "upunsuccess"; } public File getWedefine() { return wedefine; } public void setWedefine(File wedefine) { this.wedefine = wedefine; } public String getWedefineFileName() { return wedefineFileName; } public void setWedefineFileName(String wedefineFileName) { this.wedefineFileName = wedefineFileName; }