struts常用知识
一,struts2是什么?
struts2是一个控制框架,相当于连接底层和显示层,控制页面和数据展示
二,为什么用struts2?
jsp+javabean模式:jsp里的小脚本java代码太多,页面杂乱
jsp+servlet+javabean模式:servlet和jspAPI强耦合,代码复用率低
jsp+struts2+javabean模式: 把servlet进行了封装,使用拦截器拦截请求,使用结果视图进行响应
三,struts2怎么用?
1.导入框架所需的包,软件默认在web-info下添加全局过滤器
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name></display-name>
- <!-- 首页配置 -->
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <!-- struts配置 -->
- <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>
- </web-app>
2.编写action类,【继承ActionSupport】
- package com.action;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import org.apache.commons.io.IOUtils;
- import org.apache.struts2.ServletActionContext;
- import com.bean.User;
- import com.dao.IUserDao;
- import com.dao.impl.UserDaoImpl;
- import com.opensymphony.xwork2.ActionSupport;
- import com.opensymphony.xwork2.ModelDriven;
- public class UserAction extends ActionSupport implements ModelDriven<User>{
- //文件上传
- private File file;
- private String fileContentType;
- private String fileFileName;
- public File getFile() {
- return file;
- }
- public void setFile(File file) {
- this.file = file;
- }
- public String getFileContentType() {
- return fileContentType;
- }
- public void setFileContentType(String fileContentType) {
- this.fileContentType = fileContentType;
- }
- public String getFileFileName() {
- return fileFileName;
- }
- public void setFileFileName(String fileFileName) {
- this.fileFileName = fileFileName;
- }
- //数据接收
- private User u;
- public User getU() {
- return u;
- }
- public void setU(User u) {
- this.u = u;
- }
- @Override
- public User getModel() {
- if(this.u==null){
- this.u=new User();
- }
- return this.u;
- }
- public String add(){
- //保存文件
- String path = ServletActionContext.getServletContext().getRealPath("/upload/");
- File dir=new File(path);
- if(!dir.exists()){
- dir.mkdirs();
- }
- try {
- FileInputStream input=new FileInputStream(file);
- FileOutputStream output=new FileOutputStream(path+"/"+fileFileName);
- IOUtils.copy(input, output);
- input.close();
- output.close();
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //调用数据接口,添加数据库
- IUserDao iud = new UserDaoImpl();
- this.u.setPhoto(fileFileName);
- Integer result = iud.addUser(u);
- if(result>-1){
- System.out.println("添加成功!");
- }else{
- System.out.println("添加失败!");
- }
- return SUCCESS;
- }
- }
3.在struts.xml中注册action和相应的结果视图
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
- <struts>
- <!-- 设置上传文件大小 -->
- <constant name="struts.multipart.maxSize" value="10000000"></constant>
- <package name="test" namespace="/" extends="struts-default">
- <action name="*_*" class="com.action.{1}Action" method="{2}">
- <!-- 拦截器指定文件大小 -->
- <interceptor-ref name="fileUpload">
- <param name="maximumSize">10000000</param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"/>
- <result name="success">success.jsp</result>
- </action>
- <!-- 文件上传测试 -->
- <action name="Uplod" class="com.action.UploadAction">
- <!-- 拦截器指定文件大小 -->
- <interceptor-ref name="fileUpload">
- <param name="maximumSize">10000000</param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"/>
- <result name="success">success.jsp</result>
- </action>
- </package>
- </struts>
struts常用知识的更多相关文章
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
- javascript常用知识点集
javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...
- AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)
AngularJS常用知识汇总(不断更新中....) 注:请点击此处进行充电! app.controller('editCtrl',['$http','$location','$rootScope', ...
- 打造自己的Android常用知识体系
前言 Android常用知识体系是什么鬼?所谓常用知识体系,就是指对项目中重复使用率较高的功能点进行梳理.注意哦,不是Android知识体系. 古语道:学而不思则罔,思而不学则殆.如果将做项目类比为“ ...
- jQuery常用知识总结
jQuery常用知识总结 简介 选择器 属性操作 jQuery() each event事件 jQuery扩展 一.简介 What is jQuery jQuery is fast small and ...
- Python数据分析与挖掘所需的Pandas常用知识
Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...
- Oracle常用知识小总结
永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! Oracle常用知识小总结 1. 创建自增主键 对于习惯了SQL SERVER的图形化界面操作的SQLer,很长一段时间不用oracle ...
- php常用知识集锦
php常用知识集锦 很多位置都有写好的代码,自己做项目的时候可以直接拿来用,而不用自己写,比如现在看到的菜鸟教程. 1.判断是否为空 empty($_POST["name"]) 2 ...
- javascript常用知识汇总
javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...
随机推荐
- webpack环境搭建开发环境,JavaScript面向对象的详解,UML类图的使用
PS:因为所有的设计模式都是基于面向对象来完成的,所以在讲解设计模式之前先来过一下面向对象都有哪些知识点 搭建开发环境 初始化npm环境 下载安装nodejs安装即可,nodejs自带npm管理包,然 ...
- AngularJS 自定义指令directive 介绍
--------------------------------------------------------------------------- 指令的作用是把我们自定义的语义化标签替换成浏览器 ...
- Django的时区设置问题
1.Django的时区问题 django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题.之前程序在测试时是运行 ...
- Linux下安装PHP并在nginx服务器中进行配置的详细方法
先介绍一下使用的环境:centos 7.4, PHP 7.0 , nginx 1.12 Linux系统版本可以通过命令:lsb_release -a 查看. 现在开始步入正题了! 1. 首先查看一下 ...
- [Python 多线程] Barrier (十一)
Barrier 栅栏,也叫屏障.可以想象成路障.道闸. Python 3.2引入的新功能. 构造方法: threading.Barrier(parties, action=None, timeout= ...
- JDK(五)JDK1.8源码分析【集合】HashMap
本文转载自无始无终,原文连接 HashMap 在 JDK 1.8 后新增的红黑树结构 传统 HashMap 的缺点 JDK 1.8 以前 HashMap 的实现是 数组+链表,即使哈希函数取得再好,也 ...
- PAT——1046. 划拳
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
- 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 ...
- HDU 1233 还是畅通工程(Kruskal算法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) ...
- Http请求发送json数据用实体类接收
以上是请求URL以及json数据 接收层