1.导入jar包
a.struts2-core-2.1.8.1.jar-Struts2核心包,是Struts框架的“外衣。
b.xwork-core-2.1.6.jar-Struts2核心包,是WebWork内核。
c.ognl-2.7.3.jar-用来支持ognl表达式的,类似于EL表达式,功能比EL表达式强大的多。
d.freemarker-2.3.15.jar-freemarker是比jsp更简单好用,功能更加强大的表现层技术,用来替代jsp的。
e.commons-fileupload-1.2.1.jar-用于实现文件上传功能的jar包。
2.web.xml配置struts2前端控制器Filter
配置的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern> <!--/*表示所有的请求都要经过该过滤器 -->
</filter-mapping>
</web-app>
3.写action类
action类就是普通的类,属性有get和set方法,就可以自动传递。
需要有个execute()方法,返回"success"和"fail"
4.src下建立struts.xml配置文件
配置简单例子如下:
<struts>
<package name="hellopkg" extends="struts-default" namespace="/day01">
<action name="welcome" class="action.WelcomeAction">
<result name="success">/jsp/welcome.jsp</result>
<result name="fail">/jsp/nameform.jsp</result>
</action>
</package>
</struts>
5.jsp页面(用el表达式显示数据)
<%@ 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>标题</title>
</head>
<body>
name的值是:${name }
</body>
</html>
6.(补充1)Struts2提供的方便之处
a.数据的自动的封装
根据页面组件的name属性,自动封装到Action中对应的name属性中
在Jsp页面<input name=”name” type=”text”/>
在action中会自动给属性private String name 赋值。但是注意要有name对应的getter和setter方法。
b.数据的自动的传递
Action中得属性会在jsp页面可以直接用EL表达式拿到
Action中属性private String name;
在jsp页面上可以直接${name}的到对应的值
7.(补充2)struts.xml配置中的<package><namespace><result>
A.<package>作用是为<action>分组,<struts>标签下可有多个<package>,下列是对<package>下属性的介绍:
1)name="helloworld"
唯一的标识,表示包名为helloworld
2)extends="struts-default"
继承的包名,一般继承Struts2默认提供的struts-default包,该包中定义了很多Struts2应用必须的组件(比如:拦截器);
该package声明的位置在struts2-core-2.1.8.jar/struts-default.xml文件中
3)namespace用来设置该包中的action的地址的命名空间。
namespace="/" 表示根命名空间,Action的访问路径如下即可:
http://localhost:8080/struts01_1/welcome.action
如果namespace="/day01"之后,Action访问路径为:
http://localhost:8080/struts01_1/day01/welcome.action
B.<action>作用是指明每个请求对应的Action类之间的对应关系,<package>下可有多个<action>。
下面是<action>标签的属性介绍:
1)name="welcome"
表示请求的名字为welcome(即welcome.action)
2)class="com.tarena.action.WelcomeAction"
指定了对应的Action类。
3)method="xxx"
用于指定在对应的类中要执行的方法名,该方法的返回值必须是String类型(规定)
public String xxx(){......}
<action>标记可以增加method=""属性,用来指定执行哪个方法,如果没有这个属性,默认执行execute()方法。
C.<result>
1)name="success"
该result的名称,Action返回哪一个result的name值,意味着要转发到哪一个result 所对应的JSP地址。
8.(补充3)解决用户绕过Action直接访问jsp,
如何解决用户绕过ActionServlet,直接访问jsp文件的问题。
8.1.将所有jsp文件拷贝到WEB-INF目录下。
因为WEB-INF目录中的内容不能直接访问,但能转发过来
8.2.<action name="nameform">中只有name属性,没有class属性,
Struts框架会默认为该<action>添加一个class,
作用是转发到对应的<result name="success">中指定的页面。
9.使用JSTL在页面显示数据
jsp中的设置如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link type="text/css" rel="stylesheet" media="all" href="../styles/global.css" />
<link type="text/css" rel="stylesheet" media="all" href="../styles/global_color.css" />
</head>
<body>
</body>
</html>