用简单的反射优化代码(动态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- ...
随机推荐
- std::condition_variable(3)复习
#include <iostream> // std::cout #include <thread> // std::thread #include <mutex> ...
- [MongoDB]学习笔记--Linux 安装和运行MongoDB
背景知识 MongoDB 是用C++写的, 开源的, NoSQL(Not Only SQL)文档数据库. 特点:high performance(高性能), high availability(高可靠 ...
- D - Find a way
D - Find a way Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- Android系统移植与调试之------->如何修改Android系统默认显示【开发者选项】并默认打开【USB调试】和【未知来源】开关
今天有个用户对[设置]有个特殊的要求,即: 1.开机的时候默认显示[开发者选项]并打开[USB调试]开关 ([Developer options]-->[USB debugging]) 2 ...
- studio显示Surface: getSlotFromBufferLocked: unknown buffer: 0xa2a58be0
根据查询外网资料来看,出现这个错误的原因大致是换个模拟器或者物理机就可以了. 因为我使用的是安卓6.0,貌似都会出现这类的问题. 但是不影响程序运行.
- 如何删除github中的仓库?
使用Github管理项目确实有些好处,但删除仓库(repositories)确实不太好找到. 首先进入要删除的仓库,点击右下角的“settings” 然后拉到页面最下面在danger zone 按“d ...
- windows 和rhel,centos双系统安装
1:首先确保你先安装为windows系统,为indows7以上的把. 2:安装好为indows系统后,进入系统后把磁盘分区,分出足够的空间为安装linux. 3:再为windows下使用软碟通等工具制 ...
- 【AWS】AWS云计算赋能数字化转型专题研讨会圆满落幕
大会精彩回顾:查看原文 大会使用的PPT下载地址:点击下载
- List Slice in Python(Compared with Java)
Python: 在Python中, 对于list, 切片会返回一个新的list, 而不会改变原有的list. 注意这儿说的"不会改变原有的list"指的是下面的这种情况: a = ...
- 使用PLSQL Developer和DbVisualizer、SQLDBx查询oracle数据库时出现乱码
使用PLSQL Developer和DbVisualizer查询oracle数据库时,出现查询数据中文乱码情况. 查看了一下数据库编码格式select * from v$nls_parameters; ...