SSM整合项目中常用的配置以及详细注释(Spring+SpringMVC+MyBatis)

本文主要内容是SSM整合项目中所需要配置的一些jar包信息,xml文件以及所配置内容的详细注释

1.添加jar包:
  1. 添加所有的Spring工具包
  2. 添加自己导入的jar包,主要有以下几个:
    在这里插入图片描述
2.配置web.xml文件:

web.xml文件主要是配置监听器,接收请求的核心servlet也就是DispatcherServlet分发器,和解决中文乱码问题的配置文件,详细作用及代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>SSM1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 监听器,坚挺服务器启动或者销毁 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 监听IOC容器,注意文件名的配置 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  
  <!-- 添加springMVC的核心servlet,用来接收所有请求,作为分发器 -->
  <servlet>
    <!-- 随便取名字 -->
  	<servlet-name>springmvc</servlet-name>
  	<!-- 完整的类路径 -->
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  	<!-- 自定义springmvc配置文件的读取位置 -->
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  	<!-- 代表服务器启动开始加载,运行不会卡 -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
  
  <!-- jsp页面提交post请求的话会有中文乱码,需要自己手动添加过滤器配置 -->
  <filter>
  	<filter-name>encoding</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>encoding</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
3.配置springmvc.xml文件:

这里主要配置了用于扫描和激活java文件中注解的标签,解决js等文件引用问题的静态资源过滤器和跳转页面所需的视图解析器,详细作用及代码:

<?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"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
	<!-- 该文件名字命名固定,是web.xml中的servletname中设置的名字-servlet的形式 -->
	<!-- 配置springmvc的请求映射-->
	<!-- 由于springmvc的配置一般由注解来完成, -->
	<!-- 激活扫描注解标签 告诉它要扫描注解的包名 -->
	<!-- 这个是激活@controller这个注解的 -->
	<context:component-scan base-package="com.controller"></context:component-scan>
	<!-- 这个是激活里面的方法@RequestMapping这个注解的 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	
	<!-- 静态资源过滤器 ,这句话的作用是,解决由于springmvc过滤了所有文件当页面中需要引用图片css样式,js文件等就会异常-->
	<mvc:default-servlet-handler/>
	
	<!-- 配置视图解析器,用来实现controller的一个跳转用的,就是价格前缀后缀,跳转的时候java里面只需要写名字就可以了 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 给所有跳转的文件名统一配置前缀 -->
		<!-- 将文件放到web-inf下面也可以在这里配置成/WEB-INF/ -->
		<property name="prefix" value="/WEB-INF/page/"></property>
		<!-- 统一配置后缀 -->
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>
4.配置spring.xml也就是applicationContext.xml文件:

这里配置的有注解扫描和激活的标签,数据库连接池也就是数据源的创建,使用Spring来管理mybatis映射文件,创建mybatis函数工厂,创建dao的实现类,配置事务管理等,详细作用及代码:

<?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"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
	
	<!-- 如果程序中使用了注解,注解本身并没有特别的功能 我们需要让IOC容器知道类中哪里使用了注解,
	那么就去创建对应的bean context:component-scan作用用于扫描注解类 base-package代表注解类所在的包,
	可以设置多个值,用逗号分隔,也可以使用通配符,也可以是使用父级包名 -->
	<context:component-scan base-package="com.service"></context:component-scan>
	<!-- 激活aop注解 -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
	
	<!-- 创建数据库连接池,也就是创建数据源,jdbc连接 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:jdbc.properties"></property>
	</bean>
	<!-- 这里要添加一个mchange-commons-java-0.2.3.4.jar的包,还要重新配置spring管理 -->
	<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${url}"></property>
		<property name="driverClass" value="${driver}"></property>
		<property name="user" value="${name}"></property>
		<property name="password" value="${pwd}"></property>
		<!-- 初始化的连接数量 -->
		<property name="initialPoolSize" value="10"></property>
		<!-- 最大连接数 -->
		<property name="maxPoolSize" value="50"></property>
	</bean>
	
	<!-- 使用spring来管理mybatis -->
	<!-- myBatista需要创建sessionFactory对象来调用mapper -->
	<!--创建SqlSessionFactory,mybatis中的工厂函数对象  -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 首先是连接数据库,上面数据源创建好后,这里注入,使用dataSource属性,引用用ref -->
		<property name="dataSource" ref="datasource"></property>
		<!-- 读取mapper映射文件 使用mapperLocations属性,可以使用目录文件通配符,可以同时读取多个mapper文件-->
		<property name="mapperLocations" value="classpath:com/mapper/*.xml"></property>
		<!-- 给文件取别名 -->
		<property name="typeAliasesPackage" value="com.entity"></property>
		<!-- 把myBatis.xml文件内容再读取一遍 -->
		<!-- <property name="configLocation" value="classpath:mybatis.xml"></property> -->
		<!-- 可以实现分页查询 -->
		<property name="plugins">
		    <array>
		      <bean class="com.github.pagehelper.PageInterceptor">
		        <property name="properties">
		          <!--使用下面的方式配置参数,一行配置一个 -->
		          <value>
		            helperDialect=mysql
		          </value>
		        </property>
		      </bean>
		    </array>
		  </property>
	</bean>
	
	<!-- 创建dao的impl实现类 ,进入MapperScannerConfigurer的class来创建-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- basePackage该标签就是自动去value值里面对应的包下面找接口文件,然后再自动关联mapper映射文件,自动生成接口的实现类-->
		<!-- 可以在service中使用@AutoWired注解来引用dao层对象的实现类注入 -->
		<property name="basePackage" value="com.dao"></property>
	</bean>
	
	<!-- 配置事务管理 ,创建事务管理类-->
	<!-- 先导入DataSourceTransactionManager类 -->
	<bean id="txmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 如果要管理事务的提交,回滚等操作,需要数据库连接,那么就需要注入数据源对象 -->
		<property name="dataSource" ref="datasource" ></property>
	</bean>
	<!-- 方式二,利用注解来实现事务管理类 ,先添加激活事务注解标签,注入对应的事务管理类-->
	<tx:annotation-driven transaction-manager="txmanager"/>
	<!-- 然后再java中需要进行事务管理的service类中的方法或类名上方添加注解@Transactional 来实现事务控制-->
	
	
	
	
	<!-- 利用aop切入原理进行事务管理,添加一个tx标签 -->
	<!-- <tx:advice 用于配置管理事务的策略 -->
	<!-- <tx:advice id="txadvice" transaction-manager="txmanager" > -->
	<!-- 声明式事务管理,明确每个方法使用的具体策略 -->
		<!-- <tx:attributes> -->
			<!-- 针对增删改方法开起事务管理策略 -->
			<!-- <tx:method name="add*"/>
			<tx:method name="update*"/>
			<tx:method name="delete*"/>
			<tx:method name="edit*"/>
			<tx:method name="save*"/> -->
			<!-- 针对查询方法使用只读策略 -->
			<!-- <tx:method name="*" read-only="true" />
		</tx:attributes>
	</tx:advice> -->
	<!-- 那个地方的方法使用事务管理还是使用aop来控制 -->
	<!-- <aop:config>
		<aop:pointcut expression="execution(* com.demo3.service.impl.*.*(..))" id="pc"/>
		<aop:advisor advice-ref="txadvice" pointcut-ref="pc"/>
	</aop:config> -->
	
	
</beans>

下面是java文件部分:实体类,控制层,业务层,dao层

5.entity实体类:

这里用的是简单的学生表实体类(班级类省略):

package com.entity;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;
/**
 * 实体类
 * @author Administrator
 *
 */
public class Student {
	private Integer sid;
	private String sname;
	@DateTimeFormat(pattern="YYYY-MM-DD")
	private Date birthday;
	private String sex;
	private Clazz clz;//对象属性
	private Integer cid;
	
	//用来格式化日期时间再传到页面当中
	private String showdate;
	
	
	public Integer getCid() {
		return cid;
	}
	public void setCid(Integer cid) {
		this.cid = cid;
	}
	public String getShowdate() {
		//把对象原本的时间属性格式化成年月日类型再从页面获取
		SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD"); 
		return sdf.format(birthday);
	}
	public void setShowdate(String showdate) {
		this.showdate = showdate;
	}
	public Clazz getClz() {
		return clz;
	}
	public void setClz(Clazz clz) {
		this.clz = clz;
	}
	public Integer getSid() {
		return sid;
	}
	public void setSid(Integer sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

6.创建controller控制层:

这里是完成客户端的请求与处理功能,下面是一些注解的详细介绍和几个简单的增删改查操作:

package com.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

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

import com.entity.Clazz;
import com.entity.Student;
import com.github.pagehelper.PageInfo;
import com.service.ClazzService;
import com.service.StudentService;
/**
 * 控制层,用于接收和响应客户端的请求
 * @author Administrator
 *
 */
//想要接收请求,就要创建bean控制层的用@Controller注解来创建
@Controller
public class StudentController {
	
	//创建TestDao对象
	//依赖注入的注解,给属性注解用@Autowired
	//作用是给当前注解的属性赋值
	//它会自动去IOC容器中寻找与当前属性类型匹配的bean,然后赋值
	@Autowired
	StudentService studentService;
	@Autowired
	ClazzService clazzService;
	
	/**
	 * 查询方法
	 * 请求映射,方法要接收请求,就要使用@RequestMapping注解
	 * 接收的请求有后面的value来确定
	 */
	@RequestMapping("show")
	public String showAll(HttpServletRequest request,Integer pageNum,Integer pageSize){
		//使用了分页工具以后,这里查询就需要传入两个参数,如果参数为空就赋上初始值
		if(pageNum==null){
			pageNum=1;
		}
		if(pageSize==null){
			pageSize=3;
		}
		List<Student> list = studentService.getAllStudent(pageNum,pageSize);
		//分页工具类的一个对象,这里面有了所有需要的参数,可以在jsp中调用里面的参数实现上下页
		PageInfo<Student> pageinfo = new PageInfo<Student>(list);
		request.setAttribute("pageinfo",pageinfo);
		//若是视图解析器配置的文件地址不一样,可以使用重定向或者转发跳转方式,指定跳转标签
		//return "forward:/index.jsp";代表转发跳转
		//return "redirect:url";代表重定向
		return "show";
	}
	
	/**
	 * 查询班级信息
	 * 数据用在下拉列表显示用
	 */
	@RequestMapping("addpage")
	public String addpage(HttpServletRequest request){
		//跳到add.jsp页面之前查询出年级信息用下拉列表来展示
		List<Clazz> list = clazzService.getAll();
		request.setAttribute("clazzlist",list);
		return "add";
	}
	
	/**
	 * 添加操作
	 */
	@RequestMapping("add")
	public String add(Student stu){
		if(studentService.addStudent(stu)){
			//这里使用重定向跳转到show请求里,而不是跳转到show.jsp页面
			return "redirect:/show";
		}
		return "redirect:/addpage";
	}
	
	/**
	 * 删除操作
	 * 这里使用的是ajax异步请求,注解标签为@ResponseBody
	 */
	//ajax异步请求注解,这样返回值就不会进行跳转,而是直接返回给客户端一个值,接收后就可以执行相关操作
	@RequestMapping("del")
	@ResponseBody
	public String delete(Integer sid){
		if(studentService.deleteStudent(sid)){
			return "1";
		}
		return "0";
		//如果返回的字符串中有中文字符会出现中文乱码,需要在@RequestMapping注解中添加一个参数
		//加上produces="text/html;charset=utf-8" 这条参数就可以解决
	}
	
	/**
	 * 查询出单个人的信息
	 */
	//修改查询一个人信息
	@RequestMapping("selectone")
	public String add(HttpServletRequest request,Integer sid){
		List<Clazz> list = clazzService.getAll();
		request.setAttribute("clzlist",list);
		Student student = studentService.getOne(sid);
		request.setAttribute("student",student);
		return "update";
	}
	
	/**
	 * 更新操作
	 */
	@RequestMapping("update")
	public String update(Student stu){
		if(studentService.updateStudent(stu)){
			//在跳转页面的参数里加上相对应的值,到jsp页面的script里面用
			//jsp中用var param = '${param.a}';表达式接收再做响应的提示操作
			return "redirect:/show?a=1";
		}
		System.out.println("修改失败");
		return "redirect:/show";
	}
}

7.创建Service接口和serviceimpl业务操作层:

Service接口:定义所需功能(班级类的省略)

package com.service;

import java.util.List;

import com.entity.Student;
/**
 * 学生service层接口
 * @author Administrator
 *
 */
public interface StudentService {
	
	//添加方法
	public boolean addStudent(Student stu);
	
	//查询所有方法
	public List<Student> getAllStudent(int pageNum,int pageSize);
	
	//删除方法
	public boolean deleteStudent(Integer sid);
	
	//查询一个方法
	public Student getOne(Integer sid);
	
	//修改方法
	public boolean updateStudent(Student stu);
}

ServiceImpl实现类(班级类省略):完成接口定义的方法,详细注解及代码:

package com.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.dao.StudentDao;
import com.entity.Student;
import com.github.pagehelper.PageHelper;
import com.service.StudentService;

/**
 * service业务逻辑层
 * 用@Servicec来注解
 * 作用是创建该实现类的对象,方便在servlet中注入该对象
 */
//在需要进行事务管理的service类中的方法或类名上方添加注解@Transactional 来实现事务控制
//该注解也可以直接写在类上方对所有该类所有方法实现事务控制
@Service
@Transactional//事务管理 导包注意导springfromwork的包
public class StudentServiceImpl implements StudentService {
	
	//创建TestDao对象
	//依赖注入的注解,给属性注解用@Autowired
	//作用是给当前注解的属性赋值
	//它会自动去IOC容器中寻找与当前属性类型匹配的bean,然后赋值
	@Autowired
	StudentDao studentDao;
	
	@Override
	public boolean addStudent(Student stu) {
		if(studentDao.add(stu)>0){
			return true;
		}
		return false;
	}
	
	//进行事务管理的注解可以添加readOnly属性来设置只读@Transactional(readOnly=true)
	@Override
	public List<Student> getAllStudent(int pageNum,int pageSize) {
		PageHelper.startPage(pageNum, pageSize);
		return studentDao.selectAll();
	}

	@Override
	public boolean deleteStudent(Integer sid) {
		if(studentDao.delete(sid)>0){
			return true;
		}
		return false;
	}

	@Override
	public Student getOne(Integer sid) {
		Student student = studentDao.selectOne(sid);
		return student;
	}

	@Override
	public boolean updateStudent(Student stu) {
		System.out.println("进入修改的impl层");
		if(studentDao.update(stu)>0){
			return true;
		}
		return false;
	}

}
8.创建Dao层:

只需创建dao接口即可,daoImpl在xml问价中用bean创建,在映射文件mapper完成响应功能:

package com.dao;

import java.util.List;

import com.entity.Student;
/**
 * 学生表dao层
 */
public interface StudentDao {
	//添加方法
	public int add(Student stu);
	
	//查询所有方法
	public List<Student> selectAll();
	
	//删除方法
	public int delete(Integer sid);
	
	//查询一个方法
	public Student selectOne(Integer sid);
	
	//修改方法
	public int update(Student stu);
}

9.配置mapper.xml映射文件:

这里用来完成dao层中定义的数据库增删改查功能,详细代码:

<?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.dao.StudentDao">
	
	<resultMap type="com.entity.Student" id="stumap">
		<id property="sid" column="sid"/>
		<result property="sname" column="sname"/>
		<result property="birthday" column="birthday"/>
		<result property="sex" column="sex"/>
		<association property="clz" javaType="clazz">
			<id property="cid" column="cid"/>
			<result property="cname" column="cname"/>
		</association>
	</resultMap>
	
	<select id="selectAll" resultMap="stumap">
		select * from student a,clazz b where a.clzzid = b.cid
	</select>
	
	<select id="selectOne" resultType="com.entity.Student">
		select * from student where sid=#{sid}
	</select>
	
	<insert id="add">
		insert into student values(null,#{sname},#{birthday},#{sex},#{clz.cid})
	</insert>
	
	<delete id="delete">
		delete from student where sid=#{sid}
	</delete>
	
	<delete id="update">
		update student set sname =#{sname},birthday=#{birthday},sex=#{sex},clzzid=#{clz.cid} WHERE sid =#{sid}
	</delete>
</mapper>
10.配置jdbc.properties文件存放数据库连接信息:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8
name=root
pwd=admin
11.下面是对应的Jsp页面内容(一般放在WEB-INF下面的单独文件中):

配置c标签:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

导入js文件:

<script type="text/javascript" src="/SSM1/js/jquery-3.3.1.js"></script>

查询内容显示页面:

<body>
    <h1>显示学生信息</h1>
    <p><a href="/SSM1/addpage">新增数据</a></p>
    <table border="1">
    	<tr><td>全选</td><td>序号</td><td>姓名</td><td>生日</td><td>性别</td><td>班级</td><td>删除</td><td>修改</td></tr>
    	<!-- ${pageinfo.list}这个是分页工具类封装好的集合 -->
    	<c:forEach items="${pageinfo.list}" var="s" varStatus="i">
    		<!-- varStatus="i"和${i.count}来代表循环的次数,用来代替id序号 -->
    		<tr><td>选择标签</td><td>${i.count}</td><td>${s.sname}</td><td>${s.birthday}</td><td>${s.sex}</td><td>${s.clz.cname}</td>
    		<!-- 删除这里使用的是异步请求,先将a标签的点击事件取消,在添加自己的单击事件 -->
    		<!-- this代表的是当前的这个a标签,后面可以带参数 -->
    		<td><a href="javaScript:void(0)" onclick="del(this,'${s.sid}')">删除</a></td>
    		<td><a href="selectone?sid=${s.sid}">修改</a></td></tr>
    	</c:forEach>
    </table>
    <p>
    	<!-- 使用的是分页工具类,可以在pagehelper网站工具上查看使用 -->
    	<c:if test="${pageinfo.hasPreviousPage}">
    		<a href="show?pageNum=${pageinfo.pageNum-1}">上一页</a>
    	</c:if>
    	<c:if test="${pageinfo.hasNextPage}">
    		<a href="show?pageNum=${pageinfo.pageNum+1}">下一页</a>
    	</c:if>
    </p>
    
    <script type="text/javascript">
    	/* 在java跳转的时候url中加上参数,在这里用param来接收
    	做响应的操作提示*/
    	var param = '${param.a}';
    	if(param!=''){
    		if(param==1)
    		alert("修改成功");
    		
    	}
    	
    	function del(a,sid){
    		var result = confirm("确定要删除吗")
    		if(result){
    			/* 使用异步方式进行删除,提交访问控制层的地址,和需要用到的参数 */
    			$.post("del","sid="+sid,function(r){
    				/* 回调函数里面接收控制层返回的值判断进行相应操作 */
    				if(r==1){
    					$(a).parent().parent().remove();
    					alert("删除成功");
    				}else{
    					alert("删除失败");
    				}
    			})
    		}
    	}
    </script>
  </body>

添加信息功能页面:

<body>
    <h1>新增学生</h1>
    <form action="add" method="post">
    	<p>学生姓名:<input name="sname"/></p>
    	<p>学生生日:<input type="date" name="birthday"/></p>
    	<p>学生性别:<select name="sex">
    		<option></option>
    		<option></option>
    	</select></p>
    	<!-- 在java控制层查询后用来显示下拉列表使用 -->
    	<p>学生班级:<select name="clz.cid">
    		<c:forEach items="${clazzlist}" var="c">
    			<option value="${c.cid}">${c.cname}</option>
    		</c:forEach>
    	</select></p>
    	<p><input type="submit" value="新增"/></p>
    </form>
  </body>

修改信息页面:

<body>
    <h1>修改学生</h1>
    <form action="update" method="post">
    	<!-- 使用隐藏域传递完整参数 -->
    	<input type="hidden" name="sid" value="${student.sid}">
    	<!-- 里面用value来显示修改信息时候的默认值 -->
    	<p>学生姓名:<input name="sname" value="${student.sname}" /></p>
    	<!-- 时间调用的是格式化后的时间参数 -->
    	<p>学生生日:<input type="date" name="birthday" value="${student.showdate}"/></p>
    	<p>学生性别:<select name="sex">
    		<option>${student.sex}</option>
    		<option></option>
    		<option></option>
    	</select></p>
    	<!-- 提交的属性是对象里的对象的属性名称 -->
    	<p>学生班级:<select name="clz.cid">
    		<c:forEach items="${clzlist}" var="c">
    			<!-- 中间加入一个if判断来显示默认值,中间用selected -->
    			<!-- 循环的内容要有value值 -->
    			<option <c:if test="${student.cid==c.cid }">selected</c:if> value="${c.cid}">${c.cname}</option>
    		</c:forEach>
    	</select></p>
    	<p><input type="submit" value="确认修改"/></p>
    </form>
  </body>

(参考使用)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值