SSM(Spring+SpringMVC+Mybatis) 整合

这两天在Spring + SpringMVC +Hibernate的基础上,将Hibernate 换成了Mybatis 进行整合。

虽然大部分的代码一致,但是就配置文件也是很让人跪。本人在写的时候由于扫描mapper 时,下到了mapper 包中,结果扫描不到Dao然后直接报创建不了工厂类(由于Dao在mapper的上级目录中)。

因为是第一次进行整合,所以没有使用了Maven。下面将代码贴进来。算做是笔记。(环境:eclipse + jdk 1.8 + Tomcat 7.0)

功能是:写一个功能简单的人员信息薄。包括(管理员的登录验证,管理员的注册,对信息的增删改查) 在管理员的登录和注册的时候使用了随机ID 和 加密(UUID , 验证码 + 密码 然后进行加密作为一个新的密码)    详细的见代码。

jar 包:




目录结构:




验证码:ValidationCodeServlet.java

package com.baijh.util;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.patchca.background.BackgroundFactory;
import org.patchca.color.ColorFactory;
import org.patchca.color.RandomColorFactory;
import org.patchca.filter.ConfigurableFilterFactory;
import org.patchca.filter.library.AbstractImageOp;
import org.patchca.filter.library.WobbleImageOp;
import org.patchca.font.RandomFontFactory;
import org.patchca.service.Captcha;
import org.patchca.service.ConfigurableCaptchaService;
import org.patchca.text.renderer.BestFitTextRenderer;
import org.patchca.word.RandomWordFactory;



public class ValidationCodeServlet extends HttpServlet {
	private static final long serialVersionUID = 5126616339795936447L;

	private ConfigurableCaptchaService configurableCaptchaService = null;
	private ColorFactory colorFactory = null;
	private RandomFontFactory fontFactory = null;
	private RandomWordFactory wordFactory = null;
	private BestFitTextRenderer textRenderer = null;

	public ValidationCodeServlet() {
		super();
	}

	/**
	 * Servlet销毁方法,负责销毁所使用资源. <br>
	 */
	public void destroy() {
		wordFactory = null;
		colorFactory = null;
		fontFactory = null;
		textRenderer = null;
		configurableCaptchaService = null;
		super.destroy(); // Just puts "destroy" string in log
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("image/png");
		response.setHeader("cache", "no-cache");

		HttpSession session = request.getSession(true);
		OutputStream outputStream = response.getOutputStream();

		// 得到验证码对象,有验证码图片和验证码字符串
		Captcha captcha = configurableCaptchaService.getCaptcha();
		// 取得验证码字符串放入Session
		String validationCode = captcha.getChallenge();
		session.setAttribute("validationCode", validationCode);
		// 取得验证码图片并输出
		BufferedImage bufferedImage = captcha.getImage();
		ImageIO.write(bufferedImage, "png", outputStream);

		outputStream.flush();
		outputStream.close();
	}

	/**
	 * Servlet初始化方法
	 */
	public void init() throws ServletException {
		configurableCaptchaService = new ConfigurableCaptchaService();

		// 颜色创建工厂,使用一定范围内的随机色
		colorFactory = new RandomColorFactory();
		configurableCaptchaService.setColorFactory(colorFactory);

		// 随机字体生成器
		fontFactory = new RandomFontFactory();
		fontFactory.setMaxSize(32);
		fontFactory.setMinSize(28);
		configurableCaptchaService.setFontFactory(fontFactory);

		// 随机字符生成器,去除掉容易混淆的字母和数字,如o和0等
		wordFactory = new RandomWordFactory();
		wordFactory.setCharacters("abcdefghkmnpqstwxyz23456789");
		wordFactory.setMaxLength(5);
		wordFactory.setMinLength(4);
		configurableCaptchaService.setWordFactory(wordFactory);

		// 自定义验证码图片背景
		MyCustomBackgroundFactory backgroundFactory = new MyCustomBackgroundFactory();
		configurableCaptchaService.setBackgroundFactory(backgroundFactory);

		// 图片滤镜设置
		ConfigurableFilterFactory filterFactory = new ConfigurableFilterFactory();

		List<BufferedImageOp> filters = new ArrayList<BufferedImageOp>();
		WobbleImageOp wobbleImageOp = new WobbleImageOp();
		wobbleImageOp.setEdgeMode(AbstractImageOp.EDGE_MIRROR);
		wobbleImageOp.setxAmplitude(2.0);
		wobbleImageOp.setyAmplitude(1.0);
		filters.add(wobbleImageOp);
		filterFactory.setFilters(filters);

		configurableCaptchaService.setFilterFactory(filterFactory);

		// 文字渲染器设置
		textRenderer = new BestFitTextRenderer();
		textRenderer.setBottomMargin(3);
		textRenderer.setTopMargin(3);
		configurableCaptchaService.setTextRenderer(textRenderer);

		// 验证码图片的大小
		configurableCaptchaService.setWidth(82);
		configurableCaptchaService.setHeight(32);
	}

	/**
	 * 自定义验证码图片背景,主要画一些噪点和干扰线
	 */
	private class MyCustomBackgroundFactory implements BackgroundFactory {
		private Random random = new Random();

		public void fillBackground(BufferedImage image) {
			Graphics graphics = image.getGraphics();

			// 验证码图片的宽高
			int imgWidth = image.getWidth();
			int imgHeight = image.getHeight();

			// 填充为白色背景
			graphics.setColor(Color.WHITE);
			graphics.fillRect(0, 0, imgWidth, imgHeight);

			// 画100个噪点(颜色及位置随机)
			for (int i = 0; i < 100; i++) {
				// 随机颜色
				int rInt = random.nextInt(255);
				int gInt = random.nextInt(255);
				int bInt = random.nextInt(255);

				graphics.setColor(new Color(rInt, gInt, bInt));

				// 随机位置
				int xInt = random.nextInt(imgWidth - 3);
				int yInt = random.nextInt(imgHeight - 2);

				// 随机旋转角度
				int sAngleInt = random.nextInt(360);
				int eAngleInt = random.nextInt(360);

				// 随机大小
				int wInt = random.nextInt(6);
				int hInt = random.nextInt(6);

				graphics.fillArc(xInt, yInt, wInt, hInt, sAngleInt, eAngleInt);

				// 画5条干扰线
				if (i % 20 == 0) {
					int xInt2 = random.nextInt(imgWidth);
					int yInt2 = random.nextInt(imgHeight);
					graphics.drawLine(xInt, yInt, xInt2, yInt2);
				}
			}
		}
	}
}


SQL 文件:

create database telbook;

use talbook;

create table manage(
	id varchar(100) primary key auto_increment,
	username varchar(20),
	password varchar(100),
	validatecode varchar(20)
);

create table person(
	id int primary key,
	name varchar(20),
	salary float,
	birthday date
);


然后通过这些 字段自己创建 entity中的数据,并提供set/get 方法,在这里就不多说了。

下面是管理员的:

package com.nyist.dao;

import com.nyist.entity.Manage;
//定义管理员dao 接口
public interface ManageDao {
	//登录检查
	public Manage querymanage(String name);
	//管理员注册
	public void save(Manage manage);
}
ManageDaoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.nyist.dao.ManageDao" >
	
	<select id="querymanage" parameterType="String" resultType="com.nyist.entity.Manage">
		select * from manage where username = #{name}
	</select>
	
	
	<insert id="save" parameterType="com.nyist.entity.Manage">
		insert into manage values(#{id},#{username},#{password},#{validatecode})
	</insert>
</mapper>

package com.nyist.service;


import com.nyist.entity.Manage;

public interface ManageService {
	public Manage queryManageByUserName(String username);
	public void addManage(Manage manage);
}
package com.nyist.service.Impl;

import java.util.UUID;

import javax.annotation.Resource;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;

import com.nyist.dao.ManageDao;
import com.nyist.entity.Manage;
import com.nyist.service.ManageService;
//Service 业务层接口的实现
@Service()
public class ManageServiceImpl implements ManageService {
	@Resource
	private ManageDao managDao;
	
	//依赖注入 ManageDao
	@Override
	public Manage queryManageByUserName(String username) {
		return managDao.querymanage(username);
	}

	@Override
	public void addManage(Manage manage) {
		/**
		 * 由于存储数据需要进行转换,所以在这里我们需要从页面中获取的数据进行处理。
		 * ID 使用UUID 进行生产
		 */
		
		//ID 自动生成策略
		manage.setId(UUID.randomUUID().toString());
		//获得验证码
		String validateCode = manage.getValidatecode();
		String name = manage.getUsername();
		//生成新的密码
		String newpassword = manage.getPassword()+validateCode;
		//对密码进行加密
		String newpassword1 = DigestUtils.md5Hex(newpassword);
		
		manage.setPassword(newpassword1);
		manage.setUsername(name);
		manage.setValidatecode(validateCode);
				
		System.out.println(manage);
		
		
		managDao.save(manage);
	}

	public ManageDao getManagDao() {
		return managDao;
	}
	
	public void setManagDao(ManageDao managDao) {
		this.managDao = managDao;
	}
	
}


package com.nyist.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.nyist.entity.Manage;
import com.nyist.service.ManageService;

@Controller       //控制器注解
@RequestMapping("/login.do")
public class ManageLogin {
	@Autowired
	private ManageService manageService;
	//依赖注入
	@RequestMapping(params="method=login")
	public String login(Manage manage,HttpServletRequest request){
		HttpSession session = request.getSession();
		//验证码的验证
		//程序 创建的验证码
		String sysvacode = (String) session.getAttribute("validationCode");
		//自己在页面输入的
		String myvacode = manage.getValidatecode();
		if(myvacode.equals(sysvacode)){
			Manage manage1 = (Manage) manageService.queryManageByUserName(manage.getUsername());

			//拼接密码 登录时写的密码加上我们存进的验证码 然后进行加密 和我们数据库中的密码进行判断。判断是否能成功登录
			String mypassword = manage.getPassword() + manage1.getValidatecode();
				
			//加密后的拼接的密码
			String mypassword1 = DigestUtils.md5Hex(mypassword);
			String sqlpassword = manage1.getPassword();
			if(mypassword1.equals(sqlpassword)){
				session.setAttribute("username", manage.getUsername());
				return "redirect:personlist.do?method=personlist";
			}
			else{
				//失败了重定向到login.jsp
				return "redirect:login.jsp";				
				
			}			
		}else{
			return "redirect:login.jsp";
		}
	}
	
}

package com.nyist.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.nyist.entity.Manage;
import com.nyist.service.ManageService;

@Controller       //控制器注解
@RequestMapping("/reg.do")
public class ManageRegister {
	@Autowired
	private ManageService manageService;

	@RequestMapping(params="method=reg")
	public ModelAndView reg(Manage manage){
		//使用ModelAndView 对象进行 页面的跳转
		System.out.println(manage);
		ModelAndView mv = new ModelAndView();
		manageService.addManage(manage);
		mv.setViewName("redirect:login.jsp");
		
		return mv;
	}
	
	public ManageService getManageService() {
		return manageService;
	}

	public void setManageService(ManageService manageService) {
		this.manageService = manageService;
	}
	
	
}



下面是Person 的功能实现
package com.nyist.dao;

import java.util.List;

import com.nyist.entity.Person;

public interface PersonDao {
	public void save(Person person);
	public void update(Person person);
	public void delete(Person person);
	public List<Person> queryAllPerson();
}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.nyist.dao.PersonDao" >
	
	<update id="update" parameterType="com.nyist.entity.Person">
		update person set name=#{name},salary=#{salary},birthday=#{birthday} where id = #{id}
	</update>
	
	<insert id="save" parameterType="com.nyist.entity.Person">
		insert into person values(#{id},#{name},#{salary},#{birthday})
	</insert>
	
	<delete id="delete" parameterType="com.nyist.entity.Person">
		delete from person where id = #{id}
	</delete>
	<select id="queryAllPerson" resultType="com.nyist.entity.Person">
		select * from person
	</select>
	
</mapper>
package com.nyist.service;

import java.util.List;

import com.nyist.entity.Person;

public interface PersonService {
	//增加数据
	public void insertPerson(Person person);
	//修改数据
	public void updatePerson(Person person);
	//删除数据
	public void deletePerson(Person person);
	//获取所有数据
	public List<Person> queryAllPerson();
	
}

package com.nyist.service.Impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.nyist.dao.PersonDao;
import com.nyist.entity.Person;
import com.nyist.service.PersonService;

@Component
public class PersonServiceImpl implements PersonService{
	@Autowired
	private PersonDao persondao; 
	@Override
	public void insertPerson(Person person) {
		persondao.save(person);
	}

	@Override
	public void updatePerson(Person person) {
		persondao.update(person);
	}

	@Override
	public void deletePerson(Person person) {
		persondao.delete(person);
	}

	@Override
	public List<Person> queryAllPerson() {
		return persondao.queryAllPerson();
	}
	
}

功能实现:Controller :

package com.nyist.controller;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;

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

@Component
@RequestMapping("/addperson.do")
public class PersonAdd {
	@Autowired
	private PersonService personService;

	@RequestMapping(params="method=addperson")
	
	public String addperson(HttpServletRequest request) throws ParseException{
		String name = request.getParameter("name");
		float salary = Float.parseFloat(request.getParameter("salary"));
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date birthday1 = new Date((sdf.parse(request.getParameter("birthday"))).getTime());
		Person p = new Person();
		p.setName(name);
		p.setSalary(salary);
		p.setBirthday(birthday1);
		personService.insertPerson(p);
		
		return "redirect:personlist.do?method=personlist";
		
	}
	public PersonService getPersonService() {
		return personService;
	}

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


package com.nyist.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;

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

@Component
@RequestMapping("/delete.do")
public class PersonDelete {
	@Autowired
	private PersonService personService;
	//依赖注入
	@RequestMapping(params="method=deleteperson")
	public String deleteperson(int id)
	{
		//deleteperson(int id) 在页面中直接获取ID ,Spring 自动为我们做这件事,但是 名字要保持一致
		Person person = new Person();
		person.setId(id);
		personService.deletePerson(person);
		//删除后进行重定向
		return "redirect:personlist.do?method=personlist";
	}
}

package com.nyist.controller;

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

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

@Controller
@RequestMapping("/personlist.do")
public class PersonList {
	@Autowired
	private PersonService personService;
	
	//依赖注入
	@RequestMapping(params="method=personlist")
	public String personlist(HttpServletRequest request){
		//调用Service的业务方法进行查询
		List<Person> persons = personService.queryAllPerson();
		HttpSession session = request.getSession();
		//将查询到的数据存储的session中,然后进行跳转,在emplist中取出数据
		session.setAttribute("persons", persons);
		
		return "emplist";
	}
	
}

package com.nyist.controller;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;

import com.nyist.entity.Person;
import com.nyist.service.PersonService;
//声明 控制器 ,并指定 访问路径
@Component
@RequestMapping("update.do")
public class PersonUpdate {
	@Resource
	private PersonService personService;
	//指定函数 ,Controller 中的每个函数都要进行声明
	@RequestMapping(params="method=updateperson")
	public String updateperson(HttpServletRequest request) throws ParseException{
		//在Controller中需要什么直接进行在形参上声明,然后SpringMVC自动为你创建,然后就可以直接使用了
		
		//获取参数 ,id 等等,和增加的控制器不同,修改需要获取 id 属性然后才能就行修改
		String id = request.getParameter("id");
		int myid = Integer.parseInt(id);
		String name = request.getParameter("name");
		float salary = Float.parseFloat(request.getParameter("salary"));
		//在插入的时候需要将日期进行转换
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		//将 util 下的date 转成sql 下的date
		Date birthday1 = new Date((sdf.parse(request.getParameter("birthday"))).getTime());
		Person p = new Person();
		p.setId(myid);
		p.setName(name);
		p.setSalary(salary);
		p.setBirthday(birthday1);
		personService.updatePerson(p);
		//重定向到  person 列表 的controller中
		return "redirect:personlist.do?method=personlist";
		
	}
	public PersonService getPersonService() {
		return personService;
	}

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

下面是最重要的配置文件的配置:

MybatisConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<mappers>
		<mapper resource="com/nyist/dao/mapper/ManageDaoMapper.xml"/>
		<mapper resource="com/nyist/dao/mapper/PersonDaoMapper.xml"/>
	</mappers>
</configuration>
ApplicationContext.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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-4.0.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
		
		<context:component-scan base-package="com.nyist">
			<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
		</context:component-scan>
		
		<context:property-placeholder location="classpath:jdbc.properties"/>
		
		<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
			<property name="jdbcUrl" value="${jdbc.url}"></property>
			<property name="driverClass" value="${jdbc.driver}"></property>
			<property name="user" value="${jdbc.username}"></property>
			<property name="password" value="${jdbc.password}"></property>
			
			<!-- 初始化获取三个连接,取值在minPoolSize 和maxPoolSize 之间 Default 为3 -->
			<property name="initialPoolSize" value="3"></property>
			<!-- 最小连接数  -->
			<property name="minPoolSize" value="3"></property>
			<!-- 连接池中保留的最大的连接数 -->
			<property name="maxPoolSize" value="5"></property>
			<!-- 当连接池中的连接耗尽的时候c3p0 一次同时获取的连接数  Default 为3  -->
			<property name="acquireIncrement" value="3"></property>
			<!-- 控制数据源内加载的PreparedStatements 数量,如果maxStatements 与maxStatementsPerConnection均 为0 的时候,则缓冲关闭,default =0 -->
			<property name="maxStatements" value="8"></property>
			<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
			<property name="maxStatementsPerConnection" value="5"></property>
			<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
			<property name="maxIdleTime" value="1800"></property>
		</bean>
		<!-- SqlSessionFactory -->
		<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
			<!-- 数据库的连接 -->
			<property name="dataSource" ref="dataSource"></property>
			<!-- 加载Mybatis 的配置文件 -->
			<property name="configLocation" value="classpath:mybaties/mybatisConfig.xml"></property>
		</bean>
		<!-- mapper扫描器 -->
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
			<property name="basePackage" value="com.nyist.dao"></property>
			<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
		</bean>
</beans>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-4.0.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">	
		
	<!-- 自动扫描 -->
	<context:component-scan base-package = "com.nyist" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>
	 <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
	
	<!-- 视图解析器 -->
	<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name = "suffix" value = ".jsp"/>
		<!-- 使用jstl 进行数据交换 -->
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
	</bean>
	
	<mvc:annotation-driven></mvc:annotation-driven>
	<mvc:default-servlet-handler/>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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" id="WebApp_ID" version="3.0">
  <display-name>SpringAndSpringMVCAndMybaties</display-name>
  <!-- 加载mybaties 的配置文件 -->
  <!-- <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:spring/ApplicationContext.xml</param-value>
  </context-param>
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener> -->
  <!-- 加载springmvc的配置文件 -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring/springmvc.xml,classpath:spring/ApplicationContext.xml</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  
  
  <!-- 验证码 -->
  	<servlet>
	    <servlet-name>validationCodeServlet</servlet-name>
	    <servlet-class>com.nyist.util.ValidationCodeServlet</servlet-class>
  	</servlet>
	  <servlet-mapping>
	    <servlet-name>validationCodeServlet</servlet-name>
	    <url-pattern>/validationCodeServlet.png</url-pattern>
	  </servlet-mapping>
  
</web-app>


关于jsp 文件和css 和 其他 我会上传CSDN 下载中


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值