目录
1.HelloWorld Demo
- 添加Maven依赖
- web.xml配置
- dispatcherServlet-servlet.xml配置
- 编写控制器
- 编写index.jsp 和 success.jsp文件
- 配置Tomcat
- 运行
添加依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
web.xml配置:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<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:dispatcherServlet-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
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"
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-4.3.xsd">
<context:component-scan base-package="com.mmb.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
编写POJO作为控制器:
package com.mmb.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@RequestMapping(value = "hello")
private String hello(){
System.out.println("打尖儿还是住店?");
return "success";
}
}
编写index.jsp 和 success.jsp文件:
<html>
<body>
<h2>Hello World!</h2>
<a href="hello">click to test</a>
</body>
</html>
<html>
<head>
<title>武林外传</title>
</head>
<body>
<p>欢迎来到同福客栈!</p>
</body>
</html>
配置 tomcat
运行效果:
点击链接跳转到success.jsp文件;
2. 注解
2.1 @Controller
2.2 @RequestingMApping 和 @PathVariable
注解在类上面,表示该类中的方法对应的映射都位于该目录下
method:设置不同的请求方法(增删改查常用),有时需要设置过滤器;
- delete
- add
- get
- update
params:设置请求中应该符合的参数条件
- 必须存在某属性
- 某属性值存在且必须为"xxxxx"
@Controller
public class MyController {
@RequestMapping(value = "hello",params = {"username"})
private String hello(String name){
System.out.println("你好,世界");
System.out.println("My name is "+ name);
return "success";
}
}
若请求连接中没有username属性:
请求中需要存在username参数
<a href="hello?username=祝无双">click to test</a>
也可以设置多个条件:
@RequestMapping(value = "hello",params = {"username","sex=0"})
@PathVariable 占位符
通过@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中
<a href="hello2/test">click to test</a>
@RequestMapping(value = "hello2/{username}")
private String hello2(@PathVariable(value = "username")String name){
System.out.println(name);
return "success";
}
请求路径占位符
*
任意一层目录?
任意一个字符**
任意多层目录
2.3 @RequestParam
@RequestMapping(value = "hello3")
private String hello3(@RequestParam(name = "name", required = true, defaultValue = "莫小贝")String name){
System.out.println(name);
return "success";
}
<a href="hello3">click to test</a>
<a href="hello3?name=燕小六">click to test2</a>
默认required
参数值为true
;
还可以利用defaultValue
设置默认值,设置默认值后,required为false
3. ModelAndView
将方法的返回值由String转换为ModelAndView
@RequestMapping(value = "hello4")
private ModelAndView hello4(){
System.out.println("燕小六");
ModelAndView mv = new ModelAndView();
mv.setViewName("success");
return mv;
}
可以添加数据,动态响应到页面中
@RequestMapping(value = "hello4")
private ModelAndView hello4(){
System.out.println("燕小六");
ModelAndView mv = new ModelAndView();
mv.addObject("msg","举杯幸会有缘人");
mv.setViewName("success");
return mv;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<html>
<head>
<meta charset="UTF-8">
<title>武林外传</title>
</head>
<body>
<p>欢迎来到同福客栈!</p>
<p>${msg}</p>
</body>
</html>
还可以对HttpServletRequest request, HttpServletResponse response进行配置
@RequestMapping(value = "hello5")
private ModelAndView hello5(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
mv.addObject("msg","举杯幸会有缘人");
mv.setViewName("success");
return mv;
}
ERRORS
解决中文乱码
-
配置filter
<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> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
URL中的中文乱码(Tomcat中配置文件server.xml)
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="utf-8" connectionTimeout="20000" redirectPort="8443" />
-
页面头部添加代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
ModelAndView中的数据取不出来
- 修改web.xml中的头部
<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">
路径跳转问题
- 跳转路径问题(跳转点击链接后,项目名称丢失):将
action
或href
后边的路径去掉/
,否则会默认/
后边的名称为项目名称; - 作用域放值的时候,EL表达式原样输出,这是因为EL表达式需要在Servlet 2.4/JSP 2.0这个版本才能起作用,需要在页面的属性中设为
isELIgnored="false"
;
https://blog.csdn.net/baidu_37107022/article/details/75578394路径跳转解析