在javaweb编程中框架的应用和servlet的增删改查优化(用一个servelt)
我们在学html的时候已经学习了框架,但是当在web中做后台的时候用到了框架,确早已经忘记它的模样了,下面来简单介绍一下框架并和增删改查结合到一起的一个小实例来展现出框架的明确性吧!
一 框架的介绍
1.框架是一种在一个网页中显示多个网页的技术,通过超链接可以为框架之间按建立内容之间的联系,实现页面导航的功能,它的主要作用是在一个浏览器窗口显示多个网页,并且所显示的内容可以不同。
2.框架的基本结构
<frameset>
<frame>
<frame>
</frameset>
注:使用框架集的页面的<body>标记将被<frameset>标记代替,然后用<frame>标记去定义框架结构
3<frameset>框架集的属性 都是在标签里定义的,比如<frameset border=”1”>
frameborder=”1px” 框架集是否有边框
framespacing=”40” 框架集边框的宽度
bordercolor=”” 设置边框的颜色
cols 左右分割边框
rows 上下分割边框
4<frame>框架属性 和框架集的定义一样
src=”URL”
name=””
frameborder=0 不显示边框
frameberder=1 显示边框
scrolling=”yes”添加滚动条
scrolling=”no” 不添加滚动条
scrolling=”auto” 自动添加滚动条
noresize不可设置尺寸
marginwidth 设置框架的宽度
marginheight 设置框架的高度
<noframe> 不支持框架标记
2.实例中框架的使用
下面这个实例是要写一个简单的后台管理页面,分为三部分,login,links ,content,这三部分别是用框架搭起来的,在一个框架集中分为上下两个框架,login和*,下面的又为左右的分割为links和content,代码为:
<frameset border="1px" rows="120,*" cols="*">
<frame name="top" src="${pageContext.request.contextPath}/mainFrame/top.jsp">
<frameset rows="*" cols="150,*">
<frame name="left" src="${pageContext.request.contextPath }/mainFrame/left.jsp">
<frame name="main" src="${pageContext.request.contextPath }/mainFrame/main.jsp">
</frameset>
</frameset>
从上面的代码中可以看出框架只是搭建一个框架,框架里的内容都是通过src联系到某个页面调出来的结果。
其中top的页面中的代码为:
<body bgcolor="#99cc99">
<div align="center">
<h1>欢迎你进入后台管理界面!</h1>
</div>
</body>
left的代码为:
<body bgcolor="thistle">
<div>
<a href="${pageContext.request.contextPath}/adminsServlet.do?oper=all" target="main">管理员管理</a>
</div>
</body>
main的代码为从数据库中调出来的数据在main这个框架中显示出来,因为框架只是用来搭建框架的,所以要用另一个来显示。
这样一个框架就搭建出来了,接下来我们来实现这样一个功能,当点击管理员管理的时候,把从数据库中调出来的所有数据用表格的形式显示在main这个框架中,我们可以想到当点击的时候会通过超链接跳转到servlet层,去访问数据库,把查询的内容再通过跳转到jsp页面显示出来,即是显示到main的框架中。
从left.jsp中可以看出超链接的是到一个servlet层,并传了个参数过去,即open=all,在servelt层中去判断,代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String oper = request.getParameter("oper");
System.out.println(oper);
if ("".equals(oper) || oper == null) {
System.out.println("没有此操作");
} else if ("all".equals(oper)) {
findAll(request, response);
}
}
public void findAll(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Admins> entities = adminsService.findAll();
request.setAttribute("entities", entities);
request.getRequestDispatcher("/WEB-INF/admin/listAdmins.jsp").forward(
request, response);
}
}
这样,就把从数据库中查询的内容放到了作用域中,并跳转到了另一个界面--- listAdmins.jsp,把存入到作用域中的数据读取并显示,那么,listAdmins.jsp的显示代码为:
<body>
<table border="1px" cellpadding="0" cellspacing="0">
<thead>
<th>序号</th>
<th>姓名</th>
<th>密码</th>
<th>操作</th>
</thead>
<c:forEach items="${requestScope.entities}" var="entity">
<tr>
<td>${entity.id}</td>
<td>${entity.name}</td>
<td>${entity.pass}</td>
<td>
<a href="${pageContext.request.contextPath}/adminsServlet.do?oper=update&id=${entity.id}">编辑</a>
<a href="${pageContext.request.contextPath}/adminsServlet.do?oper=delete&id=${entity.id}">删除</a>
</td>
</tr>
</c:forEach>
<tr>
</tr>
</table>
<body/>
从上面的代码中可以看出在每一行的后面都有一个编辑和删除,并且都是在提交的时候提交到servelt中去,都在一个servelt中使用,这是对我来说最大的收获。减少了servelt,而且使结构更加的清晰,编辑和删除和查询的模块一样,都在一个servlet中去判断,
else if ("update".equals(oper)) {
update(request, response);
} else if("delete".equals(oper)){
delete(request,response);
}
private void delete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
if("".equals(id) || id==0){
}else{
boolean flag = adminsService.delelteById(id);
if(flag){
request.getRequestDispatcher("/adminsServlet.do?oper=all")
.forward(request, response);
}
}
}
}
private void update(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String sid = request.getParameter("id");
if ("".equals(sid) || sid == null) {
} else {
Admins entity = adminsService.findById(new Integer(sid));
request.setAttribute("entity", entity); request.getRequestDispatcher("/WEB-INF/admin/updateAdmins.jsp")
.forward(request, response);
}
当点击编辑的时候是跳转到另一个界面,并且显示要编辑的信息,所以跳转到了updateAdmins.jsp页面上,显示要编辑的信息,代码为:
<body>
<form action="${pageContext.request.contextPath}/adminsServlet.do?oper=updateOk" method="post">
<table >
<tr>
<td>姓名</td>
<td><input type="text" value="${entity.name}" name="name"></td>
</tr>
<tr>
<td><input type="submit" value="提交"/></td>
<td><input type="reset" value="重置"/></td>
</tr>
</table>
<input type="hidden" value="${entity.id}" name="id"/>
</form>
</body>
可能大家有一个疑问,为什么有id,因为要编辑的时候要指定编辑的是哪一行,所以要传一个隐藏的id过去,因为id就这个作用,当显示到用户面前的又是一个页面,是用来修改的,当修改完之后,用表单再次提交到servelt中,从数据库更新后直接返回到查询的页面:
else if ("updateOk".equals(oper)) {
updateOk(request, response);
}
private void updateOk(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
int okid = Integer.parseInt(request.getParameter("id"));
if ("".equals(okid) || okid == 0) {
// 跳转到 一个 错误信息的界面
} else {
Admins entity = adminsService.findById(okid);
entity.setName(name);
boolean flag = adminsService.update(entity);
if (flag) {
request.getRequestDispatcher("/adminsServlet.do?oper=all")
.forward(request, response);
} else {
}
}
}
这样,做好了删改查的操作。以上的代码总体为:
public class AdminServlet extends HttpServlet {
private AdminsService adminsService = new AdminsServiceImpl();
private static final long serialVersionUID = 1L;
public AdminServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String oper = request.getParameter("oper");
System.out.println(oper);
if ("".equals(oper) || oper == null) {
System.out.println("没有此操作");
} else if ("all".equals(oper)) {
findAll(request, response);
} else if ("update".equals(oper)) {
update(request, response);
} else if ("updateOk".equals(oper)) {
updateOk(request, response);
}else if("delete".equals(oper)){
delete(request,response);
}
}
private void delete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
if("".equals(id) || id==0){
}else{
boolean flag = adminsService.delelteById(id);
if(flag){
request.getRequestDispatcher("/adminsServlet.do?oper=all")
.forward(request, response);
}
}
}
private void updateOk(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
int okid = Integer.parseInt(request.getParameter("id"));
if ("".equals(okid) || okid == 0) {
// 跳转到 一个 错误信息的界面
} else {
Admins entity = adminsService.findById(okid);
entity.setName(name);
boolean flag = adminsService.update(entity);
if (flag) {
request.getRequestDispatcher("/adminsServlet.do?oper=all")
.forward(request, response);
} else {
}
}
}
public void findAll(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Admins> entities = adminsService.findAll();
request.setAttribute("entities", entities);
request.getRequestDispatcher("/WEB-INF/admin/listAdmins.jsp").forward(
request, response);
}
private void update(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String sid = request.getParameter("id");
if ("".equals(sid) || sid == null) {
} else {
Admins entity = adminsService.findById(new Integer(sid));
request.setAttribute("entity", entity);
request.getRequestDispatcher("/WEB-INF/admin/updateAdmins.jsp")
.forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
public void init() throws ServletException {
// Put your code here
}
}
}
显示的效果为: