一,struts2是什么?

  struts2是一个控制框架,相当于连接底层和显示层,控制页面和数据展示

二,为什么用struts2?

  jsp+javabean模式:jsp里的小脚本java代码太多,页面杂乱  

  jsp+servlet+javabean模式:servlet和jspAPI强耦合,代码复用率低

  jsp+struts2+javabean模式: 把servlet进行了封装,使用拦截器拦截请求,使用结果视图进行响应

三,struts2怎么用?

  1.导入框架所需的包,软件默认在web-info下添加全局过滤器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7.  
  8. <display-name></display-name>
  9.  
  10. <!-- 首页配置 -->
  11. <welcome-file-list>
  12. <welcome-file>index.jsp</welcome-file>
  13. </welcome-file-list>
  14.  
  15. <!-- struts配置 -->
  16. <filter>
  17. <filter-name>struts2</filter-name>
  18. <filter-class>
  19. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  20. </filter-class>
  21. </filter>
  22. <filter-mapping>
  23. <filter-name>struts2</filter-name>
  24. <url-pattern>/*</url-pattern>
  25. </filter-mapping>
  26.  
  27. </web-app>

  2.编写action类,【继承ActionSupport】

  1. package com.action;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8.  
  9. import org.apache.commons.io.IOUtils;
  10. import org.apache.struts2.ServletActionContext;
  11.  
  12. import com.bean.User;
  13. import com.dao.IUserDao;
  14. import com.dao.impl.UserDaoImpl;
  15. import com.opensymphony.xwork2.ActionSupport;
  16. import com.opensymphony.xwork2.ModelDriven;
  17.  
  18. public class UserAction extends ActionSupport implements ModelDriven<User>{
  19.  
  20. //文件上传
  21. private File file;
  22. private String fileContentType;
  23. private String fileFileName;
  24.  
  25. public File getFile() {
  26. return file;
  27. }
  28. public void setFile(File file) {
  29. this.file = file;
  30. }
  31. public String getFileContentType() {
  32. return fileContentType;
  33. }
  34. public void setFileContentType(String fileContentType) {
  35. this.fileContentType = fileContentType;
  36. }
  37. public String getFileFileName() {
  38. return fileFileName;
  39. }
  40. public void setFileFileName(String fileFileName) {
  41. this.fileFileName = fileFileName;
  42. }
  43.  
  44. //数据接收
  45. private User u;
  46.  
  47. public User getU() {
  48. return u;
  49. }
  50. public void setU(User u) {
  51. this.u = u;
  52. }
  53. @Override
  54. public User getModel() {
  55. if(this.u==null){
  56. this.u=new User();
  57. }
  58. return this.u;
  59. }
  60.  
  61. public String add(){
  62.  
  63. //保存文件
  64. String path = ServletActionContext.getServletContext().getRealPath("/upload/");
  65. File dir=new File(path);
  66. if(!dir.exists()){
  67. dir.mkdirs();
  68. }
  69. try {
  70. FileInputStream input=new FileInputStream(file);
  71. FileOutputStream output=new FileOutputStream(path+"/"+fileFileName);
  72. IOUtils.copy(input, output);
  73. input.close();
  74. output.close();
  75. } catch (FileNotFoundException e) {
  76. // TODO Auto-generated catch block
  77. e.printStackTrace();
  78. } catch (IOException e) {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. }
  82.  
  83. //调用数据接口,添加数据库
  84. IUserDao iud = new UserDaoImpl();
  85. this.u.setPhoto(fileFileName);
  86. Integer result = iud.addUser(u);
  87. if(result>-1){
  88. System.out.println("添加成功!");
  89. }else{
  90. System.out.println("添加失败!");
  91. }
  92.  
  93. return SUCCESS;
  94. }
  95.  
  96. }

  3.在struts.xml中注册action和相应的结果视图

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
  3. <struts>
  4. <!-- 设置上传文件大小 -->
  5. <constant name="struts.multipart.maxSize" value="10000000"></constant>
  6.  
  7. <package name="test" namespace="/" extends="struts-default">
  8.  
  9. <action name="*_*" class="com.action.{1}Action" method="{2}">
  10. <!-- 拦截器指定文件大小 -->
  11. <interceptor-ref name="fileUpload">
  12. <param name="maximumSize">10000000</param>
  13. </interceptor-ref>
  14. <interceptor-ref name="defaultStack"/>
  15.  
  16. <result name="success">success.jsp</result>
  17. </action>
  18.  
  19. <!-- 文件上传测试 -->
  20. <action name="Uplod" class="com.action.UploadAction">
  21. <!-- 拦截器指定文件大小 -->
  22. <interceptor-ref name="fileUpload">
  23. <param name="maximumSize">10000000</param>
  24. </interceptor-ref>
  25. <interceptor-ref name="defaultStack"/>
  26.  
  27. <result name="success">success.jsp</result>
  28. </action>
  29.  
  30. </package>
  31.  
  32. </struts>

struts常用知识的更多相关文章

  1. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  2. javascript常用知识点集

    javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...

  3. AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)

    AngularJS常用知识汇总(不断更新中....) 注:请点击此处进行充电! app.controller('editCtrl',['$http','$location','$rootScope', ...

  4. 打造自己的Android常用知识体系

    前言 Android常用知识体系是什么鬼?所谓常用知识体系,就是指对项目中重复使用率较高的功能点进行梳理.注意哦,不是Android知识体系. 古语道:学而不思则罔,思而不学则殆.如果将做项目类比为“ ...

  5. jQuery常用知识总结

    jQuery常用知识总结 简介 选择器 属性操作 jQuery() each event事件 jQuery扩展 一.简介 What is jQuery jQuery is fast small and ...

  6. Python数据分析与挖掘所需的Pandas常用知识

    Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...

  7. Oracle常用知识小总结

    永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! Oracle常用知识小总结 1. 创建自增主键 对于习惯了SQL SERVER的图形化界面操作的SQLer,很长一段时间不用oracle ...

  8. php常用知识集锦

    php常用知识集锦 很多位置都有写好的代码,自己做项目的时候可以直接拿来用,而不用自己写,比如现在看到的菜鸟教程. 1.判断是否为空 empty($_POST["name"]) 2 ...

  9. javascript常用知识汇总

    javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...

随机推荐

  1. webpack环境搭建开发环境,JavaScript面向对象的详解,UML类图的使用

    PS:因为所有的设计模式都是基于面向对象来完成的,所以在讲解设计模式之前先来过一下面向对象都有哪些知识点 搭建开发环境 初始化npm环境 下载安装nodejs安装即可,nodejs自带npm管理包,然 ...

  2. AngularJS 自定义指令directive 介绍

    --------------------------------------------------------------------------- 指令的作用是把我们自定义的语义化标签替换成浏览器 ...

  3. Django的时区设置问题

    1.Django的时区问题 django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题.之前程序在测试时是运行 ...

  4. Linux下安装PHP并在nginx服务器中进行配置的详细方法

    先介绍一下使用的环境:centos 7.4, PHP 7.0 , nginx 1.12 Linux系统版本可以通过命令:lsb_release -a 查看. 现在开始步入正题了! 1.  首先查看一下 ...

  5. [Python 多线程] Barrier (十一)

    Barrier 栅栏,也叫屏障.可以想象成路障.道闸. Python 3.2引入的新功能. 构造方法: threading.Barrier(parties, action=None, timeout= ...

  6. JDK(五)JDK1.8源码分析【集合】HashMap

    本文转载自无始无终,原文连接 HashMap 在 JDK 1.8 后新增的红黑树结构 传统 HashMap 的缺点 JDK 1.8 以前 HashMap 的实现是 数组+链表,即使哈希函数取得再好,也 ...

  7. PAT——1046. 划拳

    划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...

  8. HDU 1561 The more, The Better(树形dp之树形01背包)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1561 The more, The Better Time Limit: 6000/2000 MS (J ...

  9. HDU 1233 还是畅通工程(Kruskal算法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)   ...

  10. Http请求发送json数据用实体类接收

    以上是请求URL以及json数据 接收层