一、基础过程:
(1)展示页面--》(2)web.xml--》(3)servlet--》(4)dao--》(5)daoImpl--》(6)model--》(7)jdbc
二、基础代码
(1)展示页面index.jsp
<%@page import="org.apache.commons.collections.CollectionUtils"%>
<%@page import="java.util.Collections"%>
<%@page import="java.util.List"%>
<%@page import="com.mmmm.model.Customser"%>
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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>
<form action="customerServlet?method=query" method="POST">
CustomerName:<input type="text" name="name" /> <br> <br>
Address: <input
type="text" name="address"> <br> <br>
Phone:
<input type="text" name="phone"> <br> <br> <input
type="submit" name="submit" value="Query" />
<a href="">Add
New Customer</a>
</form>
<br>
<br>
<table border="1" cellpadding="0" cellspacing="10">
<tr>
<th>ID</th>
<th>CustomerName</th>
<th>Address</th>
<th>Phone</th>
<th>Update/delete</th>
</tr>
<%
List<Customser> customers = (List<Customser>) request.getAttribute("customers");
if(!CollectionUtils.isEmpty(customers)){
%>
<%
for (Customser customer : customers) {
%>
<tr>
<td><%=customer.getId()%></td>
<td><%=customer.getName()%></td>
<td><%=customer.getAddress()%></td>
<td><%=customer.getPhone()%></td>
<td><a href="">UPDATE</a>/<a href="">DELETE</a></td>
</tr>
<%
}
%>
<%} %>
</table>
</body>
</html>
(2)web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true" version="3.0">
<servlet>
<servlet-name>customerServlet</servlet-name>
<servlet-class>com.mmmm.servlet.CustomerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>customerServlet</servlet-name>
<url-pattern>/customerServlet</url-pattern>
</servlet-mapping>
</web-app>
(3)servlet
package com.mmmm.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;
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 com.mmmm.dao.CustomerDAO;
import com.mmmm.dao.impl.CustomerDAOImpl;
import com.mmmm.model.Customser;
public class CustomerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private CustomerDAO customerDAO = new CustomerDAOImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getParameter("method");
try {
Method me = getClass().getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class);
me.invoke(this, request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("unused")
private void query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Customser> customers = customerDAO.getAll();
request.setAttribute("customers", customers);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
(4)DAO
package com.mmmm.dao;
import java.util.List;
import com.mmmm.model.Customser;
public interface CustomerDAO {
/**
* 无条件查询 获取全部
* @return
*/
List<Customser> getAll();
}
(5)DAOImpl
package com.mmmm.dao.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.JdbcTemplate;
import com.mmmm.dao.CustomerDAO;
import com.mmmm.model.Customser;
import com.mmmm.utils.JdbcUtil;
public class CustomerDAOImpl implements CustomerDAO {
@Override
public List<Customser> getAll(){
String sql ="select * from user";
JdbcTemplate jdbcTemplate=null;
try {
jdbcTemplate = JdbcUtil.getJdbcTemplate();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
@SuppressWarnings("unchecked")
List<Map<String, Object>> queryForList = jdbcTemplate.queryForList(sql);
List<Customser> list=new ArrayList<Customser>();
for(Map map:queryForList){
Customser cc=new Customser();
cc.setId(String.valueOf(map.get("id")));
cc.setName((String)map.get("name"));
cc.setAddress((String)map.get("address"));
cc.setPhone((String)map.get("phone"));
list.add(cc);
}
return list;
}
}
(6)model
package com.mmmm.model;
public class Customser {
@Override
public String toString() {
return "Customser [id=" + id + ", name=" + name + ", address=" + address + ", phone=" + phone + "]";
}
public Customser(String name, String address, String phone) {
super();
this.name = name;
this.address = address;
this.phone = phone;
}
public Customser() {
super();
}
private String id;
private String name;
private String address;
private String phone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
(7)JDBC
package com.mmmm.utils;
import org.springframework.jdbc.core.JdbcTemplate;
import com.mchange.v2.c3p0.DriverManagerDataSource;
public class JdbcUtil {
private final static String driverName="com.mysql.jdbc.Driver";
private final static String url="JDBC:mysql:///javaweb01";
private final static String user="root";
private final static String password="123456";
public static JdbcTemplate getJdbcTemplate() throws Exception{
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClass(driverName);
dataSource.setJdbcUrl(url);
dataSource.setUser(user);
dataSource.setPassword(password);
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
return jdbcTemplate;
}
}
展示效果
目前缺点:(1)采用customerServlet?method=query 的方式来访问,暴露了即将调用的方法,不私密,有安全隐患。
解决方法:可以使用query.do来访问,然后将web.xml的servletMapping映射的url设置为*.do即可接收到请求,然后*即为将要调用的函数名,使用反射,直接跳转到该方法即可。