Struts2框架学习 Day1
来源:互联网 发布:js 数组元素 函数 编辑:程序博客网 时间:2024/05/20 05:10
一、Struts概述
1.Struts背景
- 由出色稳定的框架Struts1和WebWork框架整合而来
- Struts1框架: 它是apache公司的开源子项目,是基于mvc逻辑分层的web层框架实现。是出现最早的web层框架,应用最广泛。它重点关注的是控制层(C),对于视图层(V)只是提供了大量的标签;对于Model(M)层的影响微乎其微.
- WebWork框架: 它也是一个mvc的框架,这个框架的设计思路是采用拦截链将用户的请求的数据转发到Action中,并负责将Action的处理结果转换成对用户的响应。这种设计思路能够和ServletAPI分离。
- 吸取两大框架的优点
- 提高开发效率和规范性
- 更好的实现了MVC架构
- 解除了与Servlet的强耦合性
2.Struts2框架的意义
- 更加便捷的进行开发
- 自动封装表单提交数据:属性驱动(表单中提交的数据不需要使用request.getParamater获取,而自动放到属性当中可以直接使用)、模型驱动(提交的表单数据可以自动封装到对应的实体类对象中,直接调用实体类中的EO方法即可持久化到数据库中)
- 便捷的实现上传文件:FileUpload(以前的文件上传方法需要手动引入smartupload.jar文件)
- 使网站通用于国内外(国际化),国际化通用标准
- 通过配置完成表单验证:校验器,表单验证一般分为两块,首先通过JS完成第一次表单校验,然后传到后台进行二次校验。
- 强大的标签库:Struts2标签库、OGNL标签库
更科学的管理
- 使用xml文件管理大量的程序文件对应映射关系,维护方便、简洁、安全、迅速。
更安全的操作
- 安全的线程机制:每个action都是独立的(Servlet是单例模式,线程不是安全的)
- 防止数据重复提交:token令牌机制,该机制可以防止用户因为电脑卡、网速慢引起的数据重复提交问题。
- 异常处理机制:通过配置来完成,更便于管理
- 先进的编程思路
- 面向切面的编程(AOP):拦截器
3.Struts核心处理机制
- 使用Filter作为控制器的MVC应用实战
- 流程概念分析
- 简单业务实现
传统的开发模式和Struts2开发模式的区别,首先看传统模式如下图所示:
图中拿一个注册页面进行举例,首先提交一个register.action的注册页面,程序会将action请求发送给Servlet,Servlet会处理请求跳转到一个注册页面,填写完信息后,点击注册按钮提交请求,此时会将请求提交给另外一个Servlet,这个Servlet验证用户的请求信息并保存到数据库中,最后跳转到注册结果页面。而应用了Filter的Struts2开发模式的处理方式是不同的,如图所示:
当提交一个注册action或者点击注册按钮提交注册信息时,可以直接将请求都提交到Filter中,Filter会通过判断来确定跳转到哪一个页面,极大的提高了开发效率。
下面是这个注册的Demo实例,代码如下:
首先创建一个实体类Users:
package cn.wikey.pojo;public class Users { private String username; private int id; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
然后创建一过滤器的包,并创建一个Filter过滤器ControlFilter.java,在web.xml中对它进行配置:
<?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> <filter> <filter-name>ControlFilter</filter-name> <filter-class>cn.wikey.Filter.ControlFilter</filter-class> </filter> <filter-mapping> <filter-name>ControlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
编写初始页面、注册、结果页面三个JSP文件,很简单的代码,省略不贴,然后我们对过滤器ControlFilter.java进行编写,代码如下:
package cn.wikey.Filter;public class ControlFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; //1.接收用户请求的地址 String url = request.getServletPath(); //2.判断用户请求的地址,并执行相应的程序 if(url.equals("/register.action")){ request.getRequestDispatcher("/register.jsp").forward(arg0, arg1); return; }else if (url.equals("/savaUser.action")) { String username = request.getParameter("username"); String password = request.getParameter("password"); String password1 = request.getParameter("password1"); if(password.equals(password1)){ Users users = new Users(); users.setUsername(username); users.setPassword(password); //执行相关的DAO持久化操作 request.getRequestDispatcher("end.jsp").forward(arg0, arg1); return; }else { request.getRequestDispatcher("register.jsp").forward(arg0, arg1); return; } } arg2.doFilter(arg0, arg1); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub }}
最终实现简单的页面及结果如下:
0 0
- Struts2框架学习 Day1
- Struts2 学习笔记 day1
- tensorflow学习day1 基本框架
- 学习《Struts2.1权威指南》DAY1
- 深度学习框架 caffe 学习笔记 Day1
- struts2学习----模拟struts2框架
- 正在学习struts2框架,
- 框架-Struts2 学习笔记
- struts2框架学习总结
- Struts2框架学习(一)
- 学习 -- Struts2框架入门
- Struts2框架学习(一)
- Struts2框架学习笔
- Struts2框架入门学习
- Struts2框架学习(一)
- 关于struts2框架学习
- Struts2框架学习(一)
- Struts2框架学习(一)
- 用flask开发个人博客(31)——用flask_login管理用户的登录
- 简单排序:选择排序
- 火狐浏览器必备的一些Hack插件
- java函数式编程之Stream
- (知乎)人工神经网络中的activation function的作用具体是什么?ReLu的特点?
- Struts2框架学习 Day1
- 2016年终总结
- ztree --授权问题(根据ids) setting checked tree
- tomcat下禁用不安全的http方法
- Oracle优化05-执行计划
- Python算法实践——AC自动机
- 文章标题
- Docker与容器
- 内核调试