Struts2学习笔记
来源:互联网 发布:360全景效果图软件 编辑:程序博客网 时间:2024/06/04 01:28
1. Struts2概念
struts:支柱、枝干,来源于建筑和旧式飞机使用的金属支架。
Struts在软件开发中,是一个非常优秀的框架。
Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。
使用Struts的目的是减少我们在运用MVC设计模型来开发Web应用的时间。
2. MVC模式
2.1 Model1:代码可维护性差
JSP+JavaBean=Model1
2.2 Model2:最典型的MVC
JSP+Servlet+JavaBean=Model2
3. 第一个Struts2例子
3.1 Struts2历史
3.2 搭建Struts2环境
3.2.1下载相关jar包
下载地址:
Apache Struts官方网站 http://struts.apache.org/
Struts历史包 http://people.apache.org/builds/sturts/
3.2.2 目录分析:
apps参考war包(5个)
docs文档包,包含struts核心API,插件API和xwork的API
lib是驱动包,比较多,根据自己选择进行匹配
src是源码包,可以之间看到java文件源码
3.2.3 具体步骤
/** * 第一个Struts2程序 * A:用eclipse实现 * 1.上Struts官网下载完整Struts包(导入lib下的9个包) * 2.创建web项目,配置web.xml文件 * 3.配置struts.xml文件 * 4.创建action类, * 5.在struts.xml中配置action * 6.启动测试 *B:用MyEclipse实现 * 1.创建web项目->选中项目右键->myeclipse->add struts capabilities(不要太简单) * 2.创建action类,并且启动测试 *//* * Struts2工作原理 * web.xml写配置一个过滤器(struts),所以用户请求都会经过该过滤器,但struts只过滤自己相关的请求(.action),其他请求就会放行 * 过滤器名称:StrutsPrepareAndExecuteFilter */public class HelloWorldAction extends ActionSupport { @Override public String execute() throws Exception { System.out.println("执行Action"); //就是一个(视图)路径 return SUCCESS; }}
web.xml
<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>*.action</url-pattern> </filter-mapping>
struts.xml
<?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> <package name="default" namespace="/" extends="struts-default"> <action name="helloworld" class="com.imooc.action.HelloWorldAction"> <result>/result.jsp</result> </action> </package></struts>
4. Struts2的工作原理及文件结构
4.1 工作原理(面试问的很多喔)
4.2 核心文件
4.2.1 web.xml
4.2.2 struts.xml
4.2.3 struts.properties
4.3 文件讲解
5. 深入讲解Struts2的用法
5.1 访问Servlet API
在Servelt中doGet()方法和doPost()的参数中包含了request、response,这就是servlet API。
但是,struts2中的action的execute方法中并没有servlet API,所以struts2怎么去访问Servlet API呢?
有三种方法:
1. ActionContext
2. 实现…Aware接口
3. ServletActionContext
5.2 Action搜索顺序
一级一级往上找
5.3 动态方法调用
动态方法调用是为了一个action类仅仅对应一个方法。
所以当一个action类里面有多个方法时,怎么调用特定的方法呢?可以用动态方法调用。
1. 为一个action类对应的配置文件设置多个action,每个action设置method属性(与action里的方法对应),从而实现调用特定的方法
<struts> <package name="default" namespace="/" extends="struts-default"> <action name="helloworld" class="com.imooc.action.HelloWorldAction"> <result>/result.jsp</result> </action> <action name="addAction" method="add" class="com.imooc.action.HelloWorldAction"> <result>/add.jsp</result> </action> <action name="updateAction" method="update" class="com.imooc.action.HelloWorldAction"> <result>/update.jsp</result> </action> </package></struts>
2 感叹号方式(不推荐使用)
3. 通配符方式(官方推荐)
花括号里的1解析第一个心号,2解析第二个心号
5.4 指定多个配置文件
使用include标签包含进去即可(防止主配置文件过于臃肿)
配置字符集
<constant name="strtus.i18n.encoding" values="utf-8"></constant>
5.5 默认Action
使用户体验更好
5.6 Struts2后缀
三个位置可以配置:struts.xml,struts.properties,web.xml
5.7 接收参数
5.7.1 使用action的属性接收参数
login.jsp(表单提交参数)
<body> <!-- 使用action的属性接受参数值 --> <form action="LoginAction.action" method="post"> 用户名:<input type="text" name="username"> 密码:<input type="password" name="password"> <input type="submit" value="提交"> </form></body>
LoginAction.action接收并输出来自表单的参数
public class LoginAction extends ActionSupport{ private String username ; private String password; public String login() { System.out.println(username); System.out.println(password); //... return SUCCESS; } //属性的get和set方法}
helloworld.xml配置action
<action name="LoginAction" method="login" class="com.imooc.action.LoginAction"> <result>/success.jsp</result> </action>
新建success.jsp
<body><h1>This is success.jsp.</h1></body>
5.7.2 DomainModel方法(把属性封装在对象里)
新建User.java
public class User { private String username ; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
login.jsp(表单提交参数)
<body> <!-- 使用action的属性接受参数值 --> <form action="LoginAction.action" method="post"> 用户名:<input type="text" name="user.username"> 密码:<input type="password" name="user.password"> <input type="submit" value="提交"> </form></body>
LoginAction.action接收并输出来自表单的参数
public class LoginAction extends ActionSupport{ User user ; public String login() { System.out.println(user.getUsername()); System.out.println(user.getPassword()); //... return SUCCESS; } pubilc void setUser(User user){ this.user=user; } public User getUser(){ return user; }}
5.7.3 使用ModelDriven方式接收参数(推荐使用)
login.jsp(表单提交参数),无需使用user.username了
<body> <!-- 使用action的属性接受参数值 --> <form action="LoginAction.action" method="post"> 用户名:<input type="text" name="username"> 密码:<input type="password" name="password"> <input type="submit" value="提交"> </form></body>
LoginAction.action接收并输出来自表单的参数,无需user的get和set方法了,但user必须实例化;action类必须实现ModelDriven接口
public class LoginAction extends ActionSupport implement ModelDriven<User>{ User user = new User(); public String login() { System.out.println(user.getUsername()); System.out.println(user.getPassword()); //... return SUCCESS; } @Override public User getModle(){ return user; }}
5.7.4 用传参数的方法给list赋值
login.jsp(表单提交参数),无需使用user.username了
<body> <!-- 使用action的属性接受参数值 --> <form action="LoginAction.action" method="post"> 用户名:<input type="text" name="username"> 密码:<input type="password" name="password"> <!-- 书籍1和2怎么给list赋值呢? --> 书籍1:<input type="text" name="bookList[0]"> 书籍2:<input type="text" name="bookList[1]"> <input type="submit" value="提交"> </form></body>
public class LoginAction extends ActionSupport implement ModelDriven<User>{ User user = new User(); public String login() { System.out.println(user.getUsername()); System.out.println(user.getPassword()); //为集合赋值 System.out.println(user.getBookList.get(0)); System.out.println(user.getBookList.get(1)); //... return SUCCESS; } @Override public User getModle(){ return user; }}
5.7.5 当list集合里面放的是对象时
书籍1:<input type="text" name="bookList[0].username">书籍2:<input type="text" name="bookList[1].username">
System.out.println(user.getBookList().get(0).getUsername()); System.out.println(user.getBookList().get(1).getUsername());
5.8 处理结果类型
5.8.1 input结果
5.8.2 局部结果与全局结果
5.8.3 type属性
- struts2学习笔记--struts2配置
- Struts2学习笔记--安装struts2
- struts2.01学习笔记
- struts2学习笔记
- Struts2学习笔记1
- struts2.0 学习笔记
- struts2.01学习笔记!
- struts2学习笔记
- Struts2学习笔记1
- struts2 学习笔记
- Struts2学习笔记(1)
- struts2学习笔记(2)
- struts2学习笔记(3)
- Struts2学习笔记
- struts2学习笔记
- struts2学习笔记2
- Struts2学习笔记
- struts2学习笔记(一)
- 手机淘宝APP主要视觉设计图分析【惠龙之 :花骨朵儿】
- CTreeCtrl背景透明完美实现
- Windows 7 64位 HookApi例子
- Java中keySet()返回值的排序问题
- POJ-1611 The Suspects
- Struts2学习笔记
- [leetcode] 230. Kth Smallest Element in a BST
- 【2014.8.17NOIP普及组模拟】愤怒的牛
- 关于Java生成指定格式的xml文档
- Java中的final和static
- 一致性性哈希
- [转]易语言 360免杀方法心得总结
- 【MVC5】2.添加控制器
- Github blog