01.Struts2框架
1、Struts2框架概述
框架:为了简化开发而生的,为了完成某种特定的任务的一组工具的集合,一种约束。半成品的程序。
MVC模式的框架:
M:Model
V:View JSP
C:Controller Servlet(Action),SpringMVC(Servlet)
为什么现在不怎么使用Struts2
1、漏洞太多了
2、不方便与Spring进行整合
3、老项目/也有很多的公司在使用Struts2
MVC流程
view->controller->model->controller->view
2、Struts2的核心执行原理
执行原理:使用过滤器进行请求的调度(SpringMVC使用Servlet)
3、为什么需要使用Struts2
1、可以帮助我们自动封装参数
2、简单的页面跳转
3、简单的输入验证
4、怎么使用
下载与安装
解压
目录:
apps:演示案例
docs:帮助文档
lib:jar包
src:源代码
导入jar包
commons-fileupload-1.4:Struts文件上传依赖的jar
commons-io-2.6:Struts输入输出流依赖的jar
commons-lang:Struts原因依赖包
commons-lang3
freemarker-2.3.28:Struts的模板引擎依赖的jar
javassist-3.20.0-GA:Struts字节码处理Jar
log4j-api-2.12.1:打印日志依赖jar
slf4j-api-1.7.28:日志
ognl-3.1.26:Struts支持的OGNL表达式依赖jar
struts2-core-2.5.22:Struts的核心jar包
配置Struts2的核心过滤器
<filter>
<filter-name>dispatcherFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>dispatcherFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
引入Struts2的核心配置文件struts.xml
struts-2.5.22\src\apps\rest-showcase\src\main\resources
*关联dtd文档
Preferences->XML->XML CATAlog->Add
Locaion:找Struts2对应版本号的路径
Key type:URI
Key:struts2对应版本号的路径:http://struts.apache.org/dtds/struts-2.5.dtd
5、如何创建Action类:
处理请求的类,当Struts捕获到请求的时候会交给该类中的某个指定方法去处理
1、创建普通Java类
2、配置该Java类,作为Struts2中的一个Action
Struts2的核心配置文件
:配置文件的根节点,有且只有一个,所有的配置项必须全部写在根节点中
:包,Struts2的基础配置之一,一般用于存放一组或者一个(Action:一个Java类,用于处理一个请求)
案例
案例1:
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="inserUserInfo" method="post">
<input type="text" name="userUne"><br/>
<input type="text" name="userPwd"><br/>
<input type="date" name="createDate"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="selectAllUserInfo">查看所有用户信息</a><br/>
<c:forEach items="${requestScope.uis }" var="ui">
${ui.userId }|${ui.userUne }|${ui.userPwd }|${ui.createDate }<br/>
</c:forEach>
</body>
</html>
配置filter
<?xml version="1.0" encoding="UTF-8"?>
<!--Struts2约束-->
<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>struts2Test01</display-name>
<filter>
<filter-name>dispatcherFilter</filter-name>
<filter-class>com.zb.filter.MyFilterController</filter-class>
</filter>
<filter-mapping>
<filter-name>dispatcherFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
案例需要导入的jar
c3p0.properties的配置
//注意:此文件必须放在源文件(src)目录下
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///user_db?characterEncoding=UTF-8
c3p0.user=root
c3p0.password=123456
实体类
package com.zb.model;
import java.util.Date;
public class UserInfo {
private Integer userId;
private String userUne;
private String userPwd;
private Date createDate;
public UserInfo() {
super();
}
public UserInfo(Integer userId, String userUne, String userPwd, Date createDate) {
super();
this.userId = userId;
this.userUne = userUne;
this.userPwd = userPwd;
this.createDate = createDate;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserUne() {
return userUne;
}
public void setUserUne(String userUne) {
this.userUne = userUne;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@Override
public String toString() {
return "UserInfo [userId=" + userId + ", userUne=" + userUne + ", userPwd=" + userPwd + ", createDate="
+ createDate + "]";
}
}
dao类
package com.zb.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.zb.model.UserInfo;
public class UserInfoDao {
public List<UserInfo> getAllUserInfo() throws Exception{
DataSource dataSource = new ComboPooledDataSource();
Connection conn = dataSource.getConnection();
ResultSet res = conn.prepareStatement(" SELECT * FROM user_info ").executeQuery();
List<UserInfo> uis = new ArrayList<UserInfo>();
while(res.next()) {
UserInfo ui = new UserInfo(res.getInt(1), res.getString(2), res.getString(3), res.getDate(4));
uis.add(ui);
}
conn.close();
return uis;
}
}
Filter(过滤器)
作用:可以完全替换Servlet
package com.zb.filter;
import java.io.IOException;
import java.util.List;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zb.dao.UserInfoDao;
import com.zb.model.UserInfo;
public class MyFilterController extends HttpFilter {
private UserInfoDao uid = new UserInfoDao();
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
String servletPath = request.getServletPath();
if(servletPath.indexOf("selectAllUserInfo")>-1) {
try {
List<UserInfo> listUi = uid.getAllUserInfo();
request.setAttribute("uis", listUi);
} catch (Exception e) {
System.out.println("查询所有用户信息失败");
}
}else if(servletPath.indexOf("inserUserInfo")>-1) {
UserInfo ui = new UserInfo();
}else {
chain.doFilter(request, response);
}
}
}
案例2:
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="sayhello">你好</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎光临XXX会所!</h1>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>zaijian</h1>
</body>
</html>
导入相应的jar
配置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"
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>struts2Test02</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!-- 注册 -->
<filter>
<filter-name>dispatcherFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 映射 -->
<filter-mapping>
<filter-name>dispatcherFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
配置struts(注:名字必须为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>
<!--
包:存放一个或者一组Action配置
name:该pageckage标签在程序中的唯一标识
extends:该包继承了哪些包的配置(初期,去继承struts-default:Struts的默认配置)
-->
<package name="helloPackage" extends="struts-default">
<!--
配置一个Action类
name:该Action处理的请求名称
class:捕捉到该请求之后,交给哪个类处理
method:方法类处理该请求的方法
-->
<action name="sayhello" class="com.zb.action.UserAction" method="testMetdho01">
<result name="hy">/welcome.jsp</result>
<result name="bhy">/abc.jsp</result>
</action>
<action name="sayGoodBye" class="com.zb.action.UserAction" method="testMetdho02">
</action>
</package>
</struts>
定义一个Action类
package com.zb.action;
public class UserAction {
public String testMetdho01() {
System.out.println("你好,欢迎Struts2");
return "bhy";
}
public void testMetdho02() {
System.out.println("滚犊子");
}
}
练习:
1、练习,熟练配置一个Struts2框架的应用程序。
2、配置三个action类,分别用于处理
用户相关请求
登录:/login
登录成功响应到首页(index)
注册:/register
登录失败响应到登录页(login)
订单相关请求
所有订单:/showAllOrder
已完成订单:/successOrder
产品相关请求
查看所有产品:/showAllGoods
条件查询产品:/getGoodsInfoByCondition
下架产品:/deleteGoodsInfoById
上架产品:/addGoodsInfo
报表相关请求
查看当月销售情况:/getNowMonth
查看全年销售情况:/getFullYear
*以上功能除了用户相关请求需要实现后台功能以外,其他请求能被Action的方法捕获即可,如有多余时间,请实现后台功能,数据库与页面自行设计。
3、预习
在Struts中如何进行重定向到页面
在Struts中如何获取页面提交参数
在Struts中如何访问(request,session,application等)ServletAPI资源
注册:/register
登录失败响应到登录页(login)
订单相关请求
所有订单:/showAllOrder
已完成订单:/successOrder
产品相关请求
查看所有产品:/showAllGoods
条件查询产品:/getGoodsInfoByCondition
下架产品:/deleteGoodsInfoById
上架产品:/addGoodsInfo
报表相关请求
查看当月销售情况:/getNowMonth
查看全年销售情况:/getFullYear
*以上功能除了用户相关请求需要实现后台功能以外,其他请求能被Action的方法捕获即可,如有多余时间,请实现后台功能,数据库与页面自行设计。
3、预习
在Struts中如何进行重定向到页面
在Struts中如何获取页面提交参数
在Struts中如何访问(request,session,application等)ServletAPI资源
在Struts中如何使用通过通配符调用Action类中的方法