spring mvc + ibatis + Oracle + ajax 轻量级架构搭建及详解
spring mvc + ibatis + Oracle + ajax 轻量级架构搭建及详解 研究(后续接着跟进)
1、新建Web Project 工程,编辑web.xml文件
写道
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--配置Sring MVC的核心控制器DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 为DispatcherServlet建立映射 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/log4j.properties</param-value>
</context-param>
<!-- 配置log4j.xml监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--配置Sring MVC的核心控制器DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 为DispatcherServlet建立映射 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/log4j.properties</param-value>
</context-param>
<!-- 配置log4j.xml监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2、添加spring mvc 架构所需要的JAR包
3、设置spring-data.xml、spring-servlet.xml文件
spring-data.xml
写道
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- 获取数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${db.dirverClass}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- 获取数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${db.dirverClass}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
</bean>
</beans>
spring-servlet.xml 文件
写道
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:config.properties</value>
</property>
</bean>
<!-- 定义映射 -->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="helloWorld.html">helloWorldAction</prop>
<prop key="userAction.html">userAction</prop>
</props>
</property>
</bean>
<bean id="userDao" class="com.examp.dao.UserDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 定义视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
</bean>
<!-- 定义控制器 -->
<bean id="helloWorldAction" class="com.examp.ch23.HelloWorldAction">
<property name="helloWorld">
<value>${helloWorld}</value>
</property>
<property name="helloWorld1">
<value>${name}</value>
</property>
<property name="viewPage">
<value>${toUrl}</value>
</property>
</bean>
<!-- 根据请求参数决定方法 userAction.html?action=toDetail -->
<bean id="userAction" class="com.examp.ch23.UserAction">
<property name="dao">
<ref bean="userDao"/>
</property>
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<!-- 指定参数名为action -->
<property name="paramName" value="action" />
</bean>
</property>
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:config.properties</value>
</property>
</bean>
<!-- 定义映射 -->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="helloWorld.html">helloWorldAction</prop>
<prop key="userAction.html">userAction</prop>
</props>
</property>
</bean>
<bean id="userDao" class="com.examp.dao.UserDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 定义视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
</bean>
<!-- 定义控制器 -->
<bean id="helloWorldAction" class="com.examp.ch23.HelloWorldAction">
<property name="helloWorld">
<value>${helloWorld}</value>
</property>
<property name="helloWorld1">
<value>${name}</value>
</property>
<property name="viewPage">
<value>${toUrl}</value>
</property>
</bean>
<!-- 根据请求参数决定方法 userAction.html?action=toDetail -->
<bean id="userAction" class="com.examp.ch23.UserAction">
<property name="dao">
<ref bean="userDao"/>
</property>
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<!-- 指定参数名为action -->
<property name="paramName" value="action" />
</bean>
</property>
</bean>
</beans>
4、日志配置文件 log4j.properties
################ FATAL, ERROR, WARN, INFO, DEBUG
log4j.rootLogger=WARN,stdout,D,E
### stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d{ABSOLUTE} %5p %c{1}\:%L - %m%n
### logFile ###
### save error to another file ###
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=D\:/logs/info.log
log4j.appender.D.Append=true
#error only in this file
log4j.appender.D.Threshold =INFO
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%t\:%r] - [%p] %m%n
5、配置文件 config.properties
helloWorld=Good Luck!
name=\u738B\u4E94
toUrl=/jsp/MyJsp.jsp
db.dirverClass= oracle.jdbc.driver.OracleDriver
db.url= jdbc:oracle:thin:@192.168.11.110:1521:ebank
db.username=ebank
db.password=ebank
6、编写实体类 UserPO.java
package com.examp.po;
import java.io.Serializable;
public class UserPO implements Serializable {
private String id;
private String name;
private String password;
private int type;
private String email;
private String phone;
private int sex;
private String qq;
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
}
7、添加数据处理类 UserDao.java
package com.examp.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import com.examp.po.UserPO;
public class UserDao extends JdbcDaoSupport {
public Collection<UserPO> doquery() {
String sql = "SELECT T.ID,T.NAME,T.EMAIL,T.SEX FROM T_USER T";
return super.getJdbcTemplate().query(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int num) throws SQLException{
UserPO user = new UserPO();
user.setId(rs.getString("ID"));
user.setName(rs.getString("NAME"));
user.setEmail(rs.getString("EMAIL"));
user.setSex(rs.getInt("SEX"));
return user;
}
});
}
public Collection<UserPO> getUserByID(String id) {
String sql = "SELECT T.ID,T.NAME,T.EMAIL,T.SEX FROM T_USER T WHERE T.ID='"+id+"'";
return super.getJdbcTemplate().query(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int num) throws SQLException{
UserPO user = new UserPO();
user.setId(rs.getString("ID"));
user.setName(rs.getString("NAME"));
user.setEmail(rs.getString("EMAIL"));
user.setSex(rs.getInt("SEX"));
return user;
}
});
}
}
8、业务处理类 HelloWorldAction.java、UserAction.java
package com.examp.ch23;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloWorldAction implements Controller{
private static final Log logger = LogFactory.getLog(HelloWorldAction.class);
private String helloWorld;
private String viewPage;
private String helloWorld1;
public ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse res) throws Exception {
System.out.println("是否进入。。。");
logger.warn("进入HelloWorldAction 包...");
Map<String,String> model = new HashMap<String,String>();
model.put("helloWorld", getHelloWorld());
model.put("helloWorld1", getHelloWorld1());
return new ModelAndView(getViewPage(),model);
}
public String getHelloWorld() {
return helloWorld;
}
public void setHelloWorld(String helloWorld) {
this.helloWorld = helloWorld;
}
public String getViewPage() {
return viewPage;
}
public void setViewPage(String viewPage) {
this.viewPage = viewPage;
}
public String getHelloWorld1() {
return helloWorld1;
}
public void setHelloWorld1(String helloWorld1) {
this.helloWorld1 = helloWorld1;
}
}
package com.examp.ch23;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import com.examp.dao.UserDao;
import com.examp.po.UserPO;
//public class UserAction implements Controller{
public class UserAction extends MultiActionController{
private static final Log logger = LogFactory.getLog(UserAction.class);
private UserDao dao;
public ModelAndView list(HttpServletRequest request,
HttpServletResponse response) throws Exception {
logger.warn("UserAction list 方法...");
Map<String,Object> model = new HashMap<String,Object>();
Collection<UserPO> list = dao.doquery();
List<UserPO> users = new ArrayList<UserPO>();
for (UserPO userPO : list) {
UserPO user = new UserPO();
user.setId(userPO.getId());
user.setName(userPO.getName());
user.setSex(userPO.getSex());
user.setEmail(userPO.getEmail());
users.add(user);
}
model.put("list", users);
return new ModelAndView("/jsp/userList.jsp",model);
}
public ModelAndView detail(HttpServletRequest req,HttpServletResponse res) throws Exception{
String id = req.getParameter("id");
Collection<UserPO> list = dao.getUserByID(id);
logger.warn("UserAction detail 方法...");
List<UserPO> users = new ArrayList<UserPO>();
for (UserPO userPO : list) {
UserPO user = new UserPO();
user.setId(userPO.getId());
user.setName(userPO.getName());
user.setSex(userPO.getSex());
user.setEmail(userPO.getEmail());
users.add(user);
}
Map<String,Object> model = new HashMap<String,Object>();
model.put("list", users);
return new ModelAndView("/jsp/userDetail.jsp",model);
}
public UserDao getDao() {
return dao;
}
public void setDao(UserDao dao) {
this.dao = dao;
}
}
9、编辑jsp页面 MyJsp.jsp、userDetail.jsp、userList.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<%
String str = (String)request.getAttribute("helloWorld");
String param = (String)request.getAttribute("param");
%>
<body>
This is my JSP page. <%=str %>${helloWorld1}<br>
${helloWorld} +
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.examp.po.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<%
String str = (String)request.getAttribute("helloWorld");
//List list = (List)request.getAttribute("list");
%>
<body>
<div>用户个人信息</div>
<table>
<tr>
<td>
用户ID
</td>
<td>
用户名
</td>
<td>
性别
</td>
<td>
邮件
</td>
</tr>
<c:forEach var="user" items="${list}">
<tr>
<td><a href="/ch23/userAction.html?action=detail&id=${user.id}">${user.id}</a></td>
<td>${user.name}</td>
<td>
<c:if test="${user.sex == 0}">
保密
</c:if>
<c:if test="${user.sex == 1}">
男
</c:if>
<c:if test="${user.sex == 2}">
女
</c:if>
</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.examp.po.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<%
String str = (String)request.getAttribute("helloWorld");
//List list = (List)request.getAttribute("list");
%>
<body>
<%-- This is my JSP page. <%=str %><br> --%>
<%-- <%
for(int i = 0; i < list.size();i++){
UserPO user = (UserPO)list.get(i);
%>
<%=user.getName()%><br/>
<% }
%> --%>
<table>
<tr>
<td>
用户ID
</td>
<td>
用户名
</td>
<td>
性别
</td>
<td>
邮件
</td>
</tr>
<c:forEach var="user" items="${list}">
<tr>
<td><a href="/ch23/userAction.html?action=detail&id=${user.id}">${user.id}</a></td>
<td>${user.name}</td>
<td>
<c:if test="${user.sex == 0}">
保密
</c:if>
<c:if test="${user.sex == 1}">
男
</c:if>
<c:if test="${user.sex == 2}">
女
</c:if>
</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
10、项目结构图