1.导包

创建一个项目

将Struts2类包中的以下jar文件加入到工程的构建路径或拷贝到项目的lib目录中

2.书写Action类

在Struts2的应用开发中,Action作为框架的核心类,实现对用户请求的处理,Action类被称为业务逻辑控制器。一个Action类代表–次请求或调用,每个请求的动作都对应于一个相应的Action类,一个Action类是一个独立的工作单元。也就是说,用户的每次请求,都会转到一个相应的Action类里面,由这个Action类来进行处理。简而言之,Action就是用来处理一次用户请求的对象。
Action映射是框架中的基本“工作单元”。Action映射就是将一个请求的URL映射到一个Action类,当一个请求匹配某个Action名称时,框架就使用这个映射来确定如何处理请求。在struts.xml文件中,通过元素对请求的Action和Action类进行配置。
Action处理请求参数:在Struts2中,页面的请求数据和Action有两种基本的对应方式,分别是字段驱动(FieldDriven)方式和模型驱动(
ModelDriver)方式,其中字段驱动也称为属性驱动。

在src目录下创建一个名为cn.itcast.domain的包,在该包下创建User.java文件。

User.java文件代码如下:

package cn.itcast.domain;
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;}
}

在src目录下创建包cn.itcast.action,在该包下创建LoginAction.java文件。

LoginAction.java文件代码如下:

package cn.itcast.action;
import cn.itcast.domain.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven<User> {private static final long serialVersionUID = 1L;private User user = new User();public User getModel() {return user;}@Overridepublic String execute() throws Exception {//获取ActionContextActionContext actionContext = ActionContext.getContext();if ("tom".equals(user.getUsername())&& "123".equals(user.getPassword())) {// 将用户存储在session中.actionContext.getSession().put("user", user);return SUCCESS;} else {actionContext.put("msg", "用户名或密码不正确");return INPUT;}}
}

在cn.itcast.action包下创建BookAction.java文件。

BookAction.java文件代码如下:

package cn.itcast.action;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class BookAction extends ActionSupport {public String add() {System.out.println("book add");return SUCCESS;}public String del() {System.out.println("book del");return SUCCESS;}public String update() {System.out.println("book update");return SUCCESS;}public String find() {System.out.println("book find");return SUCCESS;}
}

在src目录下创建一个名称为cn.itcast.interceptor的包,在该包下创建一个名称为PrivilegeInterceptor.java的文件,该文件作为自定义拦截器类。

PrivilegeInterceptor.java的文件代码如下:

package cn.itcast.interceptor;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class PrivilegeInterceptor extends AbstractInterceptor {private static final long serialVersionUID = 1L;public String intercept(ActionInvocation invocation) throws Exception {ActionContext actionContext = invocation.getInvocationContext();// 得到ActionContext.Object user = actionContext.getSession().get("user");//获取user对象if (user != null) {return invocation.invoke(); // 陆续向下执行.} else {actionContext.put("msg", "您还未登录,请先登录");return Action.LOGIN; //如果用户不存在,返回login值}}
}

在WebContent目录下创建三个视图页面,分别为主页main.jsp、登录页面login.jsp和操作成功页面success.jsp。

主页main.jsp的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>  <title>main.jsp</title></head><body><a href="apter03/book_del">book del</a><br><a href="apter03/book_add">book add</a><br><a href="apter03/book_update">book update</a><br><a href="apter03/book_find">book find</a><br></body>
<ml>

登录页面login.jsp的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录</title>
</head>
<body>
<center>
${requestScope.msg}<br><form action="apter03/login.action" method="post"><table><tr><td><label style="text-align: right;">用户名:</label></td><td><input type="text" name="username"></td></tr><tr><td><label style="text-align: right;">密码:</label></td><td><input type="password" name="password"></td></tr><tr><td align="right" colspan="2"><input type="submit" value="登录"></td></tr></table></form>
</center>
</body>
<ml>

成功页面success.jsp的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录</title>
</head>
<body>
<center>
${requestScope.msg}<br><form action="apter03/login.action" method="post"><table><tr><td><label style="text-align: right;">用户名:</label></td><td><input type="text" name="username"></td></tr><tr><td><label style="text-align: right;">密码:</label></td><td><input type="password" name="password"></td></tr><tr><td align="right" colspan="2"><input type="submit" value="登录"></td></tr></table></form>
</center>
</body>
<ml>

3.书写src/struts.xml

Struts2框架的核心配置文件是struts.xml文件, 此文件用于声明了自定义拦截器、拦截器栈以及关于对book的操作。

struts.xml文件的代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="struts2" namespace="/" extends="struts-default"><!-- 声明拦截器 --><interceptors><interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"/><interceptor-stack name="myStack"><interceptor-ref name="defaultStack" /><interceptor-ref name="privilege"></interceptor-ref></interceptor-stack></interceptors><!-- 用户登录操作 --><action name="login" class="cn.itcast.action.LoginAction"><result>/main.jsp</result><result name="input">/login.jsp</result></action><!-- 关于book操作 --><action name="book_*" class="cn.itcast.action.BookAction"method="{1}"><result>/success.jsp</result><result name="login">/login.jsp</result><interceptor-ref name="myStack" /></action></package>
</struts>

4 .strust2核心过滤器配置到web.xml

在web. xml文件中配置核心过滤器StrutsPrepareAndExecuteFilter时,通过初始化参数来配置常量。通过 元素的子元素指定,每个元素配置了一个Struts2常量。在web. xml文件中通过初始化参数配置常量方式,如下列代码段所示:

web. xml文件的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><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><welcome-file-list><welcome-file>main.jsp</welcome-file></welcome-file-list>
</web-app>

5.新建测试类

启动tomcat服务器,对程序进行测试

启动程序成功访问main.jsp的页面:

登录界面:

用户名或密码错误时:

成功登录时:

在上面的案例中,创建了一个方法过滤拦截器PrivilegeInterceptor ,然后在struts. xml中配置了该拦截器,如果用户没有登录,将无法对页面链接进行相应操作,只有登录后的用户才有权限操作页面相应功能。

web框架技术_struts2的拦截器相关推荐

  1. struts2 拦截器_Struts2令牌拦截器示例

    struts2 拦截器 Struts 2 token interceptor can be used to handle multiple form submission problem. While ...

  2. struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作

    struts2 拦截器 Sometimes we have long running actions where user will have to wait for final result. In ...

  3. 轻量级 Java Web 框架技术选型

    2019独角兽企业重金招聘Python工程师标准>>> 本文是<轻量级 Java Web 框架架构设计>的系列博文. 前面已对该 Java Web 框架做了一些简要描述, ...

  4. Spring框架注入注解与拦截器浅谈

    依赖注入注解 1实现注入的注解: (1)修饰属性.方法.构造函数 @Autowire:自动注入,自动去spring容器中寻找指定的bean来注入,require属性指定注入这个bean是否是必须的,如 ...

  5. 439、Java框架93 -【SpringMVC - 拦截器】 2020.12.14

    目录 0.效果 1.拦截器类:IndexInterceptor 2.配置拦截器 3.修改 index.jsp 4.测试 5.参考链接 0.效果 访问地址之后,看到如图所示的拦截器打印的效果 http: ...

  6. java struts 拦截器_java框架篇---struts实现拦截器

    Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...

  7. java拦截器继承类_struts2的拦截器(5):继承MethodFilterInterceptor抽象类实现拦截方法的拦截器 | 学步园...

    在默认情况下,如果我们为某个Action定义了拦截器,则这个拦截器会拦截该Action内的所有方法.但在某些情况下,我们不想拦截所有的方法,我们只需要拦截某些特定方法,此时就需要使用struts2拦截 ...

  8. struts 修改拦截器修改返回值_Struts2自定义拦截器

    自定义拦截器 1). 具体步骤 I. 定义一个拦截器的类 > 可以实现 Interceptor 接口 > 继承 AbstractInterceptor 抽象类 II然后在拦截器类的inte ...

  9. 超级详细!!!SpringBoot2核心技术与响应式编程尚硅谷完整知识点笔记 下篇 自动配置、容器、Web、数据响应、拦截器、SQL、NOSQL、原理、Junit5、Actuator、外部化配置等

    所有配套资料已上传到QQ群:167356412  需要的话群文件自取 06.数据访问 1.SQL 1.数据源的自动配置-HikariDataSource 1.导入JDBC场景 <dependen ...

最新文章

  1. dom不刷新 vue 加数据后_高频出现的Vue 面试题及答案
  2. 【java】java内存模型 (1)--基础
  3. C++ 学习之旅(15)——继承inheritance
  4. YBTOJ:染颜色(KDtree)
  5. bzoj2721樱花——质因数分解
  6. 线段树hdu1754
  7. PHP有表单和js交互乱码问题,js 和 php交互问题
  8. [转]云计算:SaaS、PaaS、IaaS、CaaS
  9. HULK祝大家新年快乐
  10. 天融信网闸web界面登录方式_有颜值更有才华,乘风破浪的天融信面板AP接受硬核实测...
  11. js省市二级联动;)
  12. 如何使用CleanMyMac彻底擦除文件?
  13. css字体倾斜角度_css如何设置字体倾斜样式
  14. NI6509输出遇到的问题
  15. 关于数据分析岗位的工作思考
  16. 一会通一会不通 一台设备ping_Linux刚开机能ping通网关,一会就ping不通了
  17. 配置全局less变量;解决iphoneX、 iphone8 plus 键盘退下去仍占空间,导致无法点击;vue-photo-preview 配置正常,但无法触发图片的预览
  18. 【lizhi125】FindDupFile - 轻松查找与清理电脑上的重复文件、照片的绿色软件
  19. 七彩cms云转码_七彩CMS开源程序 2019最新云转码全开源程序源码[带完整安装搭建教程]...
  20. 分频器的Verilog实现(偶数分频、奇数分频)

热门文章

  1. div2#730题解
  2. 一家SaaS公司是怎么搞垮的?
  3. 【PPT】新零售企业数字化转型实践
  4. 2021-09-07libtorch在linux下使用
  5. 根据excel的某列将excel分成不同的sheet
  6. Java生成随机字符串
  7. python接口自动化测试书籍_Web接口开发与自动化测试——基于Python语言
  8. 简单后端到前端展示数据
  9. 高考后,学会这种能力,让你收益终生!
  10. 荣耀magic3pro怎么隐藏应用