springmvc

有点类似struts

1.建立动态工程后,导入包

在WEB-INF目录下创建 web.xml
配置Spring MVC的入口 DispatcherServlet,把所有的请求都提交到该Servlet
注意:springmvc
springmvc这个名字在下一步会用到

<?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">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2.创建springmvc-servlet.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="simpleUrlHandlerMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/index">indexController</prop>
            </props>
        </property>
    </bean>
    <bean id="indexController" class="controller.IndexController"></bean>
</beans>

3.控制类 IndexController

package controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
 
public class IndexController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("index.jsp");
        mav.addObject("message", "Hello Spring MVC");
        return mav;
    }
}

4.准备index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
 
<h1>${message}</h1>

原理图

笔记

implements Controller,这个很像以前javaweb中的servlet , 负责转发,传达信息

视图定位

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/page/"/>
		<property name="suffix" value=".jsp"/>
	</bean>

意义

注解

<?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"
    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">
     
    <context:component-scan base-package="controller" />
    <bean id="irViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/" />
        <property name="suffix" value=".jsp" />
    </bean>
<!--     <bean id="simpleUrlHandlerMapping" -->
<!--         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> -->
<!--         <property name="mappings"> -->
<!--             <props> -->
<!--                 <prop key="/index">indexController</prop> -->
<!--             </props> -->
<!--         </property> -->
<!--     </bean> -->
<!--     <bean id="indexController" class="controller.IndexController"></bean> -->
</beans>

学习SpringMVC不需要深入了解xml,会用就可以了

=====================================

参数

package controller;

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

import pojo.Product;

@Controller
public class ProductController {
//	控制器ProductController,准备一个add方法映射/addProduct路径
//	为add方法准备一个Product 参数,用于接收注入
//	最后跳转到showProduct页面显示用户提交的数据
	@RequestMapping("/addProduct")
	public ModelAndView add(Product product) throws Exception{
		ModelAndView mav = new ModelAndView("showProduct");
		return mav;
	}
}

重点

注: addProduct.jsp 提交的name和price会自动注入到参数 product里
注: 参数product会默认被当做值加入到ModelAndView 中,相当于:mav.addObject("product",product);

个人笔记: JSP中的 name="name" name="price" 提交到

。在ProductController 那边, addProduct.jsp 提交的name和price会自动注入到方法参数 product里 。然后,参数product会默认被当做值加入到ModelAndView 中,相当于:mav.addObject("product",product);**,也相当于以前的那个request.setatttribute("XX",hello);

springMVC好强大啊 , form 表单 不用get 或者 post 都能接收参数

一堆 product 傻傻分不清楚,${product} 从何而来,抛砖引玉为大家解惑


绝大部分疑问都是围绕 ${product} 这个 product 到底是哪儿来的,看了站长的回答,其实是有些问题的。
我自己一开始也是一脸懵逼的,经过多次实验以及google,给大家讲一下吧:

如果按照教程好好学过来,大家应该都知道,EL 表达式中的参数应该是来自于 addObject("abc",xxx) 中的第一个参数 abc
站长说的半对半错,他告诉你们参数 product 会默认被当做值加入到 ModelAndView 中
但是没有说,这只是 addObject() 第二个参数的来历,有疑问的其实更关心第一个参数,也就是我们 EL 表达式中要用到的这个 "product" 从何而来:)

一句话,大家就能明白:
add()方法的【参数类型】会自动转小驼峰并加入到 ModelAndView 中作为 addObject() 的【第一个参数】,相当于 addObject("theFirstParam", product);

综上:addObject 里第一个参数是根据 add() 的参数类型自动转成小驼峰命名,第二个参数是 add() 的参数名。

区分命名,举个极端的栗子就明白了,这里代码看的不爽点上面【代码】到那里看

bean:
public class MyFuckingProduct {...};

controller:
public ModelAndView add(MyFuckingProduct 随便写我写中文应该没人发现吧) {...}

jsp:
${myFuckingProduct.xxx}

跑一下,bingo!

大家注意 add() 方法的参数,参数名是什么根本不用管,瞎写一通 fhdhdfai2u3y,没有关系,因为默认的 addObject()方法第一个参数只跟你的参数类型有关系,第二个参数就是你瞎写的参数名。
相当于:addObject("myFuckingProduct", 随便写我写中文应该没人发现吧);
然后 EL 表达式写什么就很明了了。

也就是解答下面的疑惑
![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601095529221-505056154.png)




![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601101751774-2147182770.png)


===============================

###客户端跳转(个人认为是相当于重定向)
在前面的例子中,无论是/index跳转到index.jsp 还是/addProduct 跳转到showProduct.jsp,都是服务端跳转。((个人认为是相当于转发))。

![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601102944946-688802196.png)



![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601104130288-211931082.png)


![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601104140068-634425259.png)


###Session在用户登录,一些特殊场合在页面间传递数据的时候会经常用到

##重要发现

![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601113906313-663585324.png)


session的作用就是服务器会为不同的浏览器创建一个新的JSESSIONID 。 
上面演示的就是同一台电脑,打开了2个不同的浏览器的 
session在浏览器关闭时 就会结束,并销毁这个流浪器JSESSIONID 的标识号

经我实验确实这样,我又重新打开一个新的浏览器,发现它的JSESSIONID=8E6CFCF25896A903EA99DB97575A2797 ,总之 这个应该标记号应该是全球唯一的。估计还带有机器码相关的算法



##在Spring MVC中处理中文问题和Filter处理中文问题是一样的手段

修改web.hml




springmvc

org.springframework.web.servlet.DispatcherServlet

1


springmvc
/


CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
utf-8



CharacterEncodingFilter
/*



![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601162459890-354870292.png)

![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601162558812-704366895.png)

![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601162807375-180311363.png)

![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601162820411-1668161588.png)

![](https://images2018.cnblogs.com/blog/1175089/201806/1175089-20180601162909579-1257819798.png)
原文地址:https://www.cnblogs.com/czy16/p/9114250.html