极限岛论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 7205|回复: 0

javaweb总结由浅入深(二)--项目实战(severlet版本)

[复制链接]

12

主题

12

帖子

1300万

积分

超级版主

Rank: 8Rank: 8

积分
13000138

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2016-8-21 16:55:17 | 显示全部楼层 |阅读模式
本帖最后由 宫梁 于 2016-8-21 17:14 编辑

先说一下要点:  
1、如何编写一个severlet并让它运行起来。
2、在serverlet如何巧用类的继承,来模拟struts2的请求拦截,大幅度简化代码。
3、使用数据库工具类(模拟轻量版rom框架,hibernate),来实现一个用户查询功能

项目实战(severlet版本)
    相信大家现在做项目已经很少使用severlet了,而是使用各种开源的前后台框架。
    但是在这个框架流行的时代,severlet真的是落后了吗,真的代表开发效率低下,BUG频多吗?
    个人感觉不是的,废话不多说先看一下今天我们要实现怎样一个效果


图1、效果图:


然后我的代码结构:


下面是第一个要点,如何编写一个severlet并且让我们的severlet

新建一个类,我这里用的是TestServlet
要想让它成为一个severlet
1、这个类必须要继承HttpServlet父类,想要运行我们的代码必须要重写doGet和doPost方法
2、要在web.xml中注册这个servelt,代码如下:

TestServlet.java代码
package jxd;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
        
                        /**
         *
         */
        private static final long serialVersionUID = -7912044737473703481L;

                        @Override
                        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                                        throws ServletException, IOException {
                                doPost(req,resp);
                                // TODO Auto-generated method stub
                                //super.doGet(req, resp);
                        }
                        
                        @Override
                        protected void doPost(HttpServletRequest req, HttpServletResponse response)
                        throws ServletException, IOException {
                                  DB db = new DB();

                                  String sql1 = "select * from jxd_user";
                                  try {
                                   List rs = db.executeQuery(sql1,null);
                                   if(rs.size()>0){
                                          req.setAttribute("list",rs);
                                   }
                                   db.closeConn();
                                   req.getRequestDispatcher("userlist.jsp").forward(req, response);
                                  } catch (SQLException e) {
                                   // TODO Auto-generated catch block
                                   e.printStackTrace();
                                  }
                        }
}


web.xml新增

  <!-- servlet的配置 -->
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>jxd.TestServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>


第二个要点,如何巧用类的继承,实现struts的拦截效果
大家可以在我的代码上看到有一个MyHtttpServlet,对这个就是关键,先看一下代码
public class MyHtttpServlet  extends HttpServlet{
        private static final long serialVersionUID = 8754618740079363359L;

        public void doGet(HttpServletRequest request, HttpServletResponse response) {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) {

                    String szAction = request.getParameter("action")==null?"": request.getParameter("action");
                    Method method;
                        try {
                                
                                method = this.getClass().getMethod(szAction, new Class[]{HttpServletRequest.class,HttpServletResponse.class});                        
                                method.invoke(this, new Object[]{request,response});
                        
                        
                        }catch (Exception e) {
                                e.printStackTrace();
                        }
    }

}


非常简单,然后对我们的TestServlet进行改造。
public class TestServlet extends MyHtttpServlet {
                        protected void queryList(HttpServletRequest req, HttpServletResponse response)
                        throws ServletException, IOException {
                                  DB db = new DB();

                                  String sql1 = "select * from jxd_user";
                                  try {
                                   List rs = db.executeQuery(sql1,null);
                                   if(rs.size()>0){
                                          req.setAttribute("list",rs);
                                   }
                                   db.closeConn();
                                   req.getRequestDispatcher("userlist.jsp").forward(req, response);
                                  } catch (SQLException e) {
                                   // TODO Auto-generated catch block
                                   e.printStackTrace();
                                  }
                        }
}


如果没有java基础的朋友理解这块可能会有一定的难度,可以看一下类的多态,就会理解的容易一些

简单来说就是抽象了一个公共的父类来重写dopost,我们写的所有的severlet继承它,它来接受所有请求,并解析请求传来的action参数,来执行与参数值相同名字的函数。
第三个要点,我们要把所有的数据库相关的操作抽出来,写成一些工具类,网络上也有很多例子,下次会把我的公共类分享一下。
代码我也共享出来吧


file:///C:\Users\宫梁\AppData\Roaming\Tencent\Users\1006615960\QQ\WinTemp\RichOle\TX6Z6P@5M5@GEY%XFYD2(WP.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|金信代论坛 ( 京ICP备15014929号 )

GMT+8, 2021-10-18 11:39 , Processed in 0.019315 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表