Struts相关访问ServletAPI(访问request,session,application作用域)1、使用ActionContext访问/***//1、解耦方式实现跟servlet交互*MapString,Objectsession=ActionContext.getContext*().getSession();session.put(username,user.getUsername());*///2、耦合方式实现跟servlet交互HttpServletRequestrequest=ServletActionContext.getRequest();HttpSessionsession=request.getSession();session.setAttribute(username,username);在页面中获取session中的值欢迎您,s:propertyvalue=#session.username/在action中标签//1、通过属性获取表单内容//与login.jsp中表单的名字相对应//如果有setter方法的属性,则可以从页面获取相应的值(从JSP页面获取值)//如果有getter方法的属性,则可以在页面获取相应属性的值(想JSP页面发送值)privateStringusername;privateStringpassword;publicvoidsetUsername(Stringusername){this.username=username;}publicvoidsetPassword(Stringpassword){this.password=password;}//测试s:set标签privateStringchina;publicStringgetChina(){returnchina;}在login.jsp中s:setname=country1value=china/s:set!--取的是action中china变量的值--s:setname=country2value='china'/s:set!--直接赋值--country1:s:propertyvalue=#request.country1/brcountry2:s:propertyvalue=#request.country2/2、类型转换3、数据校验方法1在相应的类型中直接验证1、publicStringlogin(){/*//数据校验方法1——在相应的类中直接验证if(null==username||username.length()==0){this.addFieldError(username,用户名不能为空);}if(null==password||password.length()==0){this.addFieldError(password,密码不能为空);//相当于request.setAttribute(err,添加失败)}if(hasErrors()){returnfail;//如果在fieldError中有错,则返回fail否则执行其他}else{//登录相关}2、在相应界面输出信息//2.1输出所有错误s:fielderror!--把所有fieldError中所有错误信息显示出来--/s:fielderror//2.2输出单个错误s:fielderrorfieldName=username!--输出单个错误username信息--/s:fielderror方法2重写validate()方法实现验证调用action的任务方法时,validate()一定会执行//数据校验方法2——重写validate()方法实现验证@Overridepublicvoidvalidate(){System.out.println(@@@@@@@);if(null==username||username.length()==0){this.addFieldError(username,用户名不能为空);}if(null==password||password.length()==0){this.addFieldError(password,密码不能为空);}}2、在struts.xml中添加跳转页面resultname=successtype=redirectActiondeptAction/resultresultname=faillogin.jsp/result//name=“input”自定义或重写validate()方法会默认返回“input”resultname=inputlogin.jsp/result3、在相应界面输出信息s:fielderror!—-会把所有fieldError中所有错误信息显示出来--/s:fielderror方法3自定义方法1、自定义方法会先加载(执行)//数据校验方法3——自定义方法(自定义方法会先加载)publicvoidvalidateLogin(){System.out.println($$$$$);if(null==password||password.length()==0){this.addFieldError(password,密码不能为空);}}2、3、同上方法4使用验证框架实现验证1、2、3、在action目录下建相应的actionname相同的验证文件UserAction-validation.xmlvalidatorsfieldname=username!--要与页面获取该属性的名字一样如果是通过属性获取表单内容的话就要添加相应的getter方法--field-validatortype=requiredstring!--type非空验证--paramname=trim/parammessagekey=用户名不能为空//field-validator/fieldfieldname=passwordfield-validatortype=requiredstringparamname=trim/parammessagekey=密码不能为空//field-validator/field/validators4、编写验证规则5、jsp页面显示s:fielderror!--把所有fieldError中所有错误信息显示出来--/s:fielderror4、拦截器与文件上传1、新建拦截器类MyInterceptor.java//拦截器@OverridepublicStringintercept(ActionInvocationinvocation)throwsException{//执行之前的操作longprevious=newDate().getTime();System.out.println(previous);//将请求交给下一个操作Stringresult=invocation.invoke();//longnext=newDate().getTime();System.out.println(next);System.out.println(执行Action一共用时:);System.out.println(next-previous);returnresult;}2、在struts.xml中配置拦截器2.1配置并使用单个拦截器2.1.1配置单个拦截器interceptorsinterceptorname=myInterceptorclass=com.jbit.fsd.web.interceptor.MyInterceptor/interceptor/interceptors2.1.2!--使用单个拦截器--interceptor-refname=myInterceptor/interceptor-refinterceptor-refname=defaultStack/interceptor-ref2.2配置并使用拦截器栈(多个拦截器)!--配置拦截器,列出所有的拦截器--interceptorsinterceptorname=myInterceptorclass=com.jbit.fsd.web.interceptor.MyInterceptor/interceptor!--配置拦截器栈--interceptor-stackname=myDefaultinterceptor-refname=myInterceptor/interceptor-refinterceptor-refname=defaultStack/interceptor-ref/interceptor-stack/interceptors!--配置默认拦截器所有action调用的时候都会使用拦截器--default-interceptor-refname=myDefault/default-interceptor-ref3、在xml中想应的action中使用拦截器actionname=*Userclass=com.jbit.fsd.action.UserActionmethod={1}resultname=successtype=redirectActiondeptAction/resultresultname=faillogin.jsp/result!--请求验证相关--resultname=inputlogin.jsp/result!--拦截器相关一下是两个拦截器--!--使用单个拦截器interceptor-refname=myInterceptor/interceptor-refinterceptor-refname=defaultStack/interceptor-ref--!--使用拦截器栈--interceptor-refname=myDefault/interceptor-ref/action4、如果设置了登录验证的拦截器,那么可以在其他相应的action中,配置该拦截器,这样就能实现不登录就不能访问该action4、文件上传及下载1、配置拦截器/2、jsp页面bodyformaction=doUploadenctype=multipart/form-datamethod=postinputtype=filename=uploadinputtype=submitvalue=提交/formahref=fileUpload/445.bmp下载文件/abrahref=downLoad?fileName=445.bmp下载文件/a/body3、struts.xml相关!--文件上传相关--actionname=doUploadclass=com.jbit.fsd.action.deptActionmethod=doUploadparamname=savePathfileUpload/paramresultsuccess.jsp/result!--interceptor-refname=fileUpload/interceptor-ref--interceptor-refname=defaultStack/interceptor-ref/action!--文件下载相关--actionname=downLoadclass=com.jbit.fsd.action.deptActionmethod=downLoadparamname=savePathfileUpload/paramresultname=succe