JavaWeb_(Struts2框架)Ognl小案例查询帖子

 

 

  此系列博文基于同一个项目已上传至github  传送门

  JavaWeb_(Struts2框架)Struts创建Action的三种方式  传送门

  JavaWeb_(Struts2框架)struts.xml核心配置、动态方法调用、结果集的处理  传送门

  JavaWeb_(Struts2框架)Log4j的配置以及解决中文乱码  传送门

  JavaWeb_(Struts2框架)参数传递之接收参数与传递参数  传送门

  JavaWeb_(Struts2框架)Ognl小案例查询帖子  传送门

  JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型  传送门

  JavaWeb_(Struts2框架)拦截器interceptor  传送门

 

 

  创建paste帖子表

 

 

 

CREATE TABLE `strutstest`.`paste` (
  `id` VARCHAR(50) NOT NULL,
  `answer` INT NULL,
  `offer` INT NULL,
  `title` VARCHAR(300) NULL,
  `content` VARCHAR(300) NULL,
  PRIMARY KEY (`id`));
创建paste表.sql

 

  添加假数据

  

 

 

INSERT INTO `strutstest`.`paste` (`id`, `answer`, `offer`, `title`, `content`) VALUES ('1', '1', '1', '1title', '1content');
INSERT INTO `strutstest`.`paste` (`id`, `answer`, `offer`, `title`, `content`) VALUES ('2', '2', '2', '2title', '2content');
INSERT INTO `strutstest`.`paste` (`id`, `answer`, `offer`, `title`, `content`) VALUES ('3', '3', '3', '3title', '3content');
INSERT INTO `strutstest`.`paste` (`id`, `answer`, `offer`, `title`, `content`) VALUES ('4', '4', '4', '4title', '4content');
假数据.sql

 

 

  创建查询帖子

  Dao层

package com.Gary.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.Gary.domain.Paste;
import com.yl.lain.utils.C3p0DataSourceUtils;

public class PasteDao {

    public List<Paste> findAllPaste() throws SQLException {
        
        QueryRunner runner = new QueryRunner(C3p0DataSourceUtils.getDataSource());
        String sql = "select * from paste";
        
        return runner.query(sql, new BeanListHandler<Paste>(Paste.class));
    }

}
PasteDao.java

 

  Domain层

package com.Gary.domain;

public class Paste {

    private String id;
    private Integer ansnum;
    private Integer offer;
    private String title;
    private String content;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Integer getAnsnum() {
        return ansnum;
    }
    public void setAnsnum(Integer ansnum) {
        this.ansnum = ansnum;
    }
    public Integer getOffer() {
        return offer;
    }
    public void setOffer(Integer offer) {
        this.offer = offer;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    
}
Paste.java

 

  Service层

package com.Gary.service;


import java.sql.SQLException;
import java.util.List;

import com.Gary.dao.PasteDao;
import com.Gary.domain.Paste;


public class PasteService {

    public List<Paste> findAllPaste() throws SQLException {
        PasteDao pasteDao = new PasteDao();
        return pasteDao.findAllPaste();

    }

    
    
}
PasteService.java

 

   Web层

package com.Gary.web;


import java.util.List;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.Gary.domain.Paste;
import com.Gary.service.PasteService;

public class PasteAction extends ActionSupport{

    
    public String getAllPaste() throws Exception {
        
        PasteService pasteService = new PasteService();
        List<Paste> pasteList = pasteService.findAllPaste();
        
        ActionContext.getContext().put("pasteList", pasteList);
        System.out.println(pasteList);
        
        return "index";
    }

    
    
}
PasteAction.java

 

  struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    
    
    
<struts>

    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    <!-- name:配置包名 namespace:给action的访问路径定义一个命名空间 -->
    <package name="MyPackage" namespace="/" extends="struts-default">
        <!-- 增加动态方法调用的安全性 -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
    
        <!-- action:配置action类
            name:决定了action访问的资源名称  servlet:url-pattern 
            class:action的完整类名
            method:指定调用action中的哪个方法来去处理请求  -->
            
        <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
            <!-- 默认为转发  redirect设置为重定向  -->
            <result name="success" type="redirect">/index.html</result>
            <!-- 默认为转发 -->
            <result name="error">/login.jsp</result>
        </action>


        <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
        
        </action>
        
        <action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
            <!-- 转发到LoginActionDefault -->
            <result name="defaultAction" type="chain">LoginActionDefault</result>
            <!-- 重定向到Action(LoginAction_*) -->
            <result name="toLogin" type="redirectAction">
                <param name="actionName">LoginAction_login</param>
                
                <param name="username">${username}</param>
                <param name="password">${password}</param>
            </result>
        </action>
    </package>
    
    
    <package name="PastePackage" namespace="/" extends="struts-default">
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
            <result name="index">/index.jsp</result>
        </action>
    
    </package>
    
    
    
    
    
</struts>
struts.xml

 

 

  可以看到查询到4条帖子假数据,这4条数据已经通过ActionContext.getContext().put("pasteList", pasteList)存放到ActionContext域中。

  接下来通过Ognl与Struct标签,将帖子在前端动态的显示出来

                   <s:iterator value="pasteList" var="paste"></s:iterator>
                        <s:property value="ansnum" />
                        如果要访问的数据是包装类型,我们要加#
                        <s:property value="#user.username"/>
                        <s:if test="ansnum%2==0"></s:if>
                        <s:else></s:else>

  

  在index.jsp首页头部引入JSTL标签库

<%@taglib uri="/struts-tags" prefix="s"%>

 

  循环数据库中帖子表所有的数据

<s:iterator value="pasteList" var="paste"></s:iterator>  

<s:property value="ansnum" />

 

<s:iterator value="pasteList" var="paste">
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count"><s:property value="id"/></div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                <s:property value="offer"/>
                                <image src="images/bean.jpg" class="bean"> <span
                                 class="spanques"><s:property value="title"/></span>
                            </div>
                            <div class="qContent"><s:property value="content"/></div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    张大值
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>

                            </div>
                        </div>
                    </div>
                </s:iterator>

 

  通过访问http://localhost:8080/StrutsForum_Login/PasteAction_getAllPaste可以将数据库Paste帖子表的数据展示到首页index.jsp中

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<div class="dvhead">
    <div class="dvlogo">
        <a href="index.html">你问我答</a>
    </div>
    <div class="dvsearch">10秒钟注册账号,找到你的同学</div>
    <div class="dvreg">
        已有账号,立即&nbsp;<a href="login.html">登录</a>
    </div>
</div>
<div class="dvContent">
    <div class="dvquesleft">

        <div class="dvqstitle">
            <image class="imgbean" src="images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back"><ab href="">《《返回上一页</a></span>
        </div>
        <div class="dvtabhead">
            <div class="tabheads tabcurrent">全部问题</div>
            <div class="tabheads">我的问题</div>
            <div class="tabheads">关注问题</div>
            <div class="tabheads">问题标签</div>
        </div>
        <div class="tabContent">
            <div class="dvtags">
                <a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
            </div>
            <div class="tab">
                <s:iterator value="pasteList" var="paste">
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count"><s:property value="id"/></div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                <s:property value="offer"/>
                                <image src="images/bean.jpg" class="bean"> <span
                                 class="spanques"><s:property value="title"/></span>
                            </div>
                            <div class="qContent"><s:property value="content"/></div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    张大值
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>

                            </div>
                        </div>
                    </div>
                </s:iterator>

            </div>
            <div class="tab hidden">2</div>
            <div class="tab hidden">3</div>
            <div class="tab hidden">4</div>
        </div>
    </div>
    <div class="dvquesright">
        <div>
            <buton class="btnques" onclick="location.href='add.html'">提个问题</buton>
        </div>
        <div class="dvorder">
            <div class="orderTitle">专家排行榜</div>
            <div class="users">
                <image class="userface" src="images/0.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/1.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/2.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/3.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/4.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/5.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/6.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>


        </div>

    </div>

</div>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    $(function()
    {

        $(".tabheads").click(function()
        {
            $(".tabheads").removeClass("tabcurrent").eq($(this).index()).addClass("tabcurrent");
            $(".tab").hide().eq($(this).index()).show();
        });
    });
</script>
<body>
</body>
</html>
index.jsp

 

  如果我们需要放置的是一个对象

  在PasteAction.java中放置一个User对象

        User user = new User();
        user.setUsername("Gary");
        user.setPassword("111");
        
        ActionContext.getContext().put("user", user);

 

  前台通过<s:property value="#user.username"/>访问user中的对象

                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    <s:property value="#user.username"/>
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>
                            </div>

 

  

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<div class="dvhead">
    <div class="dvlogo">
        <a href="index.html">你问我答</a>
    </div>
    <div class="dvsearch">10秒钟注册账号,找到你的同学</div>
    <div class="dvreg">
        已有账号,立即&nbsp;<a href="login.html">登录</a>
    </div>
</div>
<div class="dvContent">
    <div class="dvquesleft">

        <div class="dvqstitle">
            <image class="imgbean" src="images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back"><ab href="">《《返回上一页</a></span>
        </div>
        <div class="dvtabhead">
            <div class="tabheads tabcurrent">全部问题</div>
            <div class="tabheads">我的问题</div>
            <div class="tabheads">关注问题</div>
            <div class="tabheads">问题标签</div>
        </div>
        <div class="tabContent">
            <div class="dvtags">
                <a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
            </div>
            <div class="tab">
                <s:iterator value="pasteList" var="paste">
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count"><s:property value="id"/></div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                <s:property value="offer"/>
                                <image src="images/bean.jpg" class="bean"> <span
                                 class="spanques"><s:property value="title"/></span>
                            </div>
                            <div class="qContent"><s:property value="content"/></div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    <s:property value="#user.username"/>
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>
                            </div>
                        </div>
                    </div>
                </s:iterator>

            </div>
            <div class="tab hidden">2</div>
            <div class="tab hidden">3</div>
            <div class="tab hidden">4</div>
        </div>
    </div>
    <div class="dvquesright">
        <div>
            <buton class="btnques" onclick="location.href='add.html'">提个问题</buton>
        </div>
        <div class="dvorder">
            <div class="orderTitle">专家排行榜</div>
            <div class="users">
                <image class="userface" src="images/0.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/1.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/2.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/3.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/4.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/5.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>
            <div class="users">
                <image class="userface" src="images/6.gif" />
                <div class="dvuser">
                    <div class="userTitle">陈有龙</div>
                    <div class="userdeital">大牛6级 豆:14006</div>
                </div>
            </div>


        </div>

    </div>

</div>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    $(function()
    {

        $(".tabheads").click(function()
        {
            $(".tabheads").removeClass("tabcurrent").eq($(this).index()).addClass("tabcurrent");
            $(".tab").hide().eq($(this).index()).show();
        });
    });
</script>
<body>
</body>
</html>
index.jsp

 

  web层

package com.Gary.web;


import java.util.List;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.Gary.domain.Paste;
import com.Gary.domain.User;
import com.Gary.service.PasteService;

public class PasteAction extends ActionSupport{

    
    public String getAllPaste() throws Exception {
        
        PasteService pasteService = new PasteService();
        List<Paste> pasteList = pasteService.findAllPaste();
        
        User user = new User();
        user.setUsername("Gary");
        user.setPassword("111");
        
        ActionContext.getContext().put("pasteList", pasteList);
        ActionContext.getContext().put("user", user);
        System.out.println(pasteList);
        
        return "index";
    }

    
    
}
PasteAction.java

 

  service层

package com.Gary.service;


import java.sql.SQLException;
import java.util.List;

import com.Gary.dao.PasteDao;
import com.Gary.domain.Paste;


public class PasteService {

    public List<Paste> findAllPaste() throws SQLException {
        PasteDao pasteDao = new PasteDao();
        return pasteDao.findAllPaste();

    }

    
    
}
PasteService.java

 

  domain层

package com.Gary.domain;

public class Paste {

    private String id;
    private Integer ansnum;
    private Integer offer;
    private String title;
    private String content;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Integer getAnsnum() {
        return ansnum;
    }
    public void setAnsnum(Integer ansnum) {
        this.ansnum = ansnum;
    }
    public Integer getOffer() {
        return offer;
    }
    public void setOffer(Integer offer) {
        this.offer = offer;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    
}
Paste.java

 

  dao层

package com.Gary.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.Gary.domain.Paste;
import com.yl.lain.utils.C3p0DataSourceUtils;

public class PasteDao {

    public List<Paste> findAllPaste() throws SQLException {
        
        QueryRunner runner = new QueryRunner(C3p0DataSourceUtils.getDataSource());
        String sql = "select * from paste";
        
        return runner.query(sql, new BeanListHandler<Paste>(Paste.class));
    }

}
PasteDao.java

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    
    
    
<struts>

    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    <!-- name:配置包名 namespace:给action的访问路径定义一个命名空间 -->
    <package name="MyPackage" namespace="/" extends="struts-default">
        <!-- 增加动态方法调用的安全性 -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
    
        <!-- action:配置action类
            name:决定了action访问的资源名称  servlet:url-pattern 
            class:action的完整类名
            method:指定调用action中的哪个方法来去处理请求  -->
            
        <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
            <!-- 默认为转发  redirect设置为重定向  -->
            <result name="success" type="redirect">/index.html</result>
            <!-- 默认为转发 -->
            <result name="error">/login.jsp</result>
        </action>


        <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
        
        </action>
        
        <action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
            <!-- 转发到LoginActionDefault -->
            <result name="defaultAction" type="chain">LoginActionDefault</result>
            <!-- 重定向到Action(LoginAction_*) -->
            <result name="toLogin" type="redirectAction">
                <param name="actionName">LoginAction_login</param>
                
                <param name="username">${username}</param>
                <param name="password">${password}</param>
            </result>
        </action>
    </package>
    
    
    <package name="PastePackage" namespace="/" extends="struts-default">
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
            <result name="index">/index.jsp</result>
        </action>
    
    </package>
    
    
    
    
    
</struts>
struts.xml

 

posted @ 2019-09-28 16:37 Cynical丶Gary 阅读(...) 评论(...) 编辑 收藏