struts环境搭建
struts的配置是要在我们把maven的环境全部配置好,然后在maven项目中的pom.xml加入我们struts的依赖,加载jar包
<!-- 添加 架包的依赖-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.13</version>
</dependency>
(1)然后还要在导入我们struts的配置文件: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-default.xml"></include><!-- 默认模块 -->
<include file="struts-base.xml"></include><!-- 基础模块 -->
<include file="struts-sy.xml"></include><!-- 系统模块-->
</struts>
(2)然后我们还要配置web.xml文件
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
<!-- 配置中央控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
(3)然后我们开始写代码吧
我们先创建一个实体类 (User类)
package com.thf.entity;
public class User {
private String uid;
private String uname;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
@Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + "]";
}
public User(String uid, String uname) {
super();
this.uid = uid;
this.uname = uname;
}
public User() {
}
}
(4)开发
1.动态方法调用(mvc不具备的优势)
我们先创建一个控制器 (HelloActioc)
(1)HelloActioc不需要指定父类(ActionSupport)
(2)mvc框架的子控制器需要传一个methondName的参数,但是现在不用了
package com.thf.web;
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.opensymphony.xwork2.ModelDriven;
import com.thf.entity.User;
/**
* 1.动态方法调用(mvc不具备的优势)
* 2.struts中的传参
* 1.set传参
* 2.参数名.属性名
* 3.实现modeldriven接口传参
*
*
* 3.struts与tomcat的交互
* 如何将后台的值传到前台去
* 1.request传值
* 2.值栈传值(get反法传值)
*
* @author 2019072403
*
*/
public class HelloAction implements ModelDriven<User>,ServletRequestAware,ServletResponseAware{
private HttpServletRequest request;
private HttpServletResponse response;
private User user1=new User();
private User user2;
private String sex ;
public User getUser2() {
return user2;
}
public void setUser2(User user2) {
this.user2 = user2;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String add() {
System.out.println("add方法被调用");
return "success";
}
public String del() {
System.out.println("del方法被调用");
return "success";
}
public String list() {
System.out.println("list方法被调用");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
//这属于非注入的耦合形式
//这些写到方法外面是没有用的
// HttpServletRequest request = ServletActionContext.getRequest();
// request.setAttribute("rs", user1);
this.request.setAttribute("rs", user1);
return "success";
}
public String updet() {
System.out.println("updet方法被调用");
return "success";
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user1;
}
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request=request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response=response;
}
}
配置struts-sy.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="sy" extends="base" namespace="/sy">
<action name="/hello_*" class="com.thf.web.HelloAction" method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
显示成功的JSP页面:success.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>
成功页面: ${rs}
</body>
</html>
(5)struts中的三种传参
1.实现modeldriven接口传参
2.set传参
3.参数名.属性名
Dome.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>struts传参的三种方式</h1>
<a href="${pageContext.request.contextPath}/sy/hello_list.action?uid=001&&uname=zs">测试modeldriven接口传参</a><br>
<a href="${pageContext.request.contextPath}/sy/hello_list.action?sex=nv">测试set传参</a><br>
<a href="${pageContext.request.contextPath}/sy/hello_list.action?user2.uid=002&&user2.uname=ls">测试参数名.属性名传参</a><br>
</body>
</html>
三种传参方式结果如下:
(1)实现modeldriven接口传参
(2)set传参
(3)参数名.属性名
(6)与J2EE容器交互
两种方式
1.注入的,直接实现ServletRequestAware接口,通过request存放
package com.thf.web;
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.opensymphony.xwork2.ModelDriven;
import com.thf.entity.User;
/**
* 1.动态方法调用(mvc不具备的优势)
* 2.struts中的传参
* 1.set传参
* 2.参数名.属性名
* 3.实现modeldriven接口传参
*
*
* 3.struts与tomcat的交互
* 如何将后台的值传到前台去
* 1.request传值
* 2.值栈传值(get反法传值)
*
* @author 2019072403
*
*/
public class HelloAction implements ModelDriven<User>,ServletRequestAware,ServletResponseAware{
private HttpServletRequest request;
private HttpServletResponse response;
private User user1=new User();
private User user2;
private String sex ;
public User getUser2() {
return user2;
}
public void setUser2(User user2) {
this.user2 = user2;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String add() {
System.out.println("add方法被调用");
return "success";
}
public String del() {
System.out.println("del方法被调用");
return "success";
}
public String list() {
System.out.println("list方法被调用");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
//这属于非注入的耦合形式
//这些写到方法外面是没有用的
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("rs", user1);
// this.request.setAttribute("rs", user1);
return "success";
}
public String updet() {
System.out.println("updet方法被调用");
return "success";
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user1;
}
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request=request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response=response;
}
}
2.非注入的,在方法中通过ServletActionContext.getRequest(),实例request来存放
public String list() {
System.out.println("list方法被调用");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
//这属于非注入的耦合形式
//这些写到方法外面是没有用的
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("rs", user1);
return "success";
}
如何将后台的值传到前台去
1.request传值
request传值 要实现ModelDriven,,然后调用ServletActionContext.getRequest()方法
public String list() {
System.out.println("list方法被调用");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
//这属于非注入的耦合形式
//这些写到方法外面是没有用的
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("rs", user1);
结果如下:
2.值栈传值(get反法传值)如果用的是get方法传参的话,
我们不需要传什么,直接在跳转界面引用就行