一.springMVC通過xml設置
1.在web.xml中配置springmvc控制器
<!-- 配置springMvc核心控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 默認會去WEB-INF下找DispatcherServlet-servlet.xml文件 -->
2.在WEB-INF下配置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: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">
<bean name="/hello.do" class="com.itheima.springmvc.HelloAction" ></bean>
<!-- 映射器
將bean的name屬性當做url請求
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 適配器
用於尋找實現了Controller接口的實現類
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 視圖解析器
通過ModelAndView對象封裝的視圖名找到真正的頁面
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
3.自定義HelloAction.java
public class HelloAction implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "hello world!!");
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
}
4.自定義/jsp/success.jsp文件
<body>
<h1>${message}</h1>
</body>
5.加載指定的springmvc.xml文件
在web.xml中配置
<!-- 配置springMvc核心控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通知DispatcherServlet去指定路徑下加載springmvc.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
6.配置邏輯視圖
在springmvc01.xml中配置
<!-- 視圖解析器
通過ModelAndView對象封裝的視圖名找到真正的頁面
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
7.將springmvc01.xml加入總springmvc.xml文件
<import resource="com/itheima/springmvc/spring01.xml"/>
8.映射器配置
在springapp01.xml配置
<!-- 映射器
適合將多個請求路徑映射到一個action中
-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/update.do">userAction</prop>
<prop key="/delete.do">userAction</prop>
<prop key="/query.do">userAction</prop>
</props>
</property>
</bean>
9.jsp到jsp/html之間的轉發控制器
<!-- jsp到jsp之間的轉發控制器 -->
<bean name="/home.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="/jsp/success.jsp"></property>
</bean>
10.封裝參數的控制器
public class UserAction extends AbstractCommandController{
public UserAction(){
this.setCommandClass(User.class);
}
@Override
protected ModelAndView handle(
HttpServletRequest request,
HttpServletResponse response,
Object obj,
BindException error)
throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "增加用戶成功");
modelAndView.setViewName("/jsp/success.jsp");
User user = (User)obj;
System.out.println(user.getUserName()+"..."+user.getAge());
return modelAndView;
}
}
11.解決springmvc的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>
12.自定義日期轉換器
在UserAction.java中重寫initBinder方法
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(
new SimpleDateFormat("yyyy-mm-dd"),true));
}
二.springmvc的註解方式
1.在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">
<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>
</web-app>
2.配置spring.xml
<import resource="com/daming/springmvc/app01/spring_app01.xml"/>
3.配置spring_app01.xml
<!-- 讓springioc容器自動掃描帶註解的文件類 -->
<context:component-scan base-package="com.daming.springmvc.app01"></context:component-scan>
4.帶註解的action類
@Controller
public class UserAction {
@RequestMapping(value="/hello.do",method=RequestMethod.POST)
//接收普通的參數
public String hello(Model model,String userName,int age){
model.addAttribute("message", "hello");
System.out.println(userName+":"+age);
return "/jsp/success.jsp";
}
@RequestMapping(value="/register.do")
//接收封裝參數的對象
public String register(Model model,User user){
model.addAttribute("message", "register");
System.out.println(user.getUserName() +":"+user.getAge()+":"+user.getHeridate());
return "/jsp/success.jsp";
}
//接收數組
@RequestMapping("/bye.do")
public String bye(Model model){
model.addAttribute("message", "bye");
return "/jsp/success.jsp";
}
@RequestMapping("/deleteAll.do")
public String deleteAll(Model model,int[] ids){
model.addAttribute("message", "deleteAll");
return "/jsp/success.jsp";
}
//接收list封裝的參數
@RequestMapping("/addAll.do")
public String addAll(Model model,Bean bean){
for (int i = 0; i < bean.getEmpList().size(); i++) {
System.out.println(
bean.getEmpList().get(i).getUserName()+":"
+bean.getEmpList().get(i).getAge());
}
model.addAttribute("message", "addAll");
return "/jsp/success.jsp";
}
}
5.結果的轉發和重定向
@Controller
@RequestMapping("/emp")
public class EmpAction {
@RequestMapping("/findById.do")
public String findById(String id){
System.out.println("findByid id = "+id);
//return "forward:/emp/updateById.do";
return "redirect:/emp/updateById.do";
}
@RequestMapping("/updateById.do")
public String updateById(String id,Model model){
System.out.println("updateById id = "+id);
model.addAttribute("message",id);
return "/jsp/success.jsp";
}
}
6.以Json形式作爲請求參數和返回值類型
@Controller
@RequestMapping("/json")
public class EmpAction {
@RequestMapping("/bean2json.do")
public @ResponseBody Emp bean2json(){
System.out.println("bean2json");
Emp emp = new Emp();
emp.setUserName("大明");
emp.setAge("20");
return emp;
}
@RequestMapping("/map2json.do")
public @ResponseBody Map map2json(){
Map map = new HashMap<String, Object>();
List<Emp> list = new ArrayList<Emp>();
System.out.println("map2json");
Emp emp = new Emp();
emp.setUserName("大明");
emp.setAge("20");
list.add(emp);
list.add(emp);
map.put("empList",list);
map.put("rows",list.size());
return map;
}
@RequestMapping("/list2json.do")
public @ResponseBody List<Emp> list2json(){
System.out.println("list2json");
List<Emp> list = new ArrayList<Emp>();
Emp emp = new Emp();
emp.setUserName("大明");
emp.setAge("20");
list.add(emp);
list.add(emp);
return list;
}
@RequestMapping("/requestjson.do")
public @ResponseBody String requestjson(@RequestBody Emp emp){
System.out.println(emp.getUserName()+":"+emp.getAge());
return "haha";
}
}