收藏 分享(赏)

SSH学习笔记.doc

上传人:HR专家 文档编号:11423517 上传时间:2020-04-19 格式:DOC 页数:46 大小:685.50KB
下载 相关 举报
SSH学习笔记.doc_第1页
第1页 / 共46页
SSH学习笔记.doc_第2页
第2页 / 共46页
SSH学习笔记.doc_第3页
第3页 / 共46页
SSH学习笔记.doc_第4页
第4页 / 共46页
SSH学习笔记.doc_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、SSH学习笔记王利江2012年7月461. Struts141.1 TCP/IP协议组41.2 术语和缩写词41.3 遵循的标准42. Struts252.1struts2优点52.2开发struts2最少需要的jar文件52.3 struts2的处理流程62.4 struts2的struts.xml配置文件62.4.1 action配置项62.4.2 struts2常量82.4.3指定多个配置文件92.5 接受请求参数92.5.1基本类型请求参数92.5.2复合类型请求参数92.5.3版本2.1.6中午参数乱码问题102.6类型转换器102.6.1局部类型转换器102.6.2全局类型转换器1

2、12.7访问添加属性112.8文件上传122.8.1单文件上传122.8.2多文件上传132.9自定义拦截器152.10输入校验162.10.1输入校验流程162.10.2手工编码实现162.10.3基于XML配置方式实现182.11国际化212.12OGNL表达式232.13常用标签262.14防止表单重复提交293. Spring313.1实例化313.1.1 spring容器实例化313.1.2 bean实例化313.1控制反转IOC323.1.2个人令牌版324. Hibernate334.1安装配置333.1.2个人令牌版335. Ibatis344.1正则表达式343.1.2个人令

3、牌版346. Thread多线程356.1创建线程的两种方式356.1.1继承Thread类356.1.2实现Runnable接口356.2互斥与同步通讯366.3ThreadLoacl类376.4多个线程访问共享对象和数据的方式386.5线程池406.x练习题407. AJAX437.1使用dom方式开发ajax实例437.1.1返回格式为Text文本437.1.2返回格式为XML格式数据457.2使用dom方式开发ajax实例461. Struts11.1 TCP/IP协议组TCP/IP是一组在Internet网络上不同计算机之间进行通信的协议群,它是由TCP(传输控制协议)、IP(Int

4、ernet协议)、UDP(用户数据报协议)、HTTP(超文本传输协议)、FTP(文件传输线协议)、SMTP(简单邮件传输协议)等一系列协议组成。它们从下往上可以分为四层结构:l 物理层(以太网、令牌环、X.25等)l 网络层(IP协议)l 传输层(TCP协议、UDP协议)l 应用层(HTTP协议、FTP协议、SMTP协议等)从一台计算机发往另一台计算机的数据都是按以下顺序发送和接收的:发送数据的计算机先将数据传到应用层,由上往下传送,数据经过每一层时,所使用的协议都给数据加上一个协议头,然后将加上协议头的数据传到下一层,下一层所使用的协议在给它加上一个协议头,继续向下传递,最有由物理层经硬件设

5、备发送到网络上。接收数据的计算机则相反,数据时由下往上传递,每经过一层都剥去相应的协议头,然后继续向上传递。最后传递给用户的数据是剥去所有协议头的数据,即原始数据。假设你的浏览器想从网路上运行的WEB服务器上获取数据,它先将一个HTTP请求发送到TCP层,加上一个TCP端口地址后发往IP层,IP层在给它加上一个IP地址,通过物理层将此请求发往网络上指定的计算机。在接收数据的一方,每层都剥去相应的地址信息,然后决定下一步该做什么。物理层在接收到消息后,将数据发往IP层,IP层发现这是一个包,将剥去IP头的数据发往TCP层,TCP层再将剥去TCP头的数据发送给计算机上运行的HTTP服务代理,HTT

6、P代理根据这个请求进行相应的处理,然后再将结果按照相应的路径返回给请求者。1.2 术语和缩写词无。1.3 遵循的标准 本文档遵循宇新数据科技有限公司需求分析说明书编写规范。2. Struts22.1struts2优点和struts1 相比,struts2优点列举如下:n 在软件设计上struts2没有像struts1那样Servlet API和Struts API有着紧密的耦合,struts2的应用可以不依赖于Servlet API和Struts API,属于无侵入式设计,而struts1属于侵入式设计。n Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。n S

7、truts2提供了类型转换器,可以把特殊的请求参数转换为需要的类型。n Struts2提供支持多种表现层技术,如:jsp、freeMarker、velocity等n Struts2的输入校验可以对指定的方法进行校验n 提供了全局范围、包范围和action范围的国际化资源文件管理实现2.2开发struts2最少需要的jar文件n Struts 2.1.6 和struts2.1.8l Struts2-core-2.x.x.jar:struts2框架的核心类库。l Xwork-2.x.x.jar:xwork类库,struts2在其基础上构建。l Ognl.2.6.x.jar:对象图导航语言(Obje

8、ct Graph Navigation Language),struts2通过其读写对象属性。l freeMarker-2.3.x.jar:Struts2的UI标签模板使用freeMarker编写l commons-logging-1.1.x.jar:ASF出品的日志包,struts2框架用这个日志包来支持Log4j和JDK 1.4+的日志记录l commons-fileupload-1.2.1.jar:文件上传组件,2.1.6以后版本必须加入该组件n Struts 2.3.4l Struts2-core-2.x.x.jar:struts2框架的核心类库。l Xwork-2.x.x.jar:x

9、work类库,struts2在其基础上构建。l Ognl.2.6. x.jar:对象图导航语言(Object Graph Navigation Language),struts2通过其读写对象属性。l freeMarker-2.3.x.jar:Struts2的UI标签模板使用freeMarker编写l commons-logging-1.1.x.jar:ASF出品的日志包,struts2框架用这个日志包来支持Log4j和JDK 1.4+的日志记录l commons-fileupload-1.2.1.jar:文件上传组件,2.1.6以后版本必须加入该组件l javassist-3.11.0.GA

10、.jarl commons-lang3-3.1.jarl commons-io-2.0.1.jar2.3 struts2的处理流程StrutsPrepareAndExecuteFilter是struts2框架的核心控制器,它负责拦截友/*指定的所有用户请求,当用户请求到达时,该Filter会过滤用户请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入struts2框架进行处理,否则struts2框架将略过该请求的处理。当请求转入struts2框架处理时会先经过一系列拦截器,然后再到action。与struts1不同,struts2对用户的每次请求都会创建一

11、个action,所以struts2中的action是线程安全的。2.4 struts2的struts.xml配置文件2.4.1 action配置项n action名称的搜索顺序URL:http:/lserver/struts2/path1/ path2/ path3/helloworld.actionl 步骤一:首先寻找namespace为/path1/ path2/ path3的package,如果不存在这个package则执行步骤二,如果存在这个package则在这个package中寻找名字为helloworld的action,如果找不到action就会直接跑到默认namespace(默认

12、命名空间为空字符串“”),如果默认命名空间的package中还找不到,页面提示找不到actionl 步骤二:寻找namespace为/path1/ path2的package,如果不存在这个package则执行步骤三,如果存在这个package则在这个package中寻找名字为helloworld的action,如果找不到action就会直接跑到默认namespace(默认命名空间为空字符串“”),如果默认命名空间的package中还找不到,页面提示找不到actionl 步骤三:寻找namespace为/path1的package,如果不存在这个package则执行步骤四,如果存在这个pack

13、age则在这个package中寻找名字为helloworld的action,如果找不到action就会直接跑到默认namespace(默认命名空间为空字符串“”),如果默认命名空间的package中还找不到,页面提示找不到actionl 步骤四:寻找namespace为/的package,如果存在这个package则在这个package中寻找名字为helloworld的action,当在package中找不到action或者不存在这个package时,都会去默认namespace的package中寻找action,如果还找不到,页面提示找不到actionn action配置项的默认值/WEB-

14、INF/page/employeeAdd.jspl 如果没有为action指定class,默认是ActionSupportl 如果没有为action指定method,默认执行action的execute()方法l 如果没有指定result的name属性,默认执行successn action的result常用配置项l dispactcher :默认值,请求转发,类似于struts1中forwardl redirect:请求重定向/index.jsp?username=$usernamel redirectAction:将请求重定向到其它actionhelloworld如果重定向到其他packa

15、ge中的action,需要为redirectAction注入两个参数:其他package的命名空间和action名称,如: actionName/namespace l plaintext:显示原始文件内容/index.jsp当原始文件内容包含特殊编码的字符,如果需要正常显示原文件内容,需要为plainText注入两个参数:原始文件路径location和使用的字符集charSet,如:/index.jspUTF-8n 为action类的属性注入参数/inmages/WEB-INF/page/hello.jspn 动态方法调用动态方法调用方式为:actionName!method.action,

16、如:helloworld!addUI.actionn 使用通配符employee/WEB-INF/page/hello.jsp1表示“list_*”中的第一个*代表的字符串。在访问的时候使用list_addUI表示是访问action名称为list的addUI方法2.4.2 struts2常量n struts2常量的加载顺序struts-default.xmlstruts-plugin.xmlstruts.xmlstruts.propertiesweb.xml如果在多个文件中都配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值。n 常用的struts2常量l 指定默认编码集

17、,作用于HttpServletRequest的setCharacterEncoding方法和freeMarker、velocity的输出编码:l 指定struts2处理请求的后缀,该属性默认值为action,即所有匹配*.action的请求都由struts2负责处理,如果用户需要指定多个请求后缀,则在多个请求后缀之间用英文逗号分隔。也可以设置同时处理多个action后缀,value值用“,”分割即可,如下:l 设置浏览器是否缓存静态内容,默认值为true(生产环境使用),开发环境建议关闭。l 当struts2配置文件修改后,系统是否自动加载该文件,默认值为false(生产环境使用),开发阶段建

18、议打开。l 开发模式下使用,可以打开更详细的错误信息。l 默认的视图主题l 与spring集成时,指定由spring负责action的创建备注:2.3.4版本有变化l Struts2是否支持动态方法调用,默认值为true,如要关闭动态方法调用,可以设置为falsel 上传文件大小限制2.4.3指定多个配置文件2.5 接受请求参数2.5.1基本类型请求参数在action类中定义与请求参数同名的属性,struts2便能自动接受请求参数并赋予给同名属性。请求路径为:http:/localhost:8080/struts2/control/employee/product.do?id=12345pub

19、lic class ProductAction private Integer id;public Integer getId() return id;/Struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数的值public void setId(Integer id) this.id = id;Form使用举例:id:name:2.5.2复合类型请求参数请求路径为:http:/localhost:8080/struts2/control/employee/product.do?pd.id=12345public class ProductAction privat

20、e Product product;public Product getProduct) return product;public void setProduct (Product product) this. product = product;Struts2首先通过反射技术调用Product的默认构造器创建product对象,然后再通过反射技术调用product中与请求参数同名的属性的setter方法来获取请求参数值。Form使用举例:id:name:2.5.3版本2.1.6中午参数乱码问题2.6类型转换器自定义类型转换器需要实现struts2的类型转换器类DefaultTypeConv

21、erter,并重写该类的convertValue方法:如下public class DateTypeConverter extends DefaultTypeConverter Overridepublic Object convertValue(Map context, Object value,Class toType) SimpleDateFormat dateFormat = new SimpleDateFormat(yyyyMMdd);try if (toType = Date.class) String params = (String) value;/ request.getPa

22、rameterValues();System.out.println(StringToDate = +params.length);System.out.println(StringToDate = +params0);System.out.println(StringToDate = +dateFormat.parse(params0);return dateFormat.parse(params0); else if (toType = String.class) Date date = (Date) value;System.out.println(DateToString = +dat

23、eFormat.format(date);return dateFormat.format(date); catch (ParseException e) e.printStackTrace();return null;2.6.1局部类型转换器将DateTypeConverter注册为局部类型转换器:在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是action的类名,后面的-conversion.properties是固定写法,如:文件名称为HelloWordAction-conversion.pro

24、perties,在properties文件中的内容为:属性名称=类型转换器的全类名 例如,对HelloWordAction的private Date birthday;字段进行转换为:birthday=com.spring.type.converter. DateTypeConverter2.6.2全局类型转换器将DateTypeConverter注册为全局类型转换器:在WEB-INF/classes下放置xwork-conversion.properties文件,在properties文件中的内容为:待转换的类型=类型转换器的全类名,即为:java.util.Date=com.spring.

25、type.converter. DateTypeConverter2.7访问添加属性访问或添加request/session/application属性n 方式一:使用struts2的ActionContext类,使用如下:public String execute() throws Exception ActionContext ctx = ActionContext.getContext();ctx.getApplication().put(app, 应用范围);ctx.getSession().put(ses, session范围);ctx.put(res, request范围);ret

26、urn success;JSP中使用如下:$applicationScope.app$sessionScope.ses$requestScope.resn 方式二:使用struts2的servletActionContext类,获取HttpServletRequest、HttpSession、ServletContext、HttpServletResponse等对象引用,然后通过setAttribute方法设置属性值。public String rsa() throws Exception HttpServletRequest request = ServletActionContext.ge

27、tRequest();ServletContext context = ServletActionContext.getServletContext();HttpSession session = request.getSession();HttpServletResponse response = ServletActionContext.getResponse();request.setAttribute(req, 请求范围属性);context.setAttribute(app, 应用范围属性);session.setAttribute(ses, 会话范围范围);request.setA

28、ttribute(names, Arrays.asList(张三,李斯,王五);return success;JSP中使用如下:/引入jstl标签库,需要导入standard.jar和jstl.jar文件$applicationScope.app$sessionScope.ses$requestScope.res$namen 方式三:实现ServletRequestAware、ServletResponseAware、ServletContextAware接口,由struts2框架运行时注入。public class HelloWorldAction implements ServletCon

29、textAware,ServletRequestAware, ServletResponseAware private HttpServletRequest request;private HttpServletResponse response;private ServletContext context;Overridepublic void setServletResponse(HttpServletResponse response) this.response = response;Overridepublic void setServletRequest(HttpServletRe

30、quest request) this.request = request;Overridepublic void setServletContext(ServletContext context) this.context = context;public String execute() throws Exception this.request.setAttribute(req, 请求范围属性);this.context.setAttribute(app, 应用范围属性);HttpSession session = this.request.request.getSession(); s

31、ession.setAttribute(ses, 会话范围范围);return success;2.8文件上传2.8.1单文件上传n 第一步:在WEB-INF/lib下加入commons-fileupload-1.2.2.jar、commons-io-2.0.1.jarn 第二步:把form表的的enctype设置为“multipart/form-data”,如下:n 第三步:在action类中添加属性名称public class FileuploadAction private File image;/得到上传文件private String savePath;/文件保存路径/struts2

32、默认命名规则:文件属性名称 + FileName/ContentTypeprivate String imageFileName;/得到上传文件名称,private String imageContentType;/得到上传文件类型public String execute() throws Exceptionif(image = null)return fileupload;String realPath = ServletActionContext.getServletContext().getRealPath(savePath);File saveFile = new File(new

33、File(realPath), imageFileName);if(!saveFile.getParentFile().exists()saveFile.getParentFile().mkdirs();FileUtils.copyFile(image, saveFile);ActionContext.getContext().put(message, 文件上传成功);return success;public File getImage() return image;public void setImage(File image) this.image = image;public Stri

34、ng getSavePath() return savePath;public void setSavePath(String savePath) this.savePath = savePath;public String getImageFileName() return imageFileName;public void setImageFileName(String imageFileName) this.imageFileName = imageFileName;public String getImageContentType() return imageContentType;p

35、ublic void setImageContentType(String imageContentType) this.imageContentType = imageContentType;n 第四步:配置action属性/设置上传文件大小为10M,struts2默认为2M/配置上传action类/images/WEB-INF/page/massage.jsp2.8.2多文件上传n 第一步:在WEB-INF/lib下加入commons-fileupload-1.2.2.jar、commons-io-2.0.1.jarn 第二步:把form表的的enctype设置为“multipart/form-data”,如下:文件1:文件2:文件3: n 第三步:在action类中添加属性名称public class FileuploadAction private File image;/得到上传文件private String savePath;/文件保存路径/struts2默认命名规则:文件属性名称 + FileName/ContentTypeprivate String imageFileName;/得到上传文件名称,private String imageContentType;/得到上传文件类型public String execu

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报