前言
博主今天分享的是基于maven的Struts2框架相关知识!
传送门:Maven项目初步介绍
传送门:Maven项目的创建
Struts的入门
pom.xml文件中版本号的处理:
因为后期我们使用的配置文件可能会比较多,一个一个去添加版本号会比较繁琐,可以采用类似于EL表达式的这种处理方式!
<!--配置各种jar依赖的版本号 -->
<properties>
<junit.version>3.8.1</junit.version>
<servlet.version>4.0.1</servlet.version>
<Struts2.version>2.5.16</Struts2.version>
</properties>
例如:junit的依赖
<!-- junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
配置的方式基本一样,就不一一粘贴代码了~
J2EE与容器的交互
注入、非注入
什么是注入?
举例你生病去医院,打针就是注入,吃药、运动、按时作息就是非注入,两种都可以治病。
耦合、解耦
耦合是指两个体系的依赖通过相互作用而彼此影响,例如对象之间的耦合程度越高,成本越高
解耦是解除耦合关系,但做不到绝对零耦合,可以用现有的技术把耦合度降低。
非注入—>耦合
ServletActionContext 依赖关系很严重 依赖servlet
非注入—>解耦
ActionContext (建议使用解耦模式)
注入—>耦合
需要实现 ServletRequestAware/ServletResponseAware两个类并且实现它们的两个方法。
注入—>解耦
不依赖于servlet (建议使用解耦模式)
因为能更好的进行模块开发
ServletActionContext
//获取request
ServletActionContext.getRequest();
//获取response
ServletActionContext.getResponse();
//获取session
ServletActionContext.getRequest().getSession();
参数赋值和ModelDriven
-
Action中定义属性,并提供get/set方法
-
ModelDriven
返回实体,不能为null,不需要提供get/set方法 -
ModelDriven返回实体和Action中属性重名,
ModelDriven中优先级更高
登录案例
1、首先去中央仓库中找到Struts2-core,也就是Struts2的核心jar包!
根据自己的需求选择版本
去pom.xml文件中进行配置
Struts2依赖:
<!--struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${Struts2.version}</version>
</dependency>
一旦粘贴好代码进行保存后,会自动开始下载相关的jar包,如果本地就有这些jar包,会从仓库中给你拿出来进行使用!
使用到的jar包依赖:
2、配置、映射Struts2核心过滤器(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>
filter-name和配置的filter-name要保持一致!
url-patten用来控制什么类型的文件可进入Struts中!
3、配置、映射中文乱码过滤器
在src/main/java下新建一个包,里面放EncodingFilter类:
4、配置Struts的配置文件struts.xml
新建struts.xml文件,加上dtd约束,struts.xml为主配置
文件!
注意:Struts的文件放在resource目录下!
struts.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-user.xml"></include>
</struts>
当系统运行起来的时候,会默认加载struts.xml文件,然后这个xml文件去加载其他的文件!
struts-base.xml文件
该文件为struts的基础配置文件!
<?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>
Struts-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.wangqiuping.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>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎${ username}来到首页!</h1>
</body>
</html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<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>
</body>
</html>
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>错误页面!</h1>
</body>
</html>
实现效果
登录页面
登录成功跳转首页
登录失败跳转错误页面