黑马程序员技术交流社区
标题:
综合练习_用户管理Servlet优化
[打印本页]
作者:
zhouyan19901008
时间:
2018-10-15 19:18
标题:
综合练习_用户管理Servlet优化
本帖最后由 zhouyan19901008 于 2018-10-15 19:46 编辑
综合练习_用户管理Servlet优化
1.需求分析
用户查询、添加、删除、修改等功能需要很多S
ervlet来处理,但是处理都是和User相关的操作
,因此我们希望使用一个servlet完成所有商品相关的操作,实现代码的简单优化
2.简单优化 -- 逻辑判断方式
实现步骤:
1. 修改页面路径
查询所有用户:
<
a
href=
"
${
pageContext.request.contextPath
}
/userServlet?method=findAll"
"
>
查询所有用户信息
</
a
>
查询指定用户:
<
a
href=
"
${
pageContext.request.contextPath
}
/userServlet?method=findById&id=
${
user.id
}
"
>
修改
</
a
>
2. 编写UserServlet. 根据传递的参数method不同,调用Servlet中
相应
的方法.
package
cn.itcast.web.servlet;
import
cn.itcast.domain.User;
import
cn.itcast.service.UserService;
import
cn.itcast.service.impl.UserServiceImpl;
import
javax.servlet.ServletException;
import
javax.servlet.annotation.
WebServlet
;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
import
java.lang.reflect.InvocationTargetException;
import
java.lang.reflect.Method;
import
java.util.List;
/**
*
用户管理
Servlet
*/
@WebServlet
(
"/userServlet"
)
public class
UserServlet
extends
HttpServlet {
protected void
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
try
{
//1.
获取
method
参数值
String methodStr = request.getParameter(
"method"
);
//2.
根据参数值
,
调用对应的方法
if
(
"findAll"
.equals(methodStr)){
findAll(request,response);
}
else if
(
"findById"
.equals(methodStr)){
findById(request,response);
}
}
catch
(Exception e) {
e.printStackTrace();
}
}
/**
*
根据
id
查询指定用户信息
*/
public void
findById(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
//1.
获取查询用户的
id
String id = request.getParameter(
"id"
);
//2.
调用
service
查询
,
返回
User
对象
UserService service =
new
UserServiceImpl();
User user = service.findUserById(id);
//3.
将查询的
User
添加到
reqeust
域中
request.setAttribute(
"user"
,user);
//4.
请求转发到
update
页面
request.getRequestDispatcher(
"/update.jsp"
).forward(request,response);
}
/**
*
查询所有用户信息
*/
public void
findAll(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
//1.
调用
UserService
完成查询
UserService service =
new
UserServiceImpl();
List<User> users = service.findAll();
//2.
将
list
存入
request
域
request.setAttribute(
"users"
,users);
//3.
转发到
list.jsp
request.getRequestDispatcher(
"/list.jsp"
).forward(request,response);
}
protected void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
doPost(request, response);
}
}
3.高级优化 -- 基于反射机制方式
实现步骤
1. 修改页面路径
查询所有用户:
<
a
href=
"
${
pageContext.request.contextPath
}
/userServlet?method=findAll"
"
>
查询所有用户信息
</
a
>
查询指定用户:
<
a
href=
"
${
pageContext.request.contextPath
}
/userServlet?method=findById&id=
${
user.id
}
"
>
修改
</
a
>
2.
编写UserServlet. 根据传递的参数method不同,使用反射机制,调用相应的方法
@WebServlet
(
"/userServlet"
)
public class
UserServlet
extends
HttpServlet {
protected void
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
try
{
//1.
获取
method
参数值
String methodStr = request.getParameter(
"method"
);
//2.
根据参数值
,
调用对应的方法
//
反射
//2.1
获取类的
Class
字节码对象
Class clazz=
this
.getClass();
//2.2
获取类的方法
Method method = clazz.getMethod(methodStr,HttpServletRequest.
class
,HttpServletResponse.
class
);
//2.3
执行方法
method.invoke(
this
,request,response);
}
catch
(Exception e) {
e.printStackTrace();
}
}
作者:
hguilin
时间:
2018-10-16 12:51
研哥牛逼
作者:
黑马啸西风
时间:
2018-10-18 18:00
有才,有深度,有内涵。研哥果然是黑马大神。
作者:
TomGe
时间:
2018-10-18 18:38
研个总结到位,分析的透彻
小花送上。
作者:
奥斯托洛夫斯基
时间:
2018-10-18 18:44
哇,学习了学习了,受教了受教了,大神请不要断更
作者:
天亮1
时间:
2018-10-18 18:58
石开哥
作者:
项老师
时间:
2018-10-18 18:59
研个总结到位,分析的透彻!6666
作者:
天亮1
时间:
2018-10-18 19:04
石开哥,总结详细, 易懂
作者:
鸟语花香
时间:
2018-10-19 13:37
大神大神
作者:
hguilin
时间:
2018-10-19 19:59
在此看见石开哥的文章实属荣幸呢
作者:
我开心你随意
时间:
2018-10-25 16:08
厉害
作者:
斑马斑马四条腿
时间:
2018-11-11 14:07
石开哥流弊 (破音)!
作者:
getMax
时间:
2018-11-13 07:28
大神啊,初出茅庐的小弟我对大哥的敬仰之情,犹如滔滔江水连绵不绝
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2