当前位置:Gxlcms > 数据库问题 > java web基础之mvc模式设计(一)--使用httpservlet实现mvc分层设计,DAO层使用的是dbutils实现与数据库的链接

java web基础之mvc模式设计(一)--使用httpservlet实现mvc分层设计,DAO层使用的是dbutils实现与数据库的链接

时间:2021-07-01 10:21:17 帮助过:3人阅读

 

三:项目中jsp文件的编写(jsp实质上就是一个servlet)

案例中用到最多的无非是HttpServletRequest  request,HttpServletResponse response这两个参数结合页面中的表单form以及转发方式等在页面和后台servlet之间传递数据

开始页面的jsp:index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.List" %>
  <%@ page import="com.guodiantong.mvc.domain.Customer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
  $(function(){
	$(".delete").click(function(){
		var content=$(this).parent().parent().find("td:eq(1)").text();
		var flag =confirm("确定要删除" + content + "的信息吗?");
		return flag;
	});  
  });
</script>
</head>
<body>

<form  action="query.do" method="post">
<table>
<tr>
    <td>CustomerName:</td>
    <td><input type="text" name=name></td>
 </tr>
 <tr>
    <td>Address:</td>
    <td><input type="text" name="address"></td>
  </tr>
  <tr>
     <td>Phone:</td>
     <td><input type="text" name="phone"></td>
  </tr>
   <tr>
     <td><input  type="submit" value="Query"></td>
     <td><a href="addCustomer.jsp">Add Customer123</a></td>   
   </tr>
</table>
</form>
<hr>
<br>

<% 
   List<Customer> customer=(List<Customer>)request.getAttribute("customers");
   if(customer!=null && customer.size()>0){
	%>
	  <table border="1" cellspacing="0" cellpadding="10">
  <tr>
  <th>id</th>
  <th>name</th>
  <th>address</th>
  <th>phone</th>
  <th>delete</th>
  <th>edit</th>
  </tr>
  

  <%
     for(Customer cust:customer)
     {
  %>  
      <tr>
    	<td><%=cust.getId() %></td>
    	<td><%=cust.getName() %></td>
    	<td><%=cust.getAddress() %></td>
    	<td><%=cust.getPhone() %></td>
    	<td><a class="delete" href="delete.do?id=<%=cust.getId()%>">delete</a></td>
    	<td><a class="edit"   href="edit.do?id=<%=cust.getId() %>">edit</a></td> 
      </tr>
  
  <% 	 
     }
  %>
     
<%	   
   }
%>

  
  
  </table>
</body>
</html>

  新增页面的jsp:addCustomer.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 



    <% Object msg=request.getAttribute("message");
    if(msg!=null){
    %>
    <%=request.getAttribute("message")%>
    <%	
    }
    
    %>
<form action="addCustomer.do" method="post">
 <table>
 <tr>
     <td>customerName:<input type="text" name="name"
      value="<%=request.getAttribute("name")==null? "":request.getAttribute("name") %>"></td>
 </tr>
 <tr>
     <td>address:<input type="text" name="address"
      value="<%=request.getAttribute("address")==null? "":request.getAttribute("address") %>"></td>
 </tr>
 <tr>
     <td>phone:<input type="text" name="phone"
     value="<%=request.getAttribute("phone")==null? "":request.getAttribute("phone") %>"></td>
 </tr>
 <tr>
     <td><input  type="submit" value="submit"></td>
     
 </tr>
 </table>
</form>
</body>
</html>

  编辑页面的jsp:edit.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ page import="com.guodiantong.mvc.domain.Customer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<% 
		Object msg = request.getAttribute("message");
		if(msg != null){
	%>
			<br>
			<font color="red"><%= msg %></font>
			<br>
			<br>
	<%
		}
		
		String id = null;
		String oldName = null;
		String name = null;
		String address = null;
		String phone = null;
		
		Customer customer = (Customer)request.getAttribute("customer");
		if(customer != null){
			id = customer.getId() + "";
			oldName = customer.getName();
			name = customer.getName();
			address = customer.getAddress();
			phone = customer.getPhone();
		}else{
			id = request.getParameter("id");
			oldName = request.getParameter("oldName");
			name = request.getParameter("oldName");
			
			address = request.getParameter("address");
			phone = request.getParameter("phone");
		}
	%>
	
	<form action="update.do" method="post">
	
		<input type="hidden" name="id" value="<%= id %>"/>
		<input type="hidden" name="oldName" value="<%= oldName %>"/>
	
		<table>
			<tr>
				<td>CustomerName:</td>
				<td><input type="text" name="name" 
					value="<%= name %>"/></td>
			</tr>
			<tr>
				<td>Address:</td>
				<td><input type="text" name="address" 
					value="<%= address %>"/></td>
			</tr>
			<tr>
				<td>Phone:</td>
				<td><input type="text" name="phone" 
					value="<%= phone %>"/></td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Submit"/></td>
			</tr>
		</table>
	</form>
</body>
</html>

  四.后台中的控制类Servlet   CustomerServlet.java

package com.guodiantong.mvc.servlet;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.guodiantong.mvc.dao.CustomerDao;
import com.guodiantong.mvc.domain.CriteriaCustomer;
import com.guodiantong.mvc.domain.Customer;
import com.guodiantong.mvc.impl.CustomerDaoJdbcImpl;

public class CustomerServlet extends HttpServlet {
    CustomerDao customerDao=new CustomerDaoJdbcImpl();
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
       doPost(req, resp);

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
     String servletPath=req.getServletPath();
     System.out.println(servletPath);
     String methodName=servletPath.substring(1);
            methodName=methodName.substring(0, methodName.length()-3);
            /*
             * 利用反射获取methodName对应的方法
             */
     try {
		  Method method=getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
				  HttpServletResponse.class);
    	 //利用反射调用对应的方法
		  method.invoke(this, req,resp);
	} catch (Exception e) {
		e.printStackTrace();
		resp.sendRedirect("error.jsp");
	}
     
	}
	
	private void query(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
		String name=request.getParameter("name");
		String address=request.getParameter("address");
		String phone=request.getParameter("phone");
		
		CriteriaCustomer criteriaCustomer=new CriteriaCustomer(name, address, phone);
		
		List<Customer> customers=customerDao.getForListWithCriteriaCustomer(criteriaCustomer);
		System.out.println(customers);
		request.setAttribute("customers", customers);
		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}
    private void delete(HttpServletRequest request,HttpServletResponse response) throws IOException{
    	String idstr=request.getParameter("id");
    	int id=0;
    	
    	try {
			id=Integer.parseInt(idstr);
			System.out.println(id);
			customerDao.delete(id);
		} catch (Exception e) {
			
		}
    	response.sendRedirect("query.do");
    }
    
    private void addCustomer(HttpServletRequest resquest,HttpServletResponse response) throws IOException, ServletException{
    	String name=resquest.getParameter("name");
    	String address=resquest.getParameter("address");
    	String phone=resquest.getParameter("phone");
    	//String message="用户" + name + "已经注册过了";
    	long count=customerDao.getCountWithName(name);
    	if(count>0){
    		//resquest.setAttribute("count", count);
    		resquest.setAttribute("message","用户" + name + "已经注册过了");
    		resquest.setAttribute("address", address);
    		resquest.setAttribute("phone", phone);
    		resquest.getRequestDispatcher("/addCustomer.jsp").forward(resquest, response);
    	}
    	else{
    	Customer customer=new Customer(null, name, address, phone);
    	
    	
    	customerDao.save(customer);
    	response.sendRedirect("query.do");}
    }
    private void edit(HttpServletRequest request,HttpServletResponse response){
    	String idstr=request.getParameter("id");
    	int id=0;
    	
    	try {
			id=Integer.parseInt(idstr);
			Customer cus=customerDao.get(id);
//			String name=cus.getName();
//			String address=cus.getAddress();
//			String phone=cus.getPhone();
//			request.setAttribute("name", name);
//			request.setAttribute("address", address); 
			request.setAttribute("customer", cus);
			request.getRequestDispatcher("/edit.jsp").forward(request, response);
		} catch (Exception e) {
			// TODO: handle exception
		}
    } 
    
    private void update(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
    
    	//1. 获取表单参数: id, name, address, phone, oldName
		String id = request.getParameter("id");
		String name = request.getParameter("name");
		String phone = request.getParameter("phone");
		String address = request.getParameter("address");
		String oldName = request.getParameter("oldName");
		
		//2. 检验 name 是否已经被占用:
		
		//2.1 比较 name 和 oldName 是否相同, 若相同说明 name 可用. 
		//2.1 若不相同, 则调用 CustomerDAO 的 getCountWithName(String name) 获取 name 在数据库中是否存在
		if(!oldName.equalsIgnoreCase(name)){
			long count = customerDao.getCountWithName(name);
			//2.2 若返回值大于 0, 则响应 updatecustomer.jsp 页面: 通过转发的方式来响应 newcustomer.jsp
			if(count > 0){
				//2.2.1 在 updatecustomer.jsp 页面显示一个错误消息: 用户名 name 已经被占用, 请重新选择!
				//在 request 中放入一个属性 message: 用户名 name 已经被占用, 请重新选择!, 
				//在页面上通过 request.getAttribute("message") 的方式来显示
				request.setAttribute("message", "用户名" + name + "已经被占用, 请重新选择!");
				
				//2.2.2 newcustomer.jsp 的表单值可以回显. 
				//address, phone 显示提交表单的新的值, 而 name 显示 oldName, 而不是新提交的 name
				
				//2.2.3 结束方法: return 
				request.getRequestDispatcher("/updatecustomer.jsp").forward(request, response);
				return;
			}
		}
		
		//3. 若验证通过, 则把表单参数封装为一个 Customer 对象 customer
		Customer customer = new Customer(null, name, address, phone);
		customer.setId(Integer.parseInt(id)); 
		
		//4. 调用 CustomerDAO 的  update(Customer customer) 执行更新操作
		customerDao.update(customer);
		
		//5. 重定向到 query.do
		response.sendRedirect("query.do");
    }
}

  

java web基础之mvc模式设计(一)--使用httpservlet实现mvc分层设计,DAO层使用的是dbutils实现与数据库的链接

标签:

人气教程排行