在动态web项目中,没有使用框架时,只是简单的jsp访问servlet实现增删改查,

无论是哪个方法都需要经过Servlet中的doGet()方法或doPost()方法,我们可以在链接中附带参数进行区分,

但是这样doGet()方法或doPost()方法中的代码就会非常长,不方便查看和管理。

有两种解决办法:

1、定义多个Servlet,显然这样也比较繁琐。

2、利用简单的反射对代码进行优化

我们还是用在链接中附带参数的方法,向后台传递一个请求参数oper(页面中使用了EL表达式,JSTL标签,JQuery和AJAX)

 <table>
<c:choose>
<c:when test="${not empty userList }">
<tr><th>id</th><th>姓名</th><th>密码</th><th>邮箱</th><th>操作</th></tr>
<c:forEach var="user" items="${userList }">
<tr><td>${user.userid }</td><td>${user.username }</td>
<td>${user.password }</td><td>${user.useremail }</td>
<td><a href='<c:url value="/LoginServlet?oper=detail&userId=${user.userid }"></c:url>'>详情</a>
<a href='<c:url value="/LoginServlet?oper=edit&userId=${user.userid }"></c:url>'>修改</a>
<a onclick="delConfirm(${user.userid })">删除</a></td></tr>
</c:forEach>
</c:when>
<c:otherwise></c:otherwise>
</c:choose>
</table>
 <script type="text/javascript">
function delConfirm(userid){
var b=confirm("确定删除吗?");
if(b){
$(function(){
$.post("${pageContext.request.contextPath}/LoginServlet?oper=delete",
{
userid:userid
},
function(data,status){
if(data==1){
alert("删除成功!");
}else{
alert("删除失败!");
}
window.location.href="${pageContext.request.contextPath}/LoginServlet?oper=login";
});
});
}
}
</script>

在后台获取请求参数oper,将其映射成函数,然后就可以在相应的函数中做处理了。

 protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 获取请求参数oper
String methodName = request.getParameter("oper");
// 获取当前类的Class对象
Class cla = this.getClass();
try {
// 通过方法名获取到方法的对象
// getDeclaredMethod需要两个参数,方法名和参数名,因为在java需要通过方法名和参数列表来确定一个方法
Method method = cla.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
// 设置方法的访问权限
method.setAccessible(true);
// 调用方法
// invoke用于调用一个方法,第一个参数时要调用方法的对象,剩下是调用方法需要的参数
method.invoke(this, request, response);
} catch (Exception e) {
e.printStackTrace();
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} public void detail(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//对请求和响应做处理
}
public void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//对请求和响应做处理
}
public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//对请求和响应做处理
}
public void delete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
//对请求和响应做处理
}
//登录
public void login(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
//对请求和响应做处理
}

用简单的反射优化代码(动态web项目)的更多相关文章

  1. 简单的文件上传的下载(动态web项目)

    1.在页面中定义一个form表单,如下: <!-- 文件上传 --> <form action="${pageContext.request.contextPath}/Fi ...

  2. springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试

    包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml <?xml version=" ...

  3. 创建一个动态Web项目:

    开始你的Eclipse,然后进入“文件”>“新建”>“动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后 ...

  4. 搭建Dynamic Web Project(动态web项目)的springmvc工程2

    本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic ...

  5. 搭建Dynamic Web Project(动态web项目)的springmvc工程1

    本文转载自:http://blog.csdn.net/typa01_kk/article/details/45902955 此篇创建Dynamic Web Projec工程(动态web项目),下一篇, ...

  6. IDEA创建动态Web项目

    1.IDEA创建动态Web项目 1.1.使用IDEA创建动态Web项目,选择Java Enterprise,记得选择服务器,我这里使用的时tomcat 1.2记得勾选Web Application,其 ...

  7. Velocity笔记--使用Velocity获取动态Web项目名的问题

    以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...

  8. Eclipse 中构建 Maven 项目的完整过程 - 动态 Web 项目

    进行以下步骤的前提是你已经安装好本地maven库和eclipse中的maven插件了(有的eclipse中已经集成了maven插件) 一.Maven项目的新建 1.鼠标右键---->New--- ...

  9. 用eclipse创建动态web项目手动生成web.xml方法

    建一个web项目,后来在用到web.xml文件时,才发现项目创建时没有自动创建web.xml文件. 在创建的项目上单击右键,然后单击java EE Tools下的用红线圈住的地方,然后查看你的WEB- ...

随机推荐

  1. JAVA学习第六十三课 — 关于client服务端 &amp;&amp; URL类 &amp; URLConnection

    常见的client和服务端 client:       浏览器:IE:弹窗体,猎豹:弹窗体.多标签,争强效果 服务端:       server:TomCat:1.处理请求 2.给予应答 想让TomC ...

  2. 使用 fastjson将字符串转为 list<map<string,object>>

    //先将字符串转为list 集合 json字符串linkConfJson List<Map> linkConf= JSONArray.parseArray(linkConfJson,Map ...

  3. UTI 唯一类型标识

    本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6657231   applicationdocumentationtypessys ...

  4. 二、Android应用的界面编程(二)布局管理器

    一.线性布局所有布局都可以作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件.实际上,我们完全可以用一个布局管理器嵌套到其他布局管理器中---因为布局管理器也继承了View ...

  5. PHPFastCGI进程管理器PHP

    PHP-FPM是一个PHPFastCGI进程管理器,是只用于PHP的.      PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中.必须将它patch到你的PH ...

  6. 玩点不同之CSS的BEM规范

    1.BEM引入背景 因为项目的业务逻辑发生重大变化,所以原来大半年的开发周期里做的事情基本上变成无用功.但是公司的项目上线时间依旧没有改变.剩下的时间只有区区的两个月,要做的功能是有社区+电商+核心业 ...

  7. vs报错找不到错在哪里!Validation failed for one or more entities

    今天在处理Entity Framework修改数据库时,报错: Validation failed for one or more entities. See 'EntityValidationErr ...

  8. 【BZOJ1803】Spoj1487 Query on a tree III 主席树+DFS序

    [BZOJ1803]Spoj1487 Query on a tree III Description You are given a node-labeled rooted tree with n n ...

  9. 《从零开始学Swift》学习笔记(Day 12)——说几个特殊运算符

    原创文章,欢迎转载.转载请注明:关东升的博客   除了一些常用的运算符,还有一些其他的: •      引用号(.):实例调用属性.方法等操作符. •      问号(?):用来声明可选类型. •   ...

  10. java基础:父类与子类之间变量和方法的调用

    1)父类构造函数 java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的,而且父类的静态初始化代码 块总是会被执行,接着调用父类的一个或者多个构造器执行初 ...