您的位置:首页 > 编程语言 > Java开发

16_Struts2.x概述

2013-01-15 13:38 288 查看
16.1 Struts 2.x 简介

16.1.1 Struts 2简介

起源于webwork

16.1.2 Struts2与WebWork2的关系

struts2就是webwork2

16.2 第一个Struts2实例

16.2.1 下载Struts2类库

16.2.2 登录功能Action

LoginAction.java

package com.uikoo9.action;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action {
private String account;
private String password;

public String execute() throws Exception {
if("hello".equalsIgnoreCase(account) && "1234".equals(password))
return SUCCESS;

return LOGIN;
}

//getters and setters
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}


16.2.3 Struts2配置文件

位于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>
<package name="main" extends="struts-default">
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="loginPerson" class="com.opensymphony.xwork2.Action。LoginAction">
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>


16.2.4 JSP登录页面

success.jsp

<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="struts" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsp template</title>
<struts:head theme="ajax"/>
</head>

<body>
登录成功,欢迎你,<struts:property value="account"/>
</body>
</html>


struts2支持主题,上例使用ajax主题,会自动加载struts2中的dojo库

login.jsp

<%@ page language="java" import="java.util.*"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="struts"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsp template</title>
<struts:head theme="ajax" />
</head>

<body>
<struts:form action="loginPerson">
<struts:label value="登录系统"></struts:label>
<struts:textfield name="acount" label="帐号"></struts:textfield>
<struts:password name="password" label="密码"></struts:password>
<struts:submit value="登录"></struts:submit>
</struts:form>
</body>
</html>


16.2.5 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>Struts2</display-name>

<!-- struts2-prepare&execute -->
<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>

<!-- welcome -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


16.2.6 更改.action后缀

在web.xml中<filter>中添加

<init-param>
<param-name>struts.action.extension</param-name>
<param-value>action</param-value>
</init-param>


更改action部分即可

16.3 Struts2工作流程

16.3.1 Struts2工作流程

16.3.2 Struts2的线程安全

Struts1的Action是线程不安全的,因为只有一个实例,

Struts2的Action是线程安全的,因为有多个实例,而且不会浪费资源。

16.3.3 程序入口FilterDispatcher

16.4 Struts2配置文件

16.4.1 struts.properties

在struts2-core-2.3.8.jar中的org.apache.struts2下有default.properties,也就是默认的配置文件

16.4.2 struts.xml

核心的配置文件,而且struts.properties可以配置在struts.xml中

其中,

<constant>配置struts2的属性,等同于struts.properties

<include>配置多个struts2配置文件

16.4.3 配置package

<package>类似于对象,可以继承

16.4.4 配置命名空间

<package>还可以配置namespace属性。如果配置了namespace="namespace1",那么访问时需要加上namespace。例如namespace1/person.action

16.5 Action详解

16.5.1 ActionSupport类

一般Action继承这个类,实现了很多方法。

16.5.2 Action接口

Action接口中只实现了execute()方法

16.5.3 不继承任何类的Action

可以不实现Action接口,只要有public String execute()方法就可以了

16.5.4 Action的可执行方法

只要方法没有参数,并且返回String就是可执行方法,

可以这样调用login!login.action,login!logout.action

16.5.5 通过URL执行Action的方法

通过action!method.action的方式访问

16.5.6 将执行方法配置到Action

struts.xml中

每个method配置一个action,要添加method属性

通过通配符实现这种效果

<!-- 不使用通配符 -->
<action name="loginPerson" class="com.uikoo9.action.LoginAction" method="login">
<result name="success">/welcome.jsp</result>
<result name="login">/login.jsp</result>
</action>
<action name="logoutPerson" class="com.uikoo9.action.LoginAction" method="logout">
<result name="success">/welcome.jsp</result>
<result name="logout">/logout.jsp</result>
</action>

<!-- 使用通配符 -->
<action name="*Person" class="com.uikoo9.action.LoginAction" method="{1}">
<result name="success">/welcome.jsp</result>
<result name="{1}">/{1}.jsp</result>
</action>


16.6 Struts2的零配置

16.6.1 通过@注解实现Action零配置

需要添加struts2-convention-plugin-2.3.8.jar这个包

AnnotatedAction.java

package com.uikoo9.action;

import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.opensymphony.xwork2.Action;

@Namespace(value = "/test")
@Results({
@Result(name = "success", location = "/success.jsp"),
@Result(name = "login", location = "/login.jsp")
})
public class AnnotatedAction implements Action {
public String execute() throws Exception {
return "login";
}

public String add(){
return "success";
}

public String login(){
return "login";
}
}


16.6.2 web.xml中指定Action目录

需要在web.xml中添加如下内容,指定注解的Action

web.xml

<init-param>
<param-name>actionPackages</param-name>
<param-value>com.uikoo9.action.</param-value>
</init-param>


16.6.3 零配置的Action的访问方式

目前只能以action!method.action的形式访问

16.7 Action中使用POJO

16.7.1 图书管理Action

BookAction.java

package com.uikoo9.action;

import java.util.ArrayList;
import java.util.List;

import com.uikoo9.model.Book;

public class BookAction{
public static List<Book> bookList = new ArrayList<Book>();
private String title;
private Book book;

public String initAdd(){
return "initAdd";
}

public String add(){
bookList.add(book);
title = "<br/><br/>添加书籍成功<br/><br/>";

return "success";
}

public String list(){
return "list";
}

public String clear(){
bookList.clear();
title = "<br/><br/>清空书籍列表成功<br/><br/>";

return "list";
}

//getters and setters
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}

public static List<Book> getBookList() {
return bookList;
}
}


16.7.2 图书实体Book类

Book.java

package com.uikoo9.model;

import java.util.Date;

public class Book {
private String name;
private String author;
private Date publishedDate;

//getters and setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Date getPublishedDate() {
return publishedDate;
}
public void setPublishedDate(Date publishedDate) {
this.publishedDate = publishedDate;
}
}


16.7.3 通配符配置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>
<package name="demo2" extends="struts-default">
<action name="*Book" class="com.uikoo9.action.BookAction" method="{1}">
<result>/successBook.j</result>
<result name="{1}">/{1}Book.jsp</result>
<result name="input">/initAddBook.jsp</result>
<result name="list">/listBook.jsp</result>
</action>
</package>
</struts>


16.7.4 JSP添加,列表页面

initAddBook.jsp

<%@ page language="java" import="java.util.*"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>initAddBook.jsp</title>
</head>

<body>
<a href='<s:url action="initAddBook"></s:url>'>添加书籍</a>
<a href='<s:url action="listBook"></s:url>'>书籍列表</a>
<a href='<s:url action="clearBook"></s:url>'>清空书籍列表</a>

<s:form action="addBook">
<s:label value="添加书籍"></s:label>
<s:textfield name="book.name" label="书名"></s:textfield>
<s:textfield name="book.author" label="作者"></s:textfield>
<s:textfield name="book.publishedDate" label="出版日期"></s:textfield>
<s:submit value="添加"></s:submit>
</s:form>
</body>
</html>


<s:url>默认还会添加地址栏参数,可以使用以下配置禁用添加

struts.url.includeParams=none

listBook.jsp

<%@ page language="java" import="java.util.*"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><s:property value="title" escape="false" />
</title>
</head>

<body>
<table>
<tr>
<th>书名</th>
<th>作者</th>
<th>出版日期</th>
</tr>
<s:iterator id="book" value="bookList">
<tr>
<td>${ book.name }</td>
<td>${ book.author }</td>
<td>${ book.publishedDate }</td>
</tr>
</s:iterator>
</table>
</body>
</html>


16.8 本章小结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: