目录
项目概述
这是一个基于SpringMVC的Web应用示例,展示了如何配置SpringMVC环境、创建控制器以及处理不同类型的请求和响应。项目包含了以下核心功能:
- 基本页面跳转
- 请求参数处理
- JSON数据返回
- 请求转发与重定向
核心配置文件解析
web.xml配置
<web-app>
<!-- 字符编码过滤器 -->
<filter>
<filter-name>encodingFilter</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>
<!-- 前端控制器配置 -->
<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>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
关键点:
- 配置了字符编码过滤器,统一处理请求和响应的编码为UTF-8
- 配置了SpringMVC的前端控制器DispatcherServlet
- 指定了SpringMVC配置文件的位置(classpath:springmvc.xml)
springmvc.xml配置
<beans>
<!-- 组件扫描 -->
<context:component-scan base-package="com.qcby"/>
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!-- 视图解析器配置 -->
<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
</bean>
<!-- JSON视图支持 -->
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
</beans>
关键点:
- 配置了组件扫描,自动注册带有@Controller注解的类
- 启用注解驱动,简化配置
- 配置了Thymeleaf视图解析器
- 添加了JSON视图支持
控制器详解
基本控制器示例
@Controller
public class HelloController {
@RequestMapping("/toIndex")
public String toIndex(){
return "index"; // 返回视图名称
}
}
请求处理方式
获取请求参数
@RequestMapping(value = "/save", method = RequestMethod.GET)
public void save(HttpServletRequest request, HttpServletResponse response){
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println("name="+name+" password="+password);
}
返回JSON数据
@RequestMapping(value = "/save1", method = RequestMethod.GET)
public void save1(HttpServletRequest request, HttpServletResponse response) throws IOException {
String name = request.getParameter("name");
String password = request.getParameter("password");
String json = "{\"name\":\""+name+"\",\"password\":\""+password+"\"}";
response.setContentType("application/json;charset=utf-8");
response.getWriter().append(json);
}
请求转发
@RequestMapping(value = "/save2", method = RequestMethod.GET)
public void save2(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
request.getRequestDispatcher("/suc").forward(request,response);
}
重定向
@RequestMapping(value = "/save3", method = RequestMethod.GET)
public void save3(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.sendRedirect("html/suc.html");
}
视图解析与页面跳转
项目配置了Thymeleaf视图解析器,默认查找/html/目录下的.html文件:
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/html/" />
<property name="suffix" value=".html" />
</bean>
控制器返回视图名称时,会自动拼接前缀和后缀:
@RequestMapping("/suc")
public String suc(){
return "suc"; // 实际查找 /html/suc.html
}
项目结构说明
关键知识点总结
- @Controller注解:标识一个类作为SpringMVC的控制器
- @RequestMapping注解:映射URL到控制器方法
- 请求处理方式:
- 通过HttpServletRequest获取参数
- 直接返回视图名称
- 手动处理JSON响应
- 请求妆发与重定向:
- 转发:request.getRequestDispatcher().forward()
- 重定向:response.sendRedirect()
- 视图解析:通过配置视图解析器简化试图定位