因为之前已经可以使用maven来创建项目了,
因为这样我们可以节省很多很多的时间花费在下载jar包上了。
嘛,为什么说要用到struts框架呢,其实想想我们之前的项目,许多的项目的业务逻辑全是硬编码,代码都写死了不利于维护。
而struts框架可以通过一些配置文件来动态的修改代码,
嘛,总的来说,就是便于修改代码,便于维护
先给大家看一下我的项目的一些结构
Struts是Apache基金组织中Jakarta项目组的一个开源(Open Source)项目,主要就是实现了MVC设计模式,在Struts中有自己的控制器(ActionServlet),同时也提供了各种常用的页面标签库以减少JSP页面中的Scriptlet代码,Struts实际上就属于在传统技术上发展起来的一种新的应用模式,其操作的本质依然还是JSP、Servlet、JavaBean等技术的应用。
上面是官方回答;
下面是官方流程图;
其实看明白是一回事,会用又是一回事了。
用来设置sturts的功能
<struts>
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.i18n.reload" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="base" extends="struts-default" abstract="true">
<global-allowed-methods>regex:.*global-allowed-methods>
package>
struts>
这个配置文件是可以有多个的,就相当于不同的包里有不同的文件。
<struts>
<package name="sy" extends="base" namespace="/sy">
<action name="/demo_*" class="com.liwangwang.web.DemoAction" method="{1}" >
<result name="rs">/rs.jspresult>
action>
package>
struts>
全局配置,有多少配置文件都得引用
<struts>
<include file="struts-default.xml">include>
<include file="struts-base.xml">include>
<include file="struts-sy.xml">include>
struts>
列如:
我在这个界面点击后能够调用到相对应的方法
来,先看一看jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<h3>动态调用方法h3>
<a href="sy/demo_add.action">adda>
<a href="sy/demo_del.action">dela>
body>
html>
因为我们在这个地方配置了方法的传递重点
<struts>
<package name="sy" extends="base" namespace="/sy">
<action name="/demo_*" class="com.liwangwang.web.DemoAction" method="{1}" >
<result name="rs">/rs.jspresult>
action>
package>
struts>
那么java代码
public class DemoAction {
public String add() {//从_add的方法中获取到了这个的方法名
System.out.println("add方法启动了");
return "rs";
}
public String del() {
System.out.println("del方法启动了");
return "rs";
}
}
如此就能实现动态调用了
我们先建一个实体类
public class cal {
private String num1;
private String num2;
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getNum2() {
return num2;
}
public void setNum2(String num2) {
this.num2 = num2;
}
@Override
public String toString() {
return "cal [num1=" + num1 + ", num2=" + num2 + "]";
}
}
一个DemoAction 的实现接口ModelDriven
public class DemoAction implements ModelDriven<cal>{
private cal cal1 = new cal();
public String accept1() {
System.out.println("cal1:"+cal1);
return "rs";
}
@Override
public cal getModel() {
return cal1;
}
}
jsp前台代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<a href="sy/demo_accept1.action?num1=20&&num2=5">accept1a>
body>
html>
结果为:
DemoAction的内容
public class DemoAction {
private cal cal2 ;
private String sex;
public cal getCal2() {
return cal2;
}
public void setCal2(cal cal2) {
this.cal2 = cal2;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String accept2() {
System.out.println("cal2:"+cal2);
return "rs";
}
public String accept3() {
System.out.println("sex:"+sex);
return "rs";
}
}
然后重点,jsp界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<a href="sy/demo_accept2.action?cal2.num1=20&&cal2.num2=5">accept2a>
实体类.属性 来赋值 -->
<a href="sy/demo_accept3.action?sex=nv">accept3a>
body>
html>
其实如果用的是set/get方法传参的话,
就不需要任何操作,直接在跳转界面引用就行
因为解耦很少有人用,所以也就不过多讲解,
按我的看法的话就是对request等作一个更深的一个剖析
OK,那么就重点讲一下耦合.
其实也就是实现ServletRequestAware,或ServletResponseAware接口
public class DemoAction implements ServletRequestAware {
HttpServletRequest req;
private cal cal1 = new cal();
public String accept1() {
System.out.println("cal1:"+cal1);
req.setAttribute("cal1", cal1);
return "rs";
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
req = arg0;
}
}
也是一样的,只不过这个不需要用到实现接口的来说
public class DemoAction {
private cal cal1 = new cal();
public String accept1() {
System.out.println("cal1:"+cal1);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("cal1", cal1);
return "rs";
}
}
嘛,其实每个知识点都很简单的,额,为什么看起来这么多,咱也不知道
Thanks♪(・ω・)ノ希望对大家有所帮助