zoukankan      html  css  js  c++  java
  • Struts2入门的第一个应用

    今天开始学习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内部的更多的应用后续还需讲解


  • 相关阅读:
    表达式的计算
    树、森林、与二叉树的转换
    线索二叉树
    表达式树
    js正则表达式处理表单
    kmp匹配算法
    SQL练习题
    ajax添加header信息
    mvc中webapi添加后没法访问 解决办法
    mysql修改表引擎Engine
  • 原文地址:https://www.cnblogs.com/roccheung/p/5797419.html
Copyright © 2011-2022 走看看