今天开始学习struts2技术,现在struts2的技术已经超过了struts1,所以本人就没有学习struts1了,当然这个肯定不会影响我们后面的学习,先来看一下工程的目录结构:

说明:

queryAction.java就是struts2中的Action类:代码如下:

package com.struts.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.struts.bean.UserBean;
import com.struts.service.UserService; public class queryAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private UserBean userBean = new UserBean();
private String id; public String getId(){
return id;
} public void setId(String id){
this.id = id;
} public UserBean getUserBean() {
return userBean;
} public void setUserBean(UserBean userBean) {
this.userBean = userBean;
} //struts2中继承ActionSupport类,重写execute方法,这里的返回值是一个字符串类型,具体的说明到后面再说:
public String execute() throws Exception {
try{
//将查询结果放到request域中
HttpServletRequest request = ServletActionContext.getRequest();
UserService userService = new UserService();
request.setAttribute("userBean", userService.queryUser(id));
//setUserBean(userDb.queryUser(id));//这行代码相当于上面的三行代码,因为struts2具有属性的注入功能
return "result";
}catch(Exception e){
return "error";
}
} }

下面就是UserBean类:

package com.struts.bean;

public class UserBean {

private String id;
private String name;
private String birth;
private String age;
private String sex; public UserBean(){
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
} }

这个类没什么好说的了,



再来看一下数据库接口:UserDBImpl

package com.struts.db.impl;

import java.util.ArrayList;

import com.struts.bean.UserBean;

public interface UserDBImpl {

public void init();
public ArrayList<UserBean> getData(); }

然后看一下数据库接口的实现类:

package com.struts.db;

import java.util.ArrayList;

import com.struts.bean.UserBean;
import com.struts.db.impl.UserDBImpl; public class UserDB implements UserDBImpl{ ArrayList<UserBean> userList = new ArrayList<UserBean>(); public void init(){
for(int i=0;i<10;i++){
UserBean userBean = new UserBean();
userBean.setAge(i+"");
userBean.setBirth(i+"");
userBean.setId(i+"");
userBean.setName("jiangwei");
userBean.setSex("男");
userList.add(userBean);
}
} public ArrayList<UserBean> getData(){
return userList;
} }

这里就没有用数据库来访问数据了,我们是用一个list来模拟数据的

再来看一下业务层的接口:

package com.struts.service.impl;

import com.struts.bean.UserBean;

public interface UserServiceImpl {

public UserBean queryUser(String id);

}
业务层接口的实现类:
package com.struts.service; import java.util.ArrayList; import com.struts.bean.UserBean;
import com.struts.db.UserDB;
import com.struts.db.impl.UserDBImpl;
import com.struts.service.impl.UserServiceImpl; public class UserService implements UserServiceImpl{ public UserBean queryUser(String id){ UserDBImpl userDb = new UserDB();
userDb.init();
ArrayList<UserBean> userList = userDb.getData();
if(userList == null){
return null;
} if(id == null){
return null;
}
for(int i=0;i<userList.size();i++){
if(id.equals(userList.get(i).getId())){
return userList.get(i);
}
}
return null;
} }

主要就是通过用户的id来查询用户的所有信息

这样分层的结构,看上去一点都不乱,很清晰,而且各个层之间的访问用接口来实现,降低了各个类之间的耦合性。

下面就来看看配置了:

在项目src目录下新建一个struts.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts" extends="struts-default">//为action指定报名
<action name="query" class="com.struts.action.queryAction">//为action指定名称
<result name="result">/success.jsp</result>//action访问成功的跳转页面
<result name="error">/error.jsp</result>//action访问错误的跳转页面
</action>
</package>
</struts>

注意

1.  这里的action:name=“query"这个是给action起一个名字,在后面的jsp页面中要用到

2.  这里的result:name定义的是上面的queryAction类中的execute方法的不同返回值,跳转到不同的页面,所以那个返回字段就决定了跳转的页面,

再来看一下给struts2配置全局的信息,在web.xml中配置:

  <filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

配置struts2的过滤器和地址映射

在来看一下jsp页面的内容:

queryUser.jsp内容如下:

 <body>
<s:form action="query">
<s:textfield label="书名" name="id"></s:textfield>
<s:submit value="查询"></s:submit>
</s:form>
</body>

注意:这里用到了struts2的标签库

1. 这里的action="query"中的名称必须和struts.xml文件中action:name的名称一样,就是表单跳转的action

2. 这里的name="id"中的id必需是queryAction中的id属性,在queryAction中id的属性值为空的,这个就是struts2自动的属性值注入功能

看一下成功跳转的页面success.jsp:

<body>
id:<c:out value="${userBean.id}"></c:out>
name:<c:out value="${userBean.name}"></c:out>
sex:<c:out value="${userBean.sex}"></c:out>
age:<c:out value="${userBean.age}"></c:out>
birth:<c:out value="${userBean.birth}"></c:out>
</body>

这个是用jstl标签输出用户的所有信息,这里userBean是存放在request域中的对象,在queryAction类中进行存放的.

然后不要忘了导入struts2所需的jar包,上面的图片上有所有的jar包

这样第一个struts应用就配置好了,在浏览器中输入:http://localhost:8080/..../queryUser.jsp就可以访问了。

总结:这个例子只是带我们进入struts2的世界的起点,struts2内部的更多的应用后续还需讲解

Struts2入门的第一个应用的更多相关文章

  1. struts2入门第一天----------配置环境

    放假之后有空就开始走上了三大框架的学习.第一个选择的框架是struts2.首先第一步当然是环境的配置.去apache官网把struts2下载下来.然后在自己的开发工具下创建一个web项目.在lib文件 ...

  2. Struts2 入门

    一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ...

  3. Struts2入门3 深入学习

    Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ...

  4. Struts2入门2 Struts2深入

    Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...

  5. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  6. struts2入门程序

    struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ...

  7. Storm入门之第一章

    Storm入门之第一章 1.名词 spout龙卷,读取原始数据为bolt提供数据 bolt雷电,从spout或者其他的bolt接收数据,并处理数据,处理结果可作为其他bolt的数据源或最终结果 nim ...

  8. struts2框架(1)---struts2入门

    struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...

  9. [java]struts2入门

    摘要 本文是struts2入门,配置教程.如何在IntelJ Idea中进行手动配置.在使用idea新建struts2web项目的时候,在下载jar包的过程中,下载失败,没办法就直接手动进行下载jar ...

随机推荐

  1. 39th 迷迷糊糊 二豆玩不转了

    今天学的语法 1.   #  {} . format()的传送作用 请从键盘获取一个整数,求他的平方根,要求: 1 如果这个整数是大于等于0,则直接打印其平方根 2 否则, 打印其绝对值的平方根 x ...

  2. python_django_celery的初步使用

    celery学习:http://docs.jinkan.org/docs/celery/ 什么是celery? Celery 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系 ...

  3. rest framework之渲染器

    一.内置渲染器 REST框架包括许多内置的Renderer类,它们允许你使用各种媒体类型返回响应.还支持定义你自己的自定义渲染器. 内置渲染器的使用 1.全局设置 可以使用DEFAULT_RENDER ...

  4. Android 为点击事件添加震动效果

    Android 点击Button 实现震动效果 学习自:网络 Overview 在Android 的点击效果中,遇到震动效果的还是很多的. 接下来就让我们看一下如何实现震动效果. 所需要的权限 如果我 ...

  5. 【在线工具】java开发常用在线工具

    转自:常用工具页面 Java源代码搜索 Grepcode是一个面向于Java开发人员的网站,在这里你可以通过Java的projects.classes等各种关键字在线查看它对应的源码,知道对应的pro ...

  6. 小程序解析HTML5

    最近做项目的时候碰到一个问题,就是调用接口获取信息到页面上,内容与HTML5标签一起获取过来了.一起显示在微信端上.一般都是二次开发才有可能出现这种问题.通过查找方法,找到了一个可以把HTML5标签转 ...

  7. 构造——cf1213E

    分情况讨论,构造很简单 #include<bits/stdc++.h> using namespace std; #define N 200005 ],t[]; int n,s1,s2,t ...

  8. tarjan强连通缩点——cf711D

    模板题 #include<bits/stdc++.h> using namespace std; #define ll long long #define N 500005 #define ...

  9. python之-sqlite3

    在这些 URL 中,hostname 表示 MySQL 服务所在的主机,可以是本地主机(localhost),也可以是远程服务器.数据库服务器上可以托管多个数据库,因此 database 表示要使用的 ...

  10. NGINX配置之一:日志篇

    打开nginx.conf配置文件: vi /usr/local/nginx/conf/nginx.conf 日志部分内容: 日志生成的到Nginx根目录logs/access.log文件,默认使用“m ...