struts2 之二

来源:互联网 发布:href javascript this 编辑:程序博客网 时间:2024/05/20 02:25

第一节ServletActionContext操作servletAPI

核心脉络: 

1.    ServletActionContext类介绍(可以打开源码)

2.    调用ServletActionContext的静态方法获得

a)     HttpServletRequest

b)     HttpServletResponse

c)     HttpSession

d)     ServletContext

3.    演示和回顾原始的ServletAPI的使用

重点:

1.    掌握原始的servletAPI的获取

难点:

1.    掌握原始的servletAPI的获取和使用

 

Javaee中的serlvetAPI的回顾

互动 : 通过点一个学生,说出一个自己知道为serlvetAPI对象,产生对象的作用,以及常用的方法。一个学生说完后自己点出下一个小伙伴说下一个对象……

 

HttpServletRequest


publicinterface HttpServletRequest

extends ServletRequest

Extendsthe ServletRequest interface to provide request information forHTTP servlets.

Theservlet container creates an HttpServletRequest object and passes it as an argument to theservlet's service methods (doGetdoPost, etc).

HttpServletResponse


publicinterface HttpServletResponse

extends ServletResponse

Extendsthe ServletResponse interface to provide HTTP-specificfunctionality in sending a response. For example, it has methods to access HTTPheaders and cookies.

Theservlet container creates an HttpServletResponse object and passes it as an argument to theservlet's service methods (doGetdoPost, etc).

Interface HttpSession


 HttpSession

Providesa way to identify a user across more than one page request or visit to a Website and to store information about that user.

Theservlet container uses this interface to create a session between an HTTPclient and an HTTP server. The session persists for a specified time period,across more than one connection or page request from the user. A sessionusually corresponds to one user, who may visit a site many times. The servercan maintain a session in many ways such as using cookies or rewriting URLs.

Interface ServletContext


ServletContext

Defines aset of methods that a servlet uses to communicate with its servlet container,for example, to get the MIME type of a file, dispatch requests, or write to alog file.

There isone context per "web application" per Java Virtual Machine. (A"web application" is a collection of servlets and content installedunder a specific subset of the server's URL namespace such as /catalog and possibly installed via a .war file.)

In thecase of a web application marked "distributed" in its deploymentdescriptor, there will be one context instance for each virtual machine. Inthis situation, the context cannot be used as a location to share globalinformation (because the information won't be truly global). Use an externalresource like a database instead.

The ServletContext object is contained within the ServletConfig object, which the Web server provides theservlet when the servlet is initialized.

 

Action获得servletAPI方式一

获得直接和servlet耦合的API:

ServletActionContext.getRequest()对应javax.servlet.http.HttpServletRequest
ServletActionContext.getResponse()
对应javax.servlet.http.HttpServletResponse
ServletActionContext.getServletContext()
对应javax.servlet.ServletContext
它的方法全都是static的。另外它所获得的ServletContext对象,就相当于Application
因为它的生命周期与Application生命周期是一样的,只要服务器不关闭,就都是有效的
ServletActionContext可以获得和容器绑定Request, Response, ServletContext对象
这里获得的都不是Map对象,所以在测试的时候,就必须要启动Tomcat服务器

 

/**

       * 方式一:通过ServletActionContext类提供的静态方法,获得原始的servletAPI

        *       直接和servlet耦合,测试需要依赖web容器

        *       需要设置响应头,需要获得原始的servletAPI

       */

       HttpServletRequest req=ServletActionContext.getRequest();

       HttpServletResponse resp=ServletActionContext.getResponse();

       HttpSession sin = req.getSession();

       ServletContext app = sin.getServletContext();

      

       req.setAttribute("req","request---req");

       sin.setAttribute("sin","session---sin");

       app.setAttribute("app","app---app");

       req.setAttribute("list", list);

第二节ActionContext操作ServletAPI

核心脉络: 

                  

1.    ActionContext类介绍(可以打开源码)

2.    介绍ServletActionContext和ActionContext的关系

4.    调用ServletActionContext的方法获得

a)     HttpServletRequest的Map封装

b)     HttpSession的Map封装

c)     ServletContext的Map封装

5.    演示Map形式的servletAPI的用法

重点:

1.    Map形式的serlvetAPI的获得

2.    理解和serlvet容器的解耦合

难点:

1.    掌握Map形式的serlvetAPI的用法

2.    理解和Map形式和原始servletAPI的对应关系

 

Action获得servletAPI方式二

单元测试在开发中是非常重要的一个环节
程序员在写完代码时,相应的单元测试也应写完整,否则你的代码就是不能让人信服的Struts2将Action与Servlet的API进行解耦之后,就使得单元测试变得非常容易了

比如HttpServletRequest对象,它是由Tomcat容器给我们提供的,我们自己产生不出来若Action中充斥者ServletAPI,哪怕仅一个,那么一般意义上的JUnit单元测试便无法进行。

而Struts2的Action已经脱离了ServletAPI,所以无需这两种方式,便可直接用JUnit测试

 

首先通过ActionContext类的静态getContext()方法获得当前线程相关的一个ActionContext实例
然后就可以通过该实例调用它的众多方法得到Servlet的一些API
publicObject get(Object key)方法,就相当于HttpServletRequest.getAttribute()
publicvoid put(Object key, Object value)
对应HttpServletRequest.setAttribute()
publicMap<String, Object> getParameters()
对应HttpServletRequest.getParameterMap()
publicMap<String, Object> getSession()
方法对应javax.servlet.http.HttpSession
session.put(Objectkey, Object value)
对应Servlet编程中的HttpSession.setAttribute(…)
也就是说,ActionContext能够获得三个Map类型的Request, Session, Application对象
ActionContext有一个好处,就是它已经将底层的Servlet进行了转化,比如它将session转化成Map
这样在测试时,Struts2便可脱离Servlet容器进行单纯的JUnit测试

 

/***

        * 方式二:ActionContext获得web对象,被封装为Mapweb对象

        * 完成和servlet的解耦合,获得的是被封装为Map的对象

        * **/

       ActionContext ac= ActionContext.getContext();

       Map<String,Object> sin=ac.getSession();

       Map<String,Object> app=ac.getApplication();

      

       ac.put("req", "req------req");

       sin.put("sin","session---sin");

       app.put("app", "app---app");

第三节通过接口间接或直接操作servletAPI

核心脉络: 

                  

1.    介绍RequestAware、SessionAware、ApplicationAware接口

2.    介绍IOC简单介绍

3.    实现Struts2框架通过IOC获得serlvetAPI

 

重点:

1     Map形式的serlvetAPI的获得

2     理解IOC的含义

难点:

1.    掌握通过IOC获得serlvetAPI

 

Action获得servletAPI方式三

互动:给说明IOC,自己找对象和通过红娘找对象

rg.apache.struts2.util.ServletContextAware接口它仅有个voidsetServletContext(javax.servlet.ServletContext context)方法通过该方法获得的ServletContext就相当于Application,二者生命周期都是相同的

以及org.apache.struts2.interceptor.ServletRequestAware接口同样有个void setServletRequest(javax.servlet.http.HttpServletRequestrequest)方法以及org.apache.struts2.interceptor.ServletResponseAware接口

同样有个void setServletResponse(javax.servlet.http.HttpServletRsponseresponse)方法使用方式及示例代码

此时需设置一个跟Servlet容器耦合的HttpServletRequest类型的request成员变量当执行完setServletRequest()方法,成员变量就被它的HttpServletRequest参数赋值了

该方法是由Struts2自动调用的,显然这是一种非常非常典型的依赖注入【DI】由Struts2自动将容器产生的HttpServletRequest对象set到我们应用中的变量上这样成员变量request就变成了容器所产生的HttpServletRequest对象了

接下来就可以正常的使用request了,使用方法与在Servlet中的使用方是一样的

 

 

public class UserAction2  implements RequestAware,

    SessionAware,ApplicationAware{

 

    private Map<String, Object>app;

    private Map<String, Object>sin;

    private Map<String, Object>req;

  

   @Override

    public void setApplication(Map<String, Object> application) {

       // TODO Auto-generated method stub

       this.app=application;

      

    }

    @Override

    public void setSession(Map<String, Object> session) {

       // TODO Auto-generated method stub

       this.sin=session;

    }

    @Override

    public void setRequest(Map<String, Object> request) {

       // TODO Auto-generated method stub

       this.req=request;

    }

 

 

 

第四节action结果映射

核心脉络:

1、  dispatcherforward跳转到jsp页面

2、  chainforward跳转到action

3、  redirect:重定向到jsp页面

4、  redirectAction:重定向到action

5、  plainText:直接将视图源码发给客户端

重点:

         1、重定向和forward跳转的区别

         2chainredirectAction的区别

难点:

         1dispatcherredirectAction

 

所有的type类型都已经在struts-default.xml中定义过了,每一个结果类型都有一个struts2中的java类相对应。

 

dispatcher

org.apache.struts2.dispatcher.ServletDispatcherResult

chain

com.opensymphony.xwork2.ActionChainResult

redirect

org.apache.struts2.dispatcher.ServletRedirectResult

redirectAction

org.apache.struts2.dispatcher.ServletActionRedirectResult

plainText

org.apache.struts2.dispatcher.PlainTextResult

 

如果想了解详情,可以直接通过类名查看源码,也可以直接从javadoc文档中查找。

 

 

 

dispatcher:

chain

例如:

 

 

redirect:

anchor表示锚链接,锚点。

redirectAction:

例如:

 

plainText

 

ResultsAction.java

 

package com.bjsxt.demo.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class ResultsAction extends ActionSupport {

 

    private Stringtype;

 

    public String getType() {

        returntype;

    }

 

    public void setType(String type) {

        this.type =type;

    }

 

    @Override

    public String execute()throws Exception {

        System.out.println("type = " +type);

        returntype;

    }

   

}

 

 

OtherAction.java

 

package com.bjsxt.demo.action;

 

import javax.servlet.http.HttpServletRequest;

 

import org.apache.struts2.ServletActionContext;

 

import com.opensymphony.xwork2.ActionSupport;

 

/**

 * 如果是forward跳转,就可以获取对上一个action的请求参数如果是redirect跳转,就不能获取对上一个action的请求参数

 *

 * @author Administrator

 */

public class OtherAction extends ActionSupport {

   

    private StringmyHello;

 

    public String getMyHello() {

        returnmyHello;

    }

 

    public void setMyHello(String myHello) {

        this.myHello =myHello;

    }

 

    @Override

    public String execute()throws Exception {

        System.out.println("你已经访问了OtherActionexecute()方法");

 

        HttpServletRequest req = ServletActionContext.getRequest();

        String typeStr = req.getParameter("type");

        System.out.println("typeStr = " +typeStr);

 

        String helloStr = req.getParameter("myHello");

        System.out.println("重定向请求参数:myHello = " +helloStr);

 

        return SUCCESS;

    }

 

}

 

 

struts.xml

 

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

 

<struts>

 

    <constantname="struts.enable.DynamicMethodInvocation"value="false"/>

    <constantname="struts.devMode"value="true"/>

   

    <packagename="resultPkg"namespace="/result"extends="struts-default">

        <actionname="resultAction"class="com.bjsxt.demo.action.ResultsAction">

            <!-- forward跳转到jsp页面 -->

            <!-- dispatcher(默认值),只能跳转到jsp -->

            <resultname="DIS"type="dispatcher">

                /success.jsp

            </result>

            <!-- forward跳转到一个action -->

            <!-- chain:跳转到javabean(应用控制器) -->

            <resultname="CHA"type="chain">

                <!-- forward到的action名称 -->

                <paramname="actionName">otherAction</param>

                <!-- forward到的action所在命名空间 -->

                <paramname="namespace">/other</param>

                <!-- forward到的action应该执行的方法,如果不设置,则默认为execute方法 -->

<!--                <param name="method"></param> -->

            </result>

            <!-- 重定向到jsp页面 -->

            <resultname="RED"type="redirect">

                /success.jsp

            </result>

            <!-- 重定向到javabean -->

            <!-- 重定向到一个action -->

            <resultname="REA"type="redirectAction">

                <!-- 要重定向到的action名称 -->

                <paramname="actionName">otherAction</param>

                <!-- 要重定向到的action所在命名空间 -->

                <paramname="namespace">/other</param>

                <!-- 所带参数 -->

                <paramname="myHello">myNameIsZhangSan</param>

            </result>

            <!-- 将结果页面按照源码返回给客户端 -->

            <resultname="PLA"type="plainText">

                <paramname="location">/pla_success.jsp</param>

                <paramname="charSet">utf-8</param>

            </result>

        </action>

    </package>

   

    <packagename="otherPkg"namespace="/other"extends="struts-default">

        <actionname="otherAction"class="com.bjsxt.demo.action.OtherAction">

            <!-- dispatcher表示forward到一个jsp页面 -->

            <resultname="success"type="dispatcher">

                /other/other_success.jsp

            </result>

        </action>

    </package>

   

</struts>

 

 

web.xml

 

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0">

  <display-name>struts_demo_002</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

  <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>*.action</url-pattern>

  </filter-mapping>

</web-app>

 

index.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    <ahref="result/resultAction.action?type=DIS">dispatcher</a><br>

    <ahref="result/resultAction.action?type=CHA">chain</a><br>

    <ahref="result/resultAction.action?type=RED">redirect</a><br>

    <ahref="result/resultAction.action?type=REA">redirectAction</a><br>

    <ahref="result/resultAction.action?type=PLA">plainText</a><br>

</body>

</html>

 

success.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    成功页面

</body>

</html>

 

pla_success.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    <%

        String basePath = request.getScheme() + "://"

            + request.getServerName() + ":" + request.getServerPort()

            + request.getContextPath() + "/";

    %>

    <%

        out.print(basePath);

    %>

</body>

</html>

 

other/other_success.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    otherAction的成功页面

</body>

</html>

 

 

第五节global results配置

 

AbcAction.java

 

package com.bjsxt.demo.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class AbcAction extends ActionSupport {

 

    private Stringpassport;

 

    public String getPassport() {

        returnpassport;

    }

 

    public void setPassport(String passport) {

        this.passport =passport;

    }

 

    @Override

    public String execute()throws Exception {

        System.out.println("AbcAction:passport = " +passport);

        if ("abcAdmin".equals(passport))

            return SUCCESS;

        System.out.println("AbcAction:你无权进行此操作");

        return"unauthorized";

    }

}

 

 

BcdAction.java

 

package com.bjsxt.demo.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class BcdAction extends ActionSupport {

 

    private Stringpassport;

 

    public String getPassport() {

        returnpassport;

    }

 

    public void setPassport(String passport) {

        this.passport =passport;

    }

 

    @Override

    public String execute()throws Exception {

        System.out.println("BcdAction:passport = " +passport);

        if ("bcdAdmin".equals(passport))

            return SUCCESS;

        System.out.println("BcdAction:你无权进行此操作");

        return"unauthorized";

    }

}

 

 

MyAction.java

 

package com.bjsxt.demo.action;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class MyAction extends ActionSupport {

 

    private Stringpassport;

 

    public String getPassport() {

        returnpassport;

    }

 

    public void setPassport(String passport) {

        this.passport =passport;

    }

 

    @Override

    public String execute()throws Exception {

        System.out.println("MyAction:passport = " +passport);

        if ("admin".equals(passport)) {

            return SUCCESS;

        }

        System.out.println("MyAction:你无权进行该操作");

        return"unauthorized";

    }

 

}

 

 

struts.xml

 

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

 

<struts>

 

    <constantname="struts.enable.DynamicMethodInvocation"value="false"/>

    <constantname="struts.devMode"value="true"/>

    <packagename="globalPkg"namespace="/abc"extends="struts-default">

        <global-results>

            <!-- 没有权限进行某项操作的时候,跳转到这个页面

            全局结果页面 -->

            <resultname="unauthorized"type="redirect">

                /unauthorized.html

            </result>

        </global-results>

        <actionname="abcAction"class="com.bjsxt.demo.action.AbcAction">

            <result>

                /abc_success.jsp

            </result>

        </action>

        <actionname="bcdAction"class="com.bjsxt.demo.action.BcdAction">

            <result>

                /bcd_success.jsp

            </result>

        </action>

    </package>

   

    <!-- 如果继承了包含全局results的包,则在本包中也可以使用 -->

    <packagename="myPkg"namespace="/my"extends="globalPkg">

        <actionname="myAction"class="com.bjsxt.demo.action.MyAction">

            <result>

                /success.jsp

            </result>

        </action>

    </package>

   

</struts>

 

 

index.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    <ahref="abc/abcAction.action?passport=abcAdmin">abcAdmin</a><br>

    <ahref="abc/abcAction.action?passport=zhangsan">zhangsan</a><br>

    <hr>

    <ahref="abc/bcdAction.action?passport=bcdAdmin">bcdAdmin</a><br>

    <ahref="abc/bcdAction.action?passport=lisi">lisi</a><br>

    <hr>

    <ahref="my/myAction.action?passport=admin">admin</a><br>

    <ahref="my/myAction.action?passport=wangwu">wangwu</a><br>

</body>

</html>

 

success.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    MyAction成功页面

</body>

</html>

 

abc_success.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    abc成功页面

</body>

</html>

 

bcd_success.jsp

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    bcd成功页面

</body>

</html>

 

unauthorized.html

 

<!DOCTYPEhtml>

<html>

<head>

<metacharset="UTF-8">

<title>Insert title here</title>

</head>

<body>

    权限不足!!!

</body>

</html>

 

第六节课程参考

核心脉络: 

1.    建立web项目

2.    建立entity实体类型

3.    建立Dao接口

4.    建立DaoImpl

5.    建立Service接口

6.    建立ServiceImpl

7.    建立Action

8.    完成Action配置

9.    发布,测试

重点:

1.    掌握struts2开发的基本步骤

2.    掌握struts2的基本配置规范

难点:

1.    Struts2的开发规范和配置

 

通过现场演示方式完成单表crud

建立实体类

    package cn.sxt.entity;

public class User {

    private int id;

    private Stringname;

    private Stringpwd;

    public User() {

        // TODO Auto-generated constructor stub

    }

    public User(String name,String pwd) {

        super();

        this.name = name;

        this.pwd = pwd;

    }

 

    public User(int id, String name, Stringpwd) {

        super();

        this.id = id;

        this.name = name;

        this.pwd = pwd;

    }

 

    public int getId() {

        returnid;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        returnname;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getPwd() {

        returnpwd;

    }

    public void setPwd(String pwd) {

        this.pwd = pwd;

    }

}

建立Dao接口

package cn.sxt.dao;

 

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import cn.sxt.entity.User;

import cn.sxt.util.BaseDao;

public class UserDao extends BaseDao{

    public User login(User u){

        String sql="select * from t_user where name=? and pwd=?";

        ResultSet rs = this.executeQuery(sql, u.getName(),u.getPwd());

        try {

            if(rs.next()){

                returnnew User(rs.getInt(1),rs.getString(2),rs.getString(3));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }finally{

            this.close();

        }

        return null;

    }public List<User> getList(){

        String sql="select * from t_user";

        List<User> list = new ArrayList<User>();

        ResultSet rs= this.executeQuery(sql);

        try {

            while(rs.next()){

                list.add(new User(rs.getInt(1),rs.getString(2),rs.getString(3)));

            }

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally{

            this.close();

        }

        return list.size()>0?list:null;

    }

    public int update(User u){

        String sql="update t_user set name=?,pwd=? where id=?";

        return this.executeUpdate(sql, u.getName(),u.getPwd(),u.getId());

    }

    public User getById(int id){

        String sql="select * from t_user where id=?";

        ResultSet rs = this.executeQuery(sql, id);

        try {

            if(rs.next()){

                returnnew User(rs.getInt(1),rs.getString(2),rs.getString(3));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }finally{

            this.close();

        }

        return null;

    }

   

}

 

实现service业务

 

package cn.sxt.service;

import java.util.List;

import cn.sxt.dao.UserDao;

import cn.sxt.entity.User;

public class UserService {

    private UserDaouserDao = new UserDao();

    public User login(User u){

        returnuserDao.login(u);

    }

    public List<User> getList(){

        returnuserDao.getList();

    }

    public int update(User u){

        returnuserDao.update(u);

    }

    public User getById(int id){

        returnuserDao.getById(id);

    }

}

 

实现Action功能

package cn.sxt.action;

import java.util.List;

import cn.sxt.entity.User;

import cn.sxt.service.UserService;

import com.opensymphony.xwork2.Action;

 

public class UserAction {

    private Useruser;

    private List<User>list;

    private UserServiceuserService = new UserService();

    //登录

    public String login(){

        User temp=userService.login(user);

        if(temp!=null){

            //list = userService.getList();

            return Action.SUCCESS;

        }

        return Action.LOGIN;

    }

    //获取用户列表

    public String list(){

        list = userService.getList();

        return Action.SUCCESS;

    }

    //根据id查询用户然后跳转到update.jsp

    public String toUpdate(){

        user = userService.getById(user.getId());

        return Action.SUCCESS;

    }

    //更新用户

    public String update(){

        int result=userService.update(user);

        if(result>0){

            return Action.SUCCESS;

        }

        return Action.ERROR;

    }

    public User getUser() {

        returnuser;

    }

    public void setUser(User user) {

        this.user = user;

    }

    public List<User> getList() {

        returnlist;

    }

    public void setList(List<User> list) {

        this.list = list;

    }

   

}                                                                     

 

配置struts.xml文件

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <packagename="user"extends="struts-default">

        <actionname="login"class="cn.sxt.action.UserAction"method="login">

            <resultname="success"type="redirectAction">list</result>

            <resultname="login">/login.jsp</result>

        </action>

        <actionname="list"class="cn.sxt.action.UserAction"method="list">

            <resultname="success">/list.jsp</result>

        </action>

        <actionname="toUpdate"class="cn.sxt.action.UserAction"method="toUpdate">

            <result>/update.jsp</result>

        </action>

        <actionname="update"class="cn.sxt.action.UserAction"method="update">

            <resulttype="redirectAction">list</result>

            <resultname="error">/error.jsp</result>

        </action>

    </package>

</struts>

 

 

参考代码:\struts01\01\课堂代码

 

0 0
原创粉丝点击