Struts2类级别拦截器
Springmvc方法级别的拦截器
Struts2拦截器的实现:struts2-interceptors
Springmvc:springmvc-aop实现
Springmvc:变量是独立的,不共享
Struts2:方法中的变量是共享的
Struts2:为了线程安全,每个请求都会创建一个action处理
Springmvc与spring无缝整合,管理安全
1.导入struts2-core依赖包
2.在WEB-INF下面配置web.xml文件
<filter>
<filter-name>mvc</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>mvc</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.配置struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!--package指的是开辟一个空间,名字是唯一的 -->
<!--namespace 命名空间 一级访问路径 -->
<!--extends继承struts-default.xml调用struts2的核心拦截器 -->
<package name="demo"
namespace="/demo"
extends="struts-default">
<!--name:二级访问路径 class:处理请求的类 -->
<action name="hello"
class="com.zhiyou100.action.HelloAction">
<!--name:返回的逻辑视图 -->
<result name="success">/WEB-INF/msg.jsp</result>
</action>
</package>
4.在WEB-IN下面创建msg.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>struts2</title>
</head>
<body>
<h1>hello,struts2</h1>
</body>
</html>
5.创建HelloAction.java
/**
*
*/
package com.zhiyou100.action;
/**
* @author Administrator
*
*/
public class HelloAction {
private String name;
public String execute() {
System.out.println("HELLOWORLD,STRUTS2");
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
6.服务器测试/demo/hello,结果跳转到msg.jsp界面
7.struts2下的空转发跳转页面
<package name="message"
namespace="/message"
extends="struts-default">
<action name="login"
class="com.zhiyou100.action.LoginAction">
<result name="success">/WEB-INF/msg.jsp</result>
</action>
<action name="loginForm">
<result>/WEB-INF/login.jsp</result>
</action>
</package>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>登录</title>
</head>
<body style="font-size: 30px;">
<c:url var="url" value="/message/login.action"/>
<form action="${url }" method="post">
<div>
<label>用户:</label>
<input type="text" name="username"/>
</div>
<div>
<label>密码:</label>
<input type="password" name="password"/>
</div>
<div>
<label>
<input type="submit" value="登录">
</label>
</div>
</form>
</body>
</html>
LoginAction.java
/**
*
*/
package com.zhiyou100.action;
/**
* @author Administrator
*
*/
public class LoginAction {
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;
}
public String execute() {
System.out.println("username:"+username);
System.out.println("password:"+password);
return "success";
}
}
测试
8.struts2下的bean传值
user.java
/**
*
*/
package com.zhiyou100.entity;
/**
* @author Administrator
*
*/
public class User {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
<package name="user"
namespace="/user"
extends="struts-default">
<action name="loginForm">
<result>/WEB-INF/login2.jsp</result>
</action>
<action name="login"
class="com.zhiyou100.action.UserAction" method="login">
<result name="success">/WEB-INF/msg.jsp</result>
</action>
</package>
login2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>登录</title>
</head>
<body style="font-size: 30px;">
<c:url var="url" value="/user/login.action"/>
<form action="${url }" method="post">
<div>
<label>用户:</label>
<input type="text" name="user.name"/>
</div>
<div>
<label>密码:</label>
<input type="password" name="user.pwd"/>
</div>
<div>
<label>
<input type="submit" value="登录">
</label>
</div>
</form>
</body>
</html>
UserAction.java
/**
*
*/
package com.zhiyou100.action;
import com.zhiyou100.entity.User;
/**
* @author Administrator
*
*/
public class UserAction {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String login() {
System.out.println(user.getName());
return "success";
}
}
测试
9.struts2下的map传值
<package name="login"
namespace="/login"
extends="struts-default">
<action name="loginForm">
<result>/WEB-INF/loginForm.jsp</result>
</action>
<action name="login2"
class="com.zhiyou100.action.Login2Action">
<result name="success">/WEB-INF/ok.jsp</result>
<result name="error">/WEB-INF/loginForm.jsp</result>
</action>
</package>
loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>登录</title>
</head>
<body style="font-size: 30px;">
<c:url var="url" value="/login/login2.action"/>
<h1>${message}</h1>
<form action="${url }" method="post">
<div>
<label>用户:</label>
<input type="text" name="user.name"/>
</div>
<div>
<label>密码:</label>
<input type="password" name="user.pwd"/>
</div>
<div>
<label>
<input type="submit" value="登录">
</label>
</div>
</form>
</body>
</html>
Login2Action.java
/**
*
*/
package com.zhiyou100.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.zhiyou100.entity.User;
/**
* @author Administrator
*
*/
public class Login2Action implements SessionAware {
private User user;
private String message;
private Map<String, Object> session;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Map<String, Object> getSession() {
return session;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public String execute() {
if (user.getName().equals("Tom")&&user.getPwd().equals("123456")) {
session.put("loginName", user.getName());
return "success";
}
message = "用户名或密码错误";
return "error";
}
}
测试请求不在写
10.SSProject
首先导入依赖架包
配置WEB-INF下面的web.xml
<!--监听Tomcat,启动Tomcat时初始化Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--指定spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</context-param>
<!--struts主控制器的配置 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置spring-struts.xml
<context:component-scan base-package="com.zhiyou100"/>
配置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>
<package name="demo"
namespace="/demo"
extends="struts-default">
<action name="hello"
class="helloAction">
<result name="success">/WEB-INF/msg.jsp</result>
</action>
</package>
<!--struts2的重定向 -->
<package name="result"
namespace="/result"
extends="struts-default">
<action name="hello"
class="helloAction">
<result name="success">/WEB-INF/msg.jsp</result>
</action>
<action name="test1">
<result type="redirectAction">hello</result>
</action>
<action name="test2">
<result type="redirectAction">
<param name="namespace">/demo</param>
<param name="actionName">hello</param>
</result>
</action>
<action name="test3">
<result type="redirect">https://www.baidu.com</result>
</action>
<action name="test4">
<result type="redirect">
<param name="location">https://www.baidu.com</param>
</result>
</action>
</package>
</struts>
创建HelloAction.java
/**
*
*/
package com.zhiyou100.action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.zhiyou100.service.DemoService;
/**
* @author Administrator
*
*/
@Controller
@Scope("prototype")//多例
public class HelloAction {
@Resource
private DemoService demoService;
public String execute() {
demoService.hello();
return "success";
}
}
最后测试
11.
<!--编写下载流 -->
<action name="image"
class="imageAction">
<result name="success" type="stream">
<param name="contentType">image/png</param>
<param name="inputName">image</param>
<param name="contentDisposition">attachment,filename="hello.png"</param>
</result>
</action>
/**
*
*/
package com.zhiyou100.action;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
/**
* @author Administrator
*
*/
@Controller
@Scope("prototype")
public class ImageAction {
private InputStream image;
public InputStream getImage() {
return image;
}
public void setImage(InputStream image) {
this.image = image;
}
@SuppressWarnings("resource")
public String execute() throws IOException {
// 设置图片
BufferedImage img =
new BufferedImage(100, 60, BufferedImage.TYPE_3BYTE_BGR);
// 获取画笔
Graphics2D g =
img.createGraphics();
g.setColor(Color.green);
g.drawString("Hello World", 10, 30);
// 将该图片转换成字节数组
ByteArrayOutputStream out =
new ByteArrayOutputStream();
ImageIO.write(img, "png", out);
// 将字节数组转换成字节流
byte[] data =
out.toByteArray();
image = new ByteArrayInputStream(data);
return "success";
}
}