1,idea的maven,选择webapp
配置依赖,当然,需要配置tomcat客户端
<!--导入springmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<!--导入aop切面-->
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.4</version>
</dependency>
<!--导入jstl-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--导入lombok替代set,get-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.31</version>
</dependency>
</dependencies>
2,配置核心配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--在汤姆猫的conf的web取头文件-->
<!--全局配置-->
<!--整个应用的核心文件配置springmvc前置核心控制器-->
<servlet>
<!--取名和加载类DispatcherServlet-->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置初始化参数,加载springmvc核心配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<!--servlet映射地址,对web所有根路径请求都进行处理-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置字符编码过滤器,解决中文参数乱码问题-->
<filter>
<filter-name>characterEncoding</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>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3,配置资源文件springmvc,进行规则限定
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--加规则-->
<!--扫描控制包组件-->
<context:component-scan base-package="com.entor.controller"/>
<!--使用注解驱动装配请求地址处理类对象,
客户端发送不同的请求地址交给不同的类不同的方法进行处理,只要在类或者方法上添加相应的注解即可
加入这个,只需要在方法或类加注解@Controller即可-->
<mvc:annotation-driven/>
<!--对静态资源不做拦截,css,js,images-->
<mvc:default-servlet-handler/>
<!--配置资源视图解释器,作用:解释视图,根据服务器返回的内容选择不同的视图解释器最终渲染到视图界面显示给客户端
给你返回的加前缀/和后缀.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<!--配置资源前缀路径,/指webapp根路径,从webapp根路径下查找视图文件-->
<property name="prefix" value="/"/>
<!--配置资源后缀名称,jsp文件-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4,配置测试类
package com.entor.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller//作用,该类用在请求处理类
@RequestMapping("hi")//处理请求地址/hello的请求
public class TestController {
/**
* @RequestMapping("/test1") 作用;请求地址是/test1的请求,不区分请求方式,如果类上也有注解,请求地址需要先拼接类上注解的地址
* 如果需要表明请求类型,需要加
* //@RequestMapping(value = "/index",method = RequestMethod.POST)
* @GetMapping("/test1") 处理get请求
* @PostMapping("/test1") 处理post请求
* @return
*/
@GetMapping("/test1")
public String test1(){
System.out.println("王老五");
/**
* return 方法视图名称index,方法返回逻辑视图名称index,通过springmvc.xml配置文件中的视图资源解释器,找到对应的视图文件进行渲染展示,默认是通过请求转发到指定的视图文件
* 查找规则:prefix+逻辑视图名称+suffix,此方法对应的视图文件是/index.jsp
*/
return "index";
}
@PostMapping("/test1")
public String test2(){
System.out.println("post请求,王老五");
return "index";
}
}
5,测试请求转发和重定向
package com.entor.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class TestController1 {
@GetMapping("/test1")
public String test1(){
System.out.println("请求转发到页面");
return "test1";//请求转发到页面
}
@GetMapping("/test2")
public String test2(){
System.out.println("重定向到页面");
return "redirect:test2.jsp";//重定向到页面,需要加上.jsp
}
@GetMapping("/test3")
public String test3(){
System.out.println("重定向到test2");
return "redirect:test2";//重定向到test2,需要重新访问
}
@GetMapping("test4")
public String test4(){
System.out.println("请求转发到test1");
return "forward:/test1";//请求转发到/test1,当前页面便可访问
}
}
6,从页面向后台传递参数,传递对象类型的参数需要注意转换Date类型,和中文乱码的问题,需要在全局配置中配置
package com.entor.controller;
import com.entor.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
//传参
@Controller
public class DemoController {
//获取客户端传递过来的参数,在方法参数中直接注入HttpServletRequest,HttpServletResponse对象,跟使用servlet一样方法
//使用servlet相同的方式,http://localhost:8090/test_0923/demo1?id=1&name=法外狂徒
@GetMapping("/demo1")
public String demo1(HttpServletRequest request, HttpServletResponse response){
//获取客户端传递的参数
String id = request.getParameter("id");
String name = request.getParameter("name");
System.out.println("编号"+id+"姓名"+name);
//把值保存到request对象中,请求转发并传递值给客户端
request.setAttribute("id",id);
request.setAttribute("name",name);
return "demo1";
}
//获取客户端传来的参数,直接在方法中注入客户端传入的参数名称即可,用Map方式
@GetMapping("/demo2")
public String demo2(String id, String name, Map<String,Object> map){
System.out.println("编号"+id+"姓名"+name);
//把服务器要传递给客户端的数据封装到map中就行了,在方法中添加map类型的参数,springmvc会自动创建对象注入
map.put("id",id);
map.put("name",name);
return "demo2";
}
//用Model方式
@GetMapping("/demo3")
public String de(String id, String name, Model model){
System.out.println("编号:"+id+",姓名:"+name);
//把服务器要传递给客户端的数据封装到Model对象中,在方法中添加Model类型的参数,springmvc会自动创建对象注入
model.addAttribute("id",id);
model.addAttribute("name",name);
return "demo2";
}
@PostMapping("/add")//post请求方式
public String demo3(String name,String username,String password,int sex,String birthday,Map<String,Object> map){/*不可用data无法转换String没法转换为data*/
System.out.println("姓名"+name+"账号"+username+"密码:"+password+"性别"+sex+"生日"+birthday);
map.put("name",name);//中文乱码,需要在全局配置中配置
map.put("username",username);
map.put("password",password);
map.put("sex",sex);
map.put("birthday",birthday);
return "show";
}
/**
* 客户端传递多个参数,可以封装成对象接收
* @param user
* @param map
* @return
*/
//传入对象参数
@PostMapping("/add1")
public String demo4(User user,Map<String,Object> map){
System.out.println(user);
map.put("user",user);//无法将string转换为data
return "show";
}
//将string转换为data,方法一
/**
* 初始化参数类型绑定
* @param binder
*/
/* @InitBinder
public void initBinder(WebDataBinder binder){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
CustomDateEditor editor = new CustomDateEditor(sdf, true);
//参数类型格式是yyyy-MM-dd当做java.util.Date类型处理
binder.registerCustomEditor(Date.class,editor);
}*/
}