Spring MVC(一)
MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域,MVC特指一种表现层设计模式,不限于Java语言
spring mvc属于spring框架的后续产品,用在基于MVC的表现层开发,类似于struts2框架
springmvc快速入门
步骤一:创建springmvc-day01的一个web应用
步骤二:导入springioc,springweb , springmvc相关的jar包
步骤三:在/WEB-INF/下创建web.xml文件
<!-- 注册springmvc框架核心控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name> springmvc工作的时候会默认的去/WEB-INF/目录下查找DispatcherServlet-servlet.xml配置文件 名字一致
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>注意这里是*.action,不是/* 因为/* 访问jsp也会访问该映射
</servlet-mapping>
步骤四:创建HelloAction.java控制器类
ModelAndView :表示向视图封装的数据和路径。
/**
* 控制器
*/
public class HelloAction implements Controller{
/**
* 业务方法
*/
public ModelAndView handleRequest(HttpServletRequest requqest,HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message","这是我的第一个springmvc应用程序");
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
}
步骤五:在/WebRoot/下创建jsp/success.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>这是我的第一个springmvc应用程序</title>
</head>
<body>
success.jsp<br/>
${message}
</body>
</html>
步骤六:在/WEB-INF/创建DispatcherServlet-servlet.xml配置文件,xml头部信息与spring.xml相同
注意:该配置文件的命名规则:web.xml文件中配置的<servlet-name>的值-servlet.xml
DispatcherServlet-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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- 控制器(程序员) 开发的action必须配置到spring IOC容器中,即必须配置bean
name:是访问的请求路径 class:是处理器类
--> 单例
<bean name="/hello.action" class="cn.itcast.javaee.springmvc.base.HelloAction"></bean> 这里是name,不是id,spring中配置bean是id,
<!-- 映射器(框架) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> 表示将bean标签的name属性当做url请求,可选,即可以不配置这里 M
<!-- 适配器(框架) -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> 表示用于查找实现了Controller接口的action类,可选的 C
<!-- 视图解析器(框架) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean> 表示通过ModelAndView对象中封装的视图名找到真正的jsp页面,可选的 V
</beans>
步骤七:部署web应用到tomcat中,通过浏览器访问如下URL:
http://127.0.0.1:8080/springmvc-day01/hello.action
加载自定义目录下的springmvc.xml配置文件
在默认情况下:springmvc框架的配置文件必须叫<servlet-name>-servlet.xml。且必须放在/WEB-INF/目录下,除此之外,我们也可以在web.xml文件中,为DispatcherServlet配置一个初始化参数,
让它去我们指定的目录下加载springmvc.xml配置文件 ,web.xml代码如下:
<!-- 注册springmvc框架核心控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name> 这里的名字是固定的,且大小写敏感
<param-value>/WEB-INF/classes/cn/itcast/javaee/springmvc/config/springmvc.xml</param-value> 名字随意,可以自定义
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
如果springmvc.xml配置文件放在src目录下,web.xml代码如下:
<!-- 注册springmvc框架核心控制器 -->
<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:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
视图解析器InternalResourceViewResolver【解析视图逻辑名对应的真实路径】
ModelAndView对象中即可以封装真实视图路径名,也可以封装视图路径的逻辑名,如果封装的是真实路径名,视图解析器可以不配置,但是如果使用了逻辑视图名,必须配置视图解析器,指定前缀,后缀等
springmvc.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- 注册Action(必须配置) -->
<bean name="/hello.action" class="cn.itcast.javaee.springmvc.app07.HelloAction"></bean>
<!--
如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
如果Action中书写的是视图真实名称,那么视图解析器就可选配置
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路径前缀 -->
<property name="prefix" value="/jsp/"/>
<!-- 路径后缀 -->
<property name="suffix" value=".jsp"/>
<!-- 前缀+视图逻辑名+后缀=真实路径 -->
</bean>
</beans>
Action类代码如下:
modelAndView.setViewName("success");逻辑名称
映射器Mapping【什么样的请求交给Action】
1) org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心)
将程序员定义的Action所对应的<bean>标签的name属性作为请求路径
<!-- 注册控制器(程序员) -->
<bean name="/add.action" class="cn.itcast.javaee.springmvc.mapping.UserAction"></bean>
<!-- 注册映射器(handler包)(框架) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
2) org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
/delete.action和/update.action和/find.action请求路径都交由<bean>标签为id的Action,即
多个路径对应同一个Action
<!-- 注册控制器(程序员) -->
<bean id="userActionID" class="cn.itcast.javaee.springmvc.mapping.UserAction"></bean> 配置id还是name取决于该acting是否几个请求公用,如果是几个请求都访问该action,用id,否则用name
<!-- 注册映射器(handler包)(框架) -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 将多个请求映射到同一个action上去,当然也可以采用上面的BeanNameUrlHandlerMapping的方法配置多个。
<property name="mappings">
<props>
<prop key="/delete.action">userActionID</prop>
<prop key="/update.action">userActionID</prop>
<prop key="/find.action">userActionID</prop>
</props>
</property>
</bean>
当然也可以使用<bean name="/add.action" class="cn.itcast.javaee.springmvc.mapping.UserAction"></bean> 配置多个。
适配器Adapter【Action实现什么接口】
适配器是去查找实现了Controller接口的Action
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
public class EmpAction implements Controller{
public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
System.out.println("EmpAction::handleRequest");
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message",username);
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
}
springmvc.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- EmpAction处理类 -->
<bean name="/add.action" class="cn.itcast.javaee.springmvc.app09.EmpAction"></bean>
<!-- 映射器(省) -->
<!-- 适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> 框架会自动的去查找实现了Controller接口的Action,可省,适配器有很多种,这个是默认的,可以不配置
<!-- 视图解析器(省) -->
</beans>
Action类实现Controller接口的缺点:
1.与原生servlet耦合了,因为handlerRequest方法中传入了request,response参数
2.如果参数传入过多,实现接口的action中收集前端传入的参数就比较麻烦,能用实体类接受前端传入参数最好
JSP转到JSP/html的控制器ParameterizableViewController
1) org.springframework.web.servlet.mvc.ParameterizableViewController
如果请求是/hello.action的请求路径,则直接跳转到/jsp/success.jsp页面,不经过程序员定义的控制器Action
<!-- /index.action请求,直接转发到/index.jsp页面 -->
<bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="/index.jsp"/>
</bean>
<!-- 注册视图解析器(view包)(框架)
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
-->
2) org.springframework.web.servlet.mvc.AbstractCommandController
能够以实体的形式,收集客户端参数
public class AdminAction extends AbstractCommandController{
//private Admin admin;注意这里不能用类似struts2的方法,因为spring产生的action是单例的。
public AdminAction(){
this.setCommandClass(Admin.class);
}
@Override
protected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object obj, BindException bindException)throws Exception {
System.out.println("AdminAction::handle");
ModelAndView modelAndView = new ModelAndView();
Admin admin = null;
if(obj instanceof Admin){
admin = (Admin) obj;
}
modelAndView.addObject("username",admin.getUsername());
modelAndView.addObject("gender",admin.getGender());
modelAndView.addObject("hiredate",admin.getHiredate());
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
}
obj表示封装后的实体,bindException表示封装时产生的异常
注意,spring中的action默认是单例的,不同于Struts2,所以这里不能用struts2中的方法,在action中定义一个实体来接收前端的数据,Struts2中的action是多例的、
<!-- 请求处理类 -->
<bean name="/add.action" class="cn.itcast.javaee.springmvc.controller.AdminAction"></bean>
<!-- 映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>演示二个控制器</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/add.action" method="POST">
<table border="2" align="center">
<tr>
<th>姓名</th>
<td><input type="text" name="username"/></td> 这里的名称要与javabean中一致
</tr>
<tr>
<th>性别</th>
<td>
<input type="radio" name="gender" value="男"/>男
<input type="radio" name="gender" value="女" checked/>女
</td>
</tr>
<tr>
<th>入职时间</th>
<td>
<input type="text" name="hiredate" value="2015-5-10"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</body>
</html>
日期转换器和编码过滤器
1) 在默认情况下,springmvc不能将String类型转成Date类型,必须自定义类型转换器
public class AdminAction extends AbstractCommandController{
@Override
protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}
package cn.itcast.javaee.springmvc.app10;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
/**
* 单例
* 处理类
* @author AdminTC
*/
@SuppressWarnings("deprecation")
public class EmpAction extends AbstractCommandController{
public EmpAction(){
//将表单参数封装到Emp对象中去
this.setCommandClass(Emp.class);
}
/**
* 自定义类型转换器,将String->Date类型(格式yyyy-MM-dd)
*/
@Override
protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
//向springmvc内部注入一个自定义的类型转换器
//参数一:将String转成什么类型的字节码
//参数二:自定义转换规则
//true表示该日期字段可以为空
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}
/**
* obj表示封装后的实体
* error表示封装时产生的异常
*/
@Override
protected ModelAndView handle(
HttpServletRequest request,
HttpServletResponse response,
Object obj,
BindException error)throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message","增加员工成功");
Emp emp = (Emp) obj;
System.out.println(emp.getUsername()+":"+emp.getGender()+":"+emp.getHiredate().toLocaleString());
//将Emp封装到ModeAndView对象中
modelAndView.addObject("emp",emp);
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
}
日期回显:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> jstl标签库
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
success.jsp<br/>
成功<br/>
${requestScope.message}<br/>
姓名:${requestScope.emp.username}<br/>
性别:${requestScope.emp.gender}<br/>
入职时间:${requestScope.emp.hiredate}<br/> 这里显示的日期格式不是常规的,要转换成方便看的格式。
<hr/>
入职时间:<fmt:formatDate
value="${requestScope.emp.hiredate}"
type="date"
dateStyle="medium"
/>
<!--
1)fmt:formatDate 来源于 http://java.sun.com/jsp/jstl/fmt
2)fmt:formatDate作用是格式化日期的显示,例如:2015年5月10日 星期日
3)value表示需要格式化的值
4)type表示显示日期,时间,都显示
type=date表示只显示日期
type=time表示只显示时间
type=both表示日期时间均显示
5)dateStyle表示显示日期的格式:short/medium/default/long/full
-->
</body>
</html>
2) spring提供的,专用于解决POST提交中文乱码问题,需要在web.xml文件中配置
<!-- 编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
springmvc与struts2的区别
1) springmvc的入口是一个servlet,即前端控制器,例如:*.action
struts2入口是一个filter过虑器,即前端过滤器,例如:/*
2)springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例
3)springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成
ModelAndView对象,最后又将模型数据通过request对象传输到页面
struts采用值栈存储请求和响应的数据,通过OGNL存取数据
员工管理系统--增加员工
技术:springmvc + spring + jdbc + oracle
1.数据库设计
--oracle
create table emps(
id ) primary key,
username ) not null,
salary ,) not null,
hiredate date not null
);
desc emps;
2.实体类javabean
package cn.itcast.emp.entity;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
* 员工
* @author AdminTC
*/
public class Emp {
private String id;//编号
private String username;//姓名
private Double salary;//薪水
private Date hiredate;//入职时间
public Emp(){}
public String getId() {
return UUID.randomUUID().toString(); 自动生成uid
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
}
3.工具类
/**
* 工具类
* @author AdminTC
*/
public class JdbcUtil {
/**
* 去src目录下加载c3p0-config.xml配置文件
*/
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
/**
* 获取数据源
*/
public static ComboPooledDataSource getDataSource() {
return dataSource;
}
}
c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
<property name="jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="user">scott</property>
<property name="password">tiger</property>
<property name="acquireIncrement">2</property>
<property name="initialPoolSize">5</property>
<property name="minPoolSize">1</property>
<property name="maxPoolSize">5</property>
</default-config>
</c3p0-config>
4. dao
package cn.itcast.emp.dao;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.sql.Date;
import org.apache.commons.dbutils.QueryRunner;
import cn.itcast.emp.entity.Emp;
import cn.itcast.emp.util.JdbcUtil;
/**
* 员工管理模块
* 持久层实现类
* @author AdminTC
*/
public class EmpDao {
/**
* 增加员工
*/
public void add(Emp emp) throws Exception{
QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());
String sql = "insert into emps(id,username,salary,hiredate) values(?,?,?,?)";
Object[] params = {emp.getId(),emp.getUsername(),emp.getSalary(),emp.getHiredate()};
runner.update(sql,params);
}
public static void main(String[] args) throws Exception{
Emp emp = new Emp();
emp.setId("a140a519-6168-4a97-a753-5c5e5cf0a8b2");
emp.setUsername("哈哈");
emp.setSalary(7000D);
String year = "15";
String month = "5月";
String date = "10";
String str = date+"-"+month+"-"+year;
DateFormat df = new SimpleDateFormat("dd-MM-yy");
emp.setHiredate(df.parse(str));
EmpDao dao = new EmpDao();
dao.add(emp);
}
}
5.service
package cn.itcast.emp.service;
import cn.itcast.emp.dao.EmpDao;
import cn.itcast.emp.entity.Emp;
/**
* 员工管理模块
* 业务层实现类
* @author AdminTC
*/
public class EmpService {
private EmpDao empDao;
public void setEmpDao(EmpDao empDao) {
this.empDao = empDao;
}
/**
* 增加员工
*/
public void register(Emp emp) throws Exception{
empDao.add(emp);
}
}
6.action
package cn.itcast.emp.action;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import cn.itcast.emp.entity.Emp;
import cn.itcast.emp.service.EmpService;
/**
* 员工管理模块
* 控制器
* @author AdminTC
*/
@SuppressWarnings("deprecation")
public class EmpAction extends AbstractCommandController{
//业务层
private EmpService empService;
public void setEmpService(EmpService empService) {
this.empService = empService;
}
//将表单参数封装到Emp实体中
public EmpAction(){
this.setCommandClass(Emp.class);
}
//自定义String->Date的转换器
@Override
protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("dd-MM-yy"),true));
}
@Override
protected ModelAndView handle(
HttpServletRequest request,
HttpServletResponse response,
Object obj,
BindException error)
throws Exception {
ModelAndView modelAndView = new ModelAndView();
Emp emp = (Emp) obj;
System.out.println(emp.getHiredate().toLocaleString());
empService.register(emp);
modelAndView.addObject("message","操作成功");
modelAndView.setViewName("success");
return modelAndView;
}
}
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">
<!-- 注册springmvc核心控制器 -->
<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>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 注册争对POST请求的编码器 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
spring.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- 注册EmpDao类 -->
<bean id="empDaoID" class="cn.itcast.emp.dao.EmpDao"></bean>
<!-- 注册EmpService类 -->
<bean id="empServiceID" class="cn.itcast.emp.service.EmpService">
<property name="empDao" ref="empDaoID"/>
</bean>
<!-- 注册Action -->
<bean name="/add.do" class="cn.itcast.emp.action.EmpAction">
<property name="empService" ref="empServiceID"/>
</bean>
<!-- 映射器 -->
<!-- 适配器 -->
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>员工管理系统</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/add.do" method="POST">
<table border="2" align="center">
<tr>
<th>姓名</th>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<th>期望薪水</th>
<td>
<input type="text" name="salary" value="7000"/>
</td>
</tr>
<tr>
<th>入职时间</th>
<td>
<input type="text" name="hiredate" value="2015-5-10"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</body>
</html>
success.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
/success.jsp<br/>
${requestScope.message}<br/>
</body>
</html>
Spring MVC(一)的更多相关文章
- 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...
- Spring MVC重定向和转发以及异常处理
SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...
- Spring MVC入门
1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...
- Spring7:基于注解的Spring MVC(下篇)
Model 上一篇文章<Spring6:基于注解的Spring MVC(上篇)>,讲了Spring MVC环境搭建.@RequestMapping以及参数绑定,这是Spring MVC中最 ...
- Spring6:基于注解的Spring MVC(上篇)
什么是Spring MVC Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...
- 高性能的关键:Spring MVC的异步模式
我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表的文章,以一个更简单的视角,把异步模式讲清楚. 什 ...
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- 深入分析Spring 与 Spring MVC容器
1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...
- spring mvc DispatcherServlet详解之前传---FrameworkServlet
做项目时碰到Controller不能使用aop进行拦截,从网上搜索得知:使用spring mvc 启动了两个context:applicationContext 和WebapplicationCont ...
- 我是如何进行Spring MVC文档翻译项目的环境搭建、项目管理及自动化构建工作的
感兴趣的同学可以关注这个翻译项目 . 我的博客原文 和 我的Github 前段时间翻译的Spring MVC官方文档完成了第一稿,相关的文章和仓库可以点击以下链接.这篇文章,主要是总结一下这个翻译项目 ...
随机推荐
- hibernate添加spring 事务管理注意问题记录
今天弄了一天的hibernate添加事务的问题 首先,建立的是一个java工程,把hibernate添加进工程里,很容易就可以写一个增删改查的方法.索性就多加点东西,把接口,抽象类也加到里面,自己看着 ...
- 【CSS学习笔记】CSS选择器
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- python虚拟环境的使用
一. 安装 sudo apt-get install python-virtualenv 二. 创建环境 sudo virtualenv Myenv 创建完全隔离的Python环境,实质是创建了一个文 ...
- Form 提交表单
---HTML <form action="/Sample/SampleList/ExportSample" style="display:inline" ...
- 【CodeVS】1293
输入输出样例 思路:看到题目我萌第一眼想到的肯定是求联通快对吧,但是这个联通快有点奇特,因为 这样他也算是一个联通快.解决此题其实有三种解法:1)宽搜(这个符合基本法):2)并查集:3)灌水法 但是蒟 ...
- kali2.0 + LAMP
0x01 更新源 leafpad /etc/apt/sources.list #中科大kali源 deb http://mirrors.ustc.edu.cn/kali sana main non-f ...
- python自动化开发-2
1.python的数据类型之列表 列表是Python开发语言中最常见的数据类型之一,通过列表可以实现对数据的增删改等常用操作. 列表的定义:例子 names = ["Lucy",& ...
- IntelliJ IDEA中类似Eclipse自动补全变量名称和属性名称的快捷键
IntelliJ IDEA 默认快捷键模式下 自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f
- mysql权限设置
想要设定权限,必须通过root用户登录: >> grant all privileges on *.* to root@"%" identified by " ...
- 形象化理解nice值越高优先级越低
当我们说起某个人很nice的时候,通常指的是那个人心地善良,很好说话,很容易相处.(相反,aggressive的人很可能是不nice的,因为老想抢夺别人的东西,尤其是在资源有限的情况下,恨不得一个蛋糕 ...