文章目录

  • Struts2的优点
  • 添加框架依赖
  • Struts2的启动配置web.xml
  • 创建并配置项目所需xml
  • J2EE容器交互
  • 登录案例

Struts2的优点

  1. 基于 MVC 架构,框架结构清晰
  2. 使用 OGNL:OGNL 可以快速的访问值栈中的数据、调用值栈中对象的方法
  3. 拦截器:struts2 中的很多特性都是通过拦截器实现的,例如异常处理、文件上传、验证等。拦截器时可配置与重用

添加框架依赖

关于maven的创建和环境搭建在上篇中已经写了,这里直接在pom文件中添加struts2的依赖,注意需要有网络的情况下,因为第一次用struts2本地仓库的没有相应的jar所以需要在有网络的情况下maven会去访问阿里源下载相关依赖到本地仓库。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.liyingdong</groupId><artifactId>mavenStutrs2</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>mavenStutrs2 Maven Webapp</name><url>http://maven.apache.org</url><properties><junit.version>3.8.1</junit.version><servlet.version>4.0.1</servlet.version><Struts2.version>2.5.16</Struts2.version></properties><dependencies><!-- junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!-- servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version><scope>provided</scope></dependency><!--struts2  --><!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>${Struts2.version}</version></dependency></dependencies><build><finalName>mavenStutrs2</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
</project>

保存之后会自动加载框架所需依赖和对应版本

Struts2的启动配置web.xml

我们使用第一步应该要先配置struts2的过滤器,因为Struts框架是通过Filter启动的,web.xml配置如下:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>Archetype Created Web Application</display-name><!--配置过滤器  --><filter><!--定义核心Filter的名字--><filter-name>struts2</filter-name><!--定义核心Filter的实现类--><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><!--处理带*.action的请求--><url-pattern>*.action</url-pattern><!--或者处理所有请求 <url-pattern>/*</url-pattern> --></filter-mapping>
</web-app>

创建并配置项目所需xml

这里的话其实定义一个就可以搞定,但是为了模块化管理还是分开写比较好。

struts.xml(核心配置文件)

这是核心配置文件,用include标签来包含所并且引入别的定义的模块配置文件,注意顺序全局配置参数struts-base.xml必须在第一个。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd">
<struts><include file="struts-base.xml"></include><include file="struts-hello.xml"></include><include file="struts-user.xml"></include>
</struts>

struts-base.xml(全局参数配置)

属性 解释
package 用于组织Action的一个逻辑概念,必须通过extends继承自Struts-default包,struts-default包在源码中的struts-default.xml文件中定义。
result 定义跳转路径,execute()方法的返回值在此定义。默认情况下为转发
name 包名称
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!--  开启开发者模式-->
<constant name="struts.devMode" value="true"></constant>
<!-- 开启自动加载配置文件 -->
<constant name="struts.configuration.xml.reload" value="true"></constant><!--name:包名称abstract:是否抽象类namespace:明明空间--><package name="struts-base" extends="struts-default" abstract="true"><global-allowed-methods>regex:.*</global-allowed-methods></package>
</struts>

strur-user.xml(处理相关请求或者相关业务的模块文件)

这个是登录模块的配置等会案例要用的

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd">
<struts><package name="struts-user" extends="struts-base"><action name="userAction_*" class="com.liyingdong.action.UserAction"method="{1}" ><!--name:路径跳转type:默认是转发转发=dispatcher重定向=redirect--><result name="success" type="dispatcher">/index.jsp</result><result name="error" type="redirect">/error.jsp</result></action></package>
</struts>

J2EE容器交互

注入、非注入

什么是注入?举例你生病去医院,打针就是注入,吃药就是非注入,两种都可以治病。

耦合、解耦

耦合是指两个体系的依赖通过相互作用而彼此影响,例如对象之间的耦合越高,维护成本越高

解耦顾名思义就是解除耦合关系理论上的绝对零耦合是做不到的,但是可以用现有的技术把耦合度降低。

非注入—>耦合

ServletActionContext 依赖关系很严重 依赖servlet

非注入—>解耦

ActionContext (建议使用解耦模式)

注入—>耦合

需要实现 ServletRequestAware/ServletResponseAware两个类并且实现它们的两个方法。

注入—>解耦

不依赖于servlet (建议使用解耦模式) 因为能更好的进行模块话开发

登录案例

这里基于一个简单的登录案例来上手熟悉一下。

index.jsp这是登录后的首页,获取到作用域的值显示代表成功。

<h1>首页!  哈喽!${ username}</h1>

error.jsp这是登录失败的界面

<h3>错误页面!</h3>

login.jsp登录界面name值和实体类属性保持一致

<form action="userAction_login.action" method="post"><label>用户姓名:</label><input name="username"/><br><label>用户密码:</label><input name="password"  type="password"/><br><input type="submit" value="登录">
</form>

业务类Action

这里有两种赋值方式,一种是在Action中定义属性,并提供get/set方法,这样你就可以通过action的属性来获取前端提交表单的值写方法来处理业务了,把需要的值存入作用域中配置结果码然后前端获取作用域中的值就好了。

我用的是第二种实现ModelDriven接口来赋值

package com.liyingdong.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;import com.liyingdong.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;public class UserAction implements ModelDriven<User> {private  User user=new User();@Overridepublic User getModel() {// TODO Auto-generated method stubreturn user;}/*//非注入耦合方式,和servlet关系紧密private HttpServletRequest req=(HttpServletRequest) ServletActionContext.getResponse();private HttpServletResponse resp=(HttpServletResponse) ServletActionContext.getRequest();public String login() {System.out.println("....login");System.out.println("username:"+username);System.out.println(user);if("zhangsan".equals(user.getUsername())&&"123".equals(user.getPassword())) {req.setAttribute("username", username);return "success";}else {return "error";}}*/public String login() {//非注入的解耦方式if("lisi".equals(user.getUsername())&&"123".equals(user.getPassword())) {ActionContext context = ActionContext.getContext();Map<String, Object> req = context.getContextMap();req.put("username", user.getUsername());return "success";}else {return "error";}}/*//注入耦合 ServletRequestAware,ServletResponseAwareprivate HttpServletRequest req;private HttpServletResponse resp;@Overridepublic void setServletResponse(HttpServletResponse resp) {// TODO Auto-generated method stubthis.resp=resp;}@Overridepublic void setServletRequest(HttpServletRequest req) {// TODO Auto-generated method stubthis.req=req;}public String login() {if("lisi".equals(user.getUsername())&&"123".equals(user.getPassword())) {req.setAttribute("username", user.getUsername());return "success";}else {return "error";}}*/}

login.jsp

index.jsp

struts2框架入门(基于maven)相关推荐

  1. java struts2 框架 入门简介

    目录 一.Struts2框架执行流程 二.Struts2的快速入门 1.导入jar包 2.配置web.xml文件 3.配置struts.xml文件 4.创建Action来完成逻辑操作 三.Struts ...

  2. 【SSM】框架整合基于maven(笔记一)

    环境搭建 1.新建一Maven项目,添加web的支持 2.导入相关的pom依赖 <dependencies><!--Junit--><dependency>< ...

  3. struts2框架入门

    1.struts2的工作原理和文件结构 2.struts2核心文件 struts核心文件包括: 1)web.xml 2)struts.xml 3)struts.properties 3.Action搜 ...

  4. Struts2框架简单入门

    Struts2框架简单入门 1.前言 2.Struts2简介 2.1.Struts2介绍 2.2.Struts2优缺点 2.2.1.优点 2.2.2.缺点 2.2.3.Struts2获取 3.入门案例 ...

  5. 基于Struts2框架的名片管理系统

    目录 1.系统设计 2.数据库设计 3.系统管理 4.用户管理 5.名片管理 本篇博文将分享一款基于Struts2框架的名片管理系统,JSP引擎为Tomcat9.0,数据库采用的是MySQL5.5,集 ...

  6. 使用Maven搭建Struts2框架的开发环境

    一.创建基于Maven的Web项目 我使用的是MyEclipse8.5的版本,创建好的Web项目如下所示: 我们知道,一个标准的Maven项目是必须包括[src/main/java],[src/mai ...

  7. idea中搭建基于maven的ssm整合框架

    自从进入一家游戏公司以后,就抛弃了eclipse转战于idea,刚开始一直很不习惯,但是用了一周以后,在打开eclipse的时候,有一种想卸载掉的冲动,好吧,我是觉得idea比eclipse好用,关于 ...

  8. 全网最强maven教程-使用Maven搭建Struts2框架的开发环境

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven的主要目标是希望开发人员能在最短的时间内理解开发的完整状态.为了达到这个目标,Mav ...

  9. Struts2入门第一讲——Struts2框架的快速入门

    Struts2框架的概述 Struts2是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中.目前掌握Struts2框架几乎成为Web ...

  10. SSM通用活动报名系统(会员、管理员)+SSM框架+mysql+tomcat+Maven项目(毕设学习)可以用于学习SSM、maven项目入门

    SSM通用活动报名系统(会员.管理员)+SSM框架+mysql+tomcat+Maven项目(毕设学习)可以用于学习SSM.maven项目入门 可以用于课程设计.毕业设计的知识点入门学习 提示:此资源 ...

最新文章

  1. 芯片组x299是服务器主板吗,最强的酷睿i9只能用它!X299主板首发评测
  2. WCF常见问题之端口共享
  3. 显示一个数字到小数点后两位
  4. ubuntu15.10避免图形界面无法登录的jdk配置
  5. GPU Gems1 - 9 有效的阴影体渲染
  6. linux sftp自动输入密码,linux下实现sftp自动登录。
  7. Android绑定服务后出现空指针异常问题
  8. android studio卡顿解决办法
  9. Linux 环境下安装 GitLab 与配置
  10. Centos7 网络配置 设置静态Ip
  11. COVID-19知识图谱问答系统(基于REFO)
  12. 17暴力或dfs:凑算术
  13. C-V2X 网络层及适配层解析填充
  14. QPS 与 TPS是什么
  15. ubuntu18单机部署k8s(v1.14.1)
  16. 腾讯校招笔试题之贪吃的小Q
  17. 时序分析 43 -- 时序数据转为空间数据 (二) 马尔可夫转换场
  18. 微信小程序开发笔记1——使用npm脚本实现自动化切换环境配置
  19. 设计模式之禅【解释器模式】
  20. 家里两个孩子,你们会一个跟爸姓,一个跟妈姓吗?

热门文章

  1. 计算机主机结构讲解,电脑内部结构图和讲解
  2. 刻意玩具教具化没用,童心制物如何让孩子真正玩出名堂
  3. MFC的消息处理模式
  4. Android 12新功能:使用SplashScreen优化启动体验
  5. 电视机进入工厂模式,factory,怎么退出
  6. 米谟科技 3D音频VR编辑器——sound flare声弹是什么
  7. mtk手机原理图分析
  8. linux——alsa中多个声卡设备时打开某一指定声卡的PCM设备
  9. 爆肝三个晚上,成功高仿出Win 11的部分界面【持续更新】【萌新也能看的懂】【开源了,强烈建议收藏】
  10. 计算机化学试题,08计算机化学试卷yuanj.doc