1. 程式人生 > >SpringMVC和Spring的結合方式一

SpringMVC和Spring的結合方式一

  • 案例:一個簡單註冊頁,提交後到SpringMVC的Controller,它裡面呼叫業務層註冊方法(結合Spring),service層僅用spring的JdbcTemplate往person表插入一條資料,從而實現簡單註冊。(這裡直接忽略了DAO層)
    結合方式1:配置檔案(無註解的方式)
    web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 中央控制器 -->
  <!-- 配控制器時,一定要匯入commons-logging包,否則tomcat啟動時出現Failed to start component -->
  <servlet>
  	<servlet-name>springMVC</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<load-on-startup>0</load-on-startup> 
  </servlet> 
  <servlet-mapping>
  	<servlet-name>springMVC</servlet-name>
  	<url-pattern>/</url-pattern><!-- /*攔截所有  /除了jsp都攔截 -->
  </servlet-mapping>
  <!-- 過濾靜態資源,方式一:不攔截html檔案 --><!--
  <servlet-mapping>
	<servlet-name>default</servlet-name>
	<url-pattern>*.html</url-pattern>
  </servlet-mapping>-->
</web-app>

springMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
">

<!-- 配資料來源BasicDataSource 要兩個jar包,dbcp,pool-->
<!--  commons-dbcp-1.4.jar-->
<!--  commons-pool-1.6.jar-->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="root1205"/>
    <property name="defaultAutoCommit" value="true"/><!--預設自動提交-->
</bean>

<!-- 注入jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <!-- 這裡面要配資料來源 -->
    <property name="dataSource" ref="myDataSource"></property>
</bean>

<!-- 方式1:SpringMVC和Spring通過配置檔案的方式結合 -->

<!-- SpringMVC 地址對映,到多動作控制器(練習一下) -->
<bean name="/reg/*" class="com.controller.RegController">
	<property name="personService" ref="personService"></property>
</bean>

<!-- 呼叫service層服務時通過Spring注入personService,代替new  -->
<bean id="personService" class="com.service.PersonService">
	<property name="jdbcTemplate" ref="jdbcTemplate"></property>
	<!-- 這樣配,我就沒寫DAO層了 -->
</bean>

</beans>

reg.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>簡單註冊頁</title>
<style type="text/css">
*{margin:0;padding:0;list-style:none}
body{
	background:#484D61;
	font-family:微軟雅黑;
	font-size: 13px;
}
#out{
	width: 250px;
	height: 170px;
	margin: 150px auto;
	border-radius: 5px;
	background: white;
	padding-top: 30px;
}
#out ul li{
	height: 40px;
	line-height: 50px;
	width: 250px;
	text-align: center;
}
#out ul li.sex{
	text-align: left;
	padding-left: 15px;
}

input[type='text'],input[type='password']{
	width: 220px;
	height: 25px;
	border: none;
	border-bottom: 1px solid gray;
}
input[type='radio']{
	margin: 5px;
}
input[type='submit']{
	width: 220px;
	height: 25px;
	border: none;
	border-radius: 5px;
	background: #43495F;
	color: white;
	font-size: 12px;
}
</style>
</head>
<body>
<div id="out">
	<form action="reg/save" method="post">
	<ul>
		<li><input type="text" placeholder="請輸入使用者名稱" name="name"/></li>
		<li><input type="password" placeholder="請輸入密碼" name="pwd"/></li>
		<li class="sex"><span>性別:</span>
			<input type="radio" name="sex" value="男" checked/>男
			<input type="radio" name="sex" value="女"/>女
		</li>
		<li><input type="submit" value="註冊"/></li>
	</ul>
	</form>
</div>
</body>
</html>

RegController.java

package com.controller;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.entity.Person;
import com.service.PersonService;

public class RegController extends MultiActionController {
	
	//與spring結合,這裡我就不用new PersonService,而是通過配置檔案注入
	
	private PersonService personService;
	
/*	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		System.out.println("請求了嗎?");
		return null;
	}*/
	
	public PersonService getPersonService() {
		return personService;
	}



	public void setPersonService(PersonService personService) {
		this.personService = personService;
	}



	public void save(HttpServletRequest request,HttpServletResponse response){
		try {
			request.setCharacterEncoding("UTF-8");
			response.setCharacterEncoding("UTF-8");
			response.setContentType("text/html;charset=UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		String name = request.getParameter("name");
		String pwd = request.getParameter("pwd");
		String sex = request.getParameter("sex");
		Person p = new Person();
		p.setName(name);
		p.setPwd(pwd);
		p.setSex(sex);
		//System.out.println(personService);//測試一下有沒有拿到
		if(personService.register(p)){
			try {
				response.getWriter().print("註冊成功!");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}

IPersonService.java

package com.service;

import com.entity.Person;

public interface IPersonService {
	
	public boolean register(Person person);

}

PersonService.java

package com.service;

import org.springframework.jdbc.core.JdbcTemplate;

import com.entity.Person;

public class PersonService implements IPersonService {
	
	private JdbcTemplate jdbcTemplate;
	
	
	
	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}



	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}



	@Override
	public boolean register(Person person) {
		try{
			jdbcTemplate.execute("INSERT INTO person(name,age,sex)VALUES('"+person.getName()+"','"+person.getAge()+"','"+person.getSex()+"')");
		} catch(Exception e){
			return false;
		}
		return true;
	}

}

結果:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述