黑马程序员_Struts2部分笔记
来源:互联网 发布:俄罗斯方块软件 编辑:程序博客网 时间:2024/05/07 12:26
一.Struts2的开发环境和配置
1. 在MyEclipse中新建一个工程,在工程的src目录中新建一个struts.xml文件
内容为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Add packages here -->
</struts>
2. 在WebRoot/WEB-INF/lib目录中添加
struts2-core2-2.x.x.jar,
xwork.x.x.jar,
freemarker-2.3.x.jar,
commons-logging-1.1.x.jar,
commons-fileupload-1.2.1.jar
ognl-2.6.x.jar
至少这六个jar文件(可从http://struts.apache.org/download.cgi#struts2014下载struts-2.x.x-all.zip文件)
3. 配置web.xml文件,添加内容为
<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>
现在struts2的环境配置已经完成了。
二.简单的struts2程序
2.1.建立action
在src下建立一个包org.hwh.action,在包中建立一个java类Login
package org.hwh.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport
{
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String execute() throws Exception
{
if("123".equals(name)&&"hwh".equals(pass))
{
return SUCCESS;
}
else
return "fail";
}
}
程序说明:执行execute方法,返回success或fail
2.2.将此action配置到struts.xml文件中
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.action.extension" value="action"></constant>
<package name="org.hwh.struts2" namespace="" extends="struts-default">
<action name="login" class="org.hwh.struts2.Login">
<result name="success">/ok.jsp</result>
<result name="fail">/fail.jsp</result>
</action>
</package>
<!-- Add packages here -->
</struts>
程序解释:package节点中的name可以随便起,但是多个package的name不能重复
namespace作为访问此action时的路径,可以没有也可以是空字符,extends为继承的package名。
Action节点中的name是访问此action时的名字,class为action的包名,默认为ActionSupport,method默认执行execute方法。
Result节点中的name为execute方法的返回值,根据name的值跳转到不同页面,默认为success。
编写hello.jsp,ok.jsp,fail..jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
<title>-_-+</title>
</head>
<body>
<form action="login" method="post">
<input type="text" name="name" value="${name }"><br>
<input type="password" name="pass" value="${pass }"><br>
<input type="submit" value="ok">
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
</head>
<body>
<h1>OK!</h1>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
</head>
<body>
<h1>FAIL!</h1>
</body>
</html>
部署到tomcat中后在浏览器中输入
http://localhost:8080/Struts2/login或http://localhost:8080/Struts2/login.action 可以直接访问此action。如果不想.action想.xxx怎么办呢?
<constant name="struts.action.extension" value="xxx"></constant>
这样就可以.xxx了。
在浏览器中输入http://localhost:8080/Struts2/hello.jsp输入123,hwh提交给action页面显示OK!否则FAIL!
constant节点的其他属性
<!--指定请求action的后缀,默认为action -->
<constant name="struts.action.extension" value="hou"></constant>
<!--指定编码集 -->
<constant name="struts.i18n.encoding" value="GBK"></constant>
<!--设置浏览器是否缓存静态内容,默认为true,开发阶段最好为false -->
<constant name="struts.serve.static.browserCache" value="false"></constant>
<!--当struts的配置文件修改后,系统是否自动重新加载该文件(不用重启服务器),默认为false,开发阶段最好为true-->
<constant name="struts.configuraction.xml.reload" value="true"></constant>
<!--开发过程中打印更详细的错误信息-->
<constant name="struts.devMode" value="true"></constant>
<!--默认的试图主题-->
<constant name="struts.ui.theme" value="simple"></constant>
<!--与spring集成时,指定有spring负责action对象的创建-->
<constant name="struts.objectFactory" value="spring"></constant>
<!--设置struts2是否支持动态方法调用,默认为true -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<!-- 文件上传总大小限制 -->
<constant name="struts.multipart.maxSize" value="10701096"></constant>
2.3.action名称的搜索顺序
<package name="org.hwh.struts2" namespace="" extends="struts-default">
现在的namespace为空,即使你在访问的时候在浏览器中输入
http://localhost:8080/Struts2/sss/224/waa/login.action也没有问题,也可以执行此action
如果namespace=”/hou”那么访问此action时就要输入http://localhost:8080/Struts2/hou/login
在/hou下可以再加n层不存在的目录也能访问到action,但是如果/hou不存在就不行了。如果该namespace不存在则会去找默认的namespace(为空的),如果没有定义为空的namespace的package则会出错。
2.4. result配置的各种视图转发类型
<result type=””> </result>
Type的类型有dispacher(默认),redirect(客户端跳转),redirectAction(跳转到action),plainText(可显示源码的跳转)
其中跳转到的action在同一个package配置中直接用就可以,如果不在同一package下
<result type=”redirectAction”>
<param name=”actionName”>actionName</param>
<param name=”namespace”>namespace</param>
</result>
2.5. 为Action属性注入值
<package name="org.hwh.struts2" namespace="/hou" extends="struts-default">
<action name="login" class="org.hwh.struts2.Login">
<param name="name">123</param>
<param name="pass">hwh</param>
<result name="success">/ok.jsp</result>
<result name="fail">/fail.jsp</result>
</action>
</package>
说明:action下的param节点可为action中的属性赋值。赋值之后跳转到的jsp页面中可以用${name},${pass}获得值。注意:param中的name的值应该与action中属性的名称一致。
三.Struts2的处理流程
说明:当用户请求到达时,filter会过滤用户请求。默认情况下,请求无后缀或后缀名为
.action时(请求为一个action)这个请求会被转入struts2框架中处理,否则struts2则会略过此请求。当请求进入框架时会先进过一系列的拦截器,然后到action,根据action的返回值返回到jsp或html页面。Struts1与struts2不同的地方在于struts2中的action是线程安全的。
四.Struts2中使用多个配置文件
在struts.xml文件中使用include:
<struts>
<include file="a.xml"></include>
<include file="b.xml"></include>
</struts>
注意:被包含的文件中<package>的name是唯一的。
- 黑马程序员_Struts2部分笔记
- 黑马程序员_Java高新技术部分学习笔记
- 黑马程序员----c基础笔记----函数部分
- 黑马程序员----c基础笔记----数组部分
- 黑马程序员-Java 基础知识1. (笔记部分总结)
- 黑马程序员-Java基础知识5(部分笔记总结)
- [黑马程序员]06[C语言]指针部分笔记总结-01
- [黑马程序员]07[C语言]指针部分笔记总结-02
- [黑马程序员]15[Foundation框架] Foundation部分学习笔记小结
- 黑马程序员 基础部分 (0
- 黑马程序员-基础部分(1
- 黑马程序员 高新部分
- 黑马程序员-基础知识部分总结
- 黑马程序员_循环部分
- 黑马程序员--基础加强部分
- 黑马程序员_java 基础部分
- 黑马程序员—集合部分
- 黑马程序员----------OC基础部分
- 2011-2012 基础C#面试题目及答案
- linux下获取进程绝对路径的方法
- Kumofs 简介,部署和特性介绍(一)
- SQL2008 Merge关键字用法与简例
- Android的MVC模式
- 黑马程序员_Struts2部分笔记
- 第三次上课的感受
- Qt+ARM开发日志
- andorid中使用activemq出错
- 常用正则表达式
- Android深入浅出之Binder机制
- OpenMP3.0的新特性Task指令基础
- 2.入学
- error C2248: cannot access private member declared in class