用简单的反射优化代码(动态web项目)
在动态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项目)的更多相关文章
- 简单的文件上传的下载(动态web项目)
1.在页面中定义一个form表单,如下: <!-- 文件上传 --> <form action="${pageContext.request.contextPath}/Fi ...
- springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试
包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml <?xml version=" ...
- 创建一个动态Web项目:
开始你的Eclipse,然后进入“文件”>“新建”>“动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后 ...
- 搭建Dynamic Web Project(动态web项目)的springmvc工程2
本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic ...
- 搭建Dynamic Web Project(动态web项目)的springmvc工程1
本文转载自:http://blog.csdn.net/typa01_kk/article/details/45902955 此篇创建Dynamic Web Projec工程(动态web项目),下一篇, ...
- IDEA创建动态Web项目
1.IDEA创建动态Web项目 1.1.使用IDEA创建动态Web项目,选择Java Enterprise,记得选择服务器,我这里使用的时tomcat 1.2记得勾选Web Application,其 ...
- Velocity笔记--使用Velocity获取动态Web项目名的问题
以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...
- Eclipse 中构建 Maven 项目的完整过程 - 动态 Web 项目
进行以下步骤的前提是你已经安装好本地maven库和eclipse中的maven插件了(有的eclipse中已经集成了maven插件) 一.Maven项目的新建 1.鼠标右键---->New--- ...
- 用eclipse创建动态web项目手动生成web.xml方法
建一个web项目,后来在用到web.xml文件时,才发现项目创建时没有自动创建web.xml文件. 在创建的项目上单击右键,然后单击java EE Tools下的用红线圈住的地方,然后查看你的WEB- ...
随机推荐
- PHP连接MySQL数据库操作
(原文链接:http://www.cnblogs.com/csensix/archive/2012/05/23/2515494.html) 方法一:普通方法(面向过程) 首先,先做出如下假设(也适用与 ...
- A Simple Problem with Integers(线段树)
F - A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:% ...
- G - Oil Deposits(dfs)
G - Oil Deposits Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- C#实体类序列化为XML
这两天,应要求做一个C/S的小程序,考虑到程序简洁小巧,存数据的方式不使用数据库,而是直接存入XML文档中保存.为了把复杂实体类里面的属性存入XML,我们可以使用C#有的反射机制,做一个简单的通用工具 ...
- 明文post密码
w 作者:余天升链接:https://www.zhihu.com/question/20306241/answer/14696464 看到上面几位的回答,我真心觉得,当前信息安全保护的意识过于低下,连 ...
- 地址栏输入url按回车之后发生了什么
地址栏输入url按回车之后发生了什么? 1.我们在浏览器中输入网址 2.浏览器到DNS查找域名对应的IP地址 3. 浏览器打开TCP连接(默认端口为80),向该IP的服务器发送一条HTTP请求,如果浏 ...
- spring(13)------全面深入解析spring的AOP
一,AOP的基本思想 AOP(Aspect Oriented Programming)翻译成中文的大意是面向切面编程,主要目的解决让不该牵扯在一起的代码分离开来. (1)认识AOP 应用程序中通常包含 ...
- Python定时执行脚本
最近测试hbase,老发现服务挂掉,自己不能及时发现,想了想,写了个脚本,让脚本每个小时执行一次,以便检测是否有服务挂掉,如果有服务挂掉,及时启动 import os import datetime ...
- (4.13)SQL Server profile使用、数据库优化引擎顾问使用
SQL Server profile使用技巧 介绍 经常会有人问profile工具该怎么使用?有没有方法获取性能差的sql的问题.自从转mysql我自己也差不多2年没有使用profile,忽然prof ...
- 关于“Cannot find any provider supporting AES/ECB/PKCS7Padding”问题的解决方案
出现这个问题的原因是:java自带的是PKCS5Padding填充,不支持PKCS7Padding填充 参考:https://stackoverflow.com/questions/20770072/ ...