2022年java学习基础知识3.docx
名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -Struts相关拜访 Servlet API (拜访 request ,session ,application 作用域)1、使用 ActionContext 拜访/* /1、解耦方式实现跟 servlet交互* Map<String,Object>session=ActionContext.getContext * .getSession; session.put"username",user.getUsername;*/2 、耦合方式实现跟 servlet 交互HttpServletRequest request = ServletActionContext.HttpSession session = request.getSession; session.setAttribute "username" , username ; 在页面中猎取 session 中的值getRequest ; 欢迎您, <s:propertyvalue ="#session.username"/>在 action 中标签/1 、通过属性猎取表单内容/ 与login.jsp 中表单的名字相对应/ 假如有 setter 方法的属性,就可以从页面猎取相应的值(从JSP页面获取值)/ 假如有 getter 方法的属性,就可以在页面猎取相应属性的值(想 JSP页面发送值)private String username ; private String password ; public void setUsernameString username this . username = username; public void setPasswordString password this . password = password; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - / 测试 <s:set 标签>private String china ; public String getChina return china ; 在 login.jsp中value ="china"></ s:set><.- 取的是 action中china<s:setname="country1"变量的值 -><s:setname="country2"value ="'china'"></ s:set><.- 直接赋值->country1:<s:propertyvalue ="#request.country1"/>< br >country2:<s:propertyvalue ="#request.country2"/> 2、类型转换3、数据校验方法 1 在相应的类型中直接验证1、public String login /*/ 数据校验方法 1在相应的类中直接验证ifnull=username|username.length=0 this.addFieldError"username", " ifnull=password|password.length=0用户名不能为空 "this.addFieldError"password", " 密码不能为空 " / 相当于 request.setAttribute "err" , " 添加失败 " ifhasErrors假如在 fieldError中有错,就返回 fail 否就return "fail"/执行其他else / 登录相关2、在相应界面输出信息/2.1输出全部错误把全部 fieldError中全部错误信息显示出来 -> 第 2 页,共 11 页 <s:fielderror><.- 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -</ s:fielderror > /2.2输出单个错误="username" ><.- 输出单个错误 username 信息<s:fielderrorfieldName-></ s:fielderror>方法 2 重写 validate方法实现验证调用 action 的任务方法时,validate 肯定会执行/ 数据校验方法 2重写 validate 方法实现验证Overridepublic void validate 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="success"type ="redirectAction">deptAction</ result<resultname="fail">login.jsp</ result> /name= “ input ” 自定义或重写 validate方法会默认返回“input”<resultname="input">login.jsp</ result> 3、在相应界面输出信息<s:fielderror><. - 会把全部 fieldError中全部错误信息显示出来 -></ s:fielderror>方法 3 自定义方法1、自定义方法会先加载(执行)/ 数据校验方法 3自定义方法(自定义方法会先加载)public void validateLogin System. out .println "$" ; if null =password | password .length=0 this .addFieldError "password" , " 密码不能为空 " ; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -2、3、同上方法 4 使用验证框架实现验证1、2、3、在 action 目录下建相应的 actionname 相同的验证文件 UserAction-validation.xml <validators>假如是 非空验证<field name="username" ><.- 要与页面猎取该属性的名字一样通过属性猎取表单内容的话就要添加相应的 getter 方法 -><field-validatortype ="requiredstring"><.- type-><param name="trim"></ param ><message key =" 用户名不能为空 " /></ field-validator ></ field ><field name="password" ><field-validator type ="requiredstring" ><param name="trim" ></ param ><message key =" 密码不能为空 " /></ field-validator></ field></ validators>4、编写验证规章5、jsp 页面显示<s:fielderror><.- 把全部 fieldError中全部错误信息显示出来 -></ s:fielderror> 4、拦截器与文件上传1、新建拦截器类 / 拦截器MyInterceptor.java Overridethrowspublic String interceptActionInvocation invocation Exception / 执行之前的操作细心整理归纳 精选学习资料 long previous=new Date.getTime; 第 4 页,共 11 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -System. out .printlnprevious; / 将恳求交给下一个操作String result=invocation.invoke; / long next =new Date.getTime; System. out .printlnnext; System. out .println" 执行 Action 一共用时: " ; System. out .printlnnext-previous; return result; 2、在 struts.xml 中配置拦截器2.1 配置并使用单个拦截器2.1.1 配置单个拦截器<interceptors ><interceptor name="myInterceptor" class ="com.jbit.fsd.web.interceptor.MyInterceptor" ></ interceptor ></ interceptors > 2.1.2 <.- 使用单个拦截器 -> <interceptor-ref name="myInterceptor"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref>2.2 配置并使用拦截器栈(多个拦截器)<.- 配置拦截器 , 列出全部的拦截器 -> 第 5 页,共 11 页 - - - - - - - - - <interceptors><interceptorname="myInterceptor"class ="com.jbit.fsd.web.interceptor.MyInterceptor"></ interceptor><.- 配置拦截器栈 -><interceptor-stackname="myDefault"><interceptor-refname="myInterceptor"></ interceptor-ref><interceptor-refname="defaultStack"></ interceptor-ref></ interceptor-stack>细心整理归纳 精选学习资料 - - - - - - - - - - - - - - -名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -</ interceptors ><.- 配置默认拦截器全部 action调用的时候都会使用拦截器 -><default-interceptor-refname="myDefault"></ default-interceptor-ref> 3、在 xml 中想应的action 中使用拦截器<actionname="*User"class ="com.jbit.fsd.action.UserAction">deptActimethod ="1"><resultname="success"type ="redirectAction"on</ result><resultname="fail">login.jsp</ result><.- 恳求验证相关 -><resultname="input">login.jsp</ result><.- 拦截器相关一下是两个拦截器 -><.- 使用单个拦截器<interceptor-ref name="myInterceptor"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref> -><.- 使用拦截器栈 -><interceptor-ref name="myDefault" ></ interceptor-ref ></ action > 4、假如设置了登录验证的拦截器,那么可以在其他相应的 action 中,配置该拦截器,这样就能实现不登录就不能拜访该 action 4、文件上传及下载1、配置拦截器 / 2、jsp 页面<body ><formaction="doUpload"enctype ="multipart/form-data" 第 6 页,共 11 页 method ="post">name="upload"><inputtype ="file"细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -<inputtype ="submit"value =" 提交 " ></ form ><a href ="fileUpload/445.bmp" >下载文件 </ a><br ><a href ="downLoad.fileName=445.bmp" </ body > 3、struts.xml 相关<.- 文件上传相关 -> <action name="doUpload">下载文件 </ a>class ="com.jbit.fsd.action.deptAction" method ="doUpload" ><param name="savePath" >fileUpload </ param><result >success.jsp </ result ><.- <interceptor-ref name="fileUpload"></interceptor-ref> -><interceptor-refname="defaultStack" ></ interceptor-ref ></ action ><.- 文件下载相关 -><action name="downLoad"class ="com.jbit.fsd.action.deptAction"method ="downLoad" ><paramname="savePath">fileUpload</ param>中(页<resultname="success"type ="stream"><paramname="contentType">application/octet-stream</ param><paramname="inputName">inputStream</ param><.- filename="$fileName"中的 fileName 要与action面)定义的相同 -><paramname="contentdisposition">attachment;filename="$fileName"</ param><paramname="bufferSize">4096</ param ></ result></ action>4、在 action 中添加相应的方法上传/* * 文件上传细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - */private File upload ; / 与jsp 表单中的名字相同private String uploadContentType ; /File 对象属性名 +ContentTypeprivate String uploadFileName ; /File 对象属性名 +FileName/ 文件上传路径 getter 方法中要返回肯定路径 private String savePath ; / 文件上传方法public String doUpload throws IOException / 接收上传文件储存路径字符串(肯定路径 +“/ ”+ String fileSavePath=getSavePath+ "/" +uploadFileName ; / 假如想上传到指定路径的文件夹可以自定义如 d:/String fileSavePath="d:"+"/"+uploadFileName;/ 将上传过来的文件封装成输入流FileInputStream fis=new FileInputStreamupload ; / 将接收文件的字符串封装成输出流FileOutputStream fos= / 复制文件new FileOutputStreamfileSavePath; IOUtils. copy fis, fos; / 刷新操作 fos.flush; / 关闭资源 fis.close; fos.close; return"success" /setter getter 方法留意这个 getSavePath 方法返回值需要设置public String getSavePath / 得到肯定路径(服务器中的肯定路径)returnServletActionContext.getServletContext.getRealPathsavePath ; 下载/ 实现文件下载细心整理归纳 精选学习资料 private String fileName; ; 第 8 页,共 11 页 private InputStream inputStream - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -public String downLoad return"success" /setter getter 方法留意这个方法public InputStream getInputStream throws FileNotFoundException / 得到路径(返回的是输入流)returnnew BufferedInputStream "/"+fileName new FileInputStreamgetSavePath+; jQuery 常用插件北大青鸟 学习资料 Struts&AJAX5. 第 5 章-Struts 2 与 jQuery 综合应用 Part1jQuery 插件和easyUI 使用 Json与 jQuery 实现 Ajax 1、在 XMl 中设置 action 的返回数据假如只想返回部分属性,就需要将2、通过 jQuery 等来实现 Ajax param 的 name 属性值设置为如图即可;细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 11 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -Spring 相关1、写接口及实现类eg:publicclass UserServiceImpl implements UserService / 声明需要注入值的属性/ 不new对象,由 Spring 容器调用 set 方法赋值private UserDao userDao ; private String name; 添加 setter getter 方法public List getAll / TODO Auto-generated method stubSystem. out .println name; return userDao .getAll; 2、创建 Xml 配置文件留意路径( src 下) srcapplicationContect.xml <. bean标签中 id 属性值任凭写(一般写实现类的接口名);相应的实现类的全路径 ->class 属性为<bean id ="userDao"class ="com.jbit.fsd.dao.impl.UserDaoImpl细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -" ></ bean ><bean id ="userService" rServiceImpl" > class ="com.jbit.fsd.service.impl.Use<.- 假如需要对 bean 中的属性注入值,就需要 property 标签 -> <.- property name 属性的值为实现类中要注入值的属性名 -><property name="userDao" ><.- 假如property 中name是String 等类型的话可以用 value= 赋值 假如为对象类型的话,就要用 ref 赋值 -><ref bean="userDao" ></ ref ></ property > <.- 给userserviceImpl 中的 name属性赋值 也可以在两个 property 中加 value 标签赋值 -><property name="name" value ="admin" > <.-也可以这样写 <value>admin</value> -></ property ></ bean> 3、测试类ApplicationContext ac=new ClassPathXmlApplicationContext"appli ; cationContect.xml" UserService us=UserService ac.getBean"userService"List list=us.getAll; System. out .printlnlist.get0;细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 11 页 - - - - - - - - -