java web开发入门六(spring mvc)基于intellig idea
spring mvc
ssm=spring mvc+spring +mybatis
spring mvc工作流程
1A)客户端发出http请求,只要请求形式符合web.xml文件中配置的*.action的话,就由DispatcherServlet来处理。
1B)DispatcherServlet再将http请求委托给映射器的对象来将http请求交给对应的Action来处理
2)映射器根据客户的http请求,再对比<bean name="/hello.action如果匹配正确,再将http请求交给程序员写的Action
3)执行Action中的业务方法,最终返回一个名叫ModelAndView的对象,其中封装了向视图发送的数据和视图的逻辑名
4)ModelAndView对象随着响应到到DispatcherServlet中了
5)这时DispatcherServlet收到了ModelAndView对象,它也不知道视图逻辑名是何意,又得委托一个名叫视图解析器的对象去具体解析ModelAndView对象中的内容
6)将视图解析器解析后的内容,再次交由DispatcherServlet核心控制器,这时核心控制器再将请求转发到具体的视图页面,取出数据,再显示给用户
XML实现spring mvc
开发步骤:
注意:使用的spring framework版本是:4.2.5
1.引入jar包:
spring核心包
commons-logging-1.1.3.jar
spring-beans-4.2.5.RELEASE.jar
spring-context-4.2.5.RELEASE.jar
spring-core-4.2.5.RELEASE.jar
spring-expression-4.2.5.RELEASE.jar
spring mvc包
spring-web-4.2.5.RELEASE.jar
spring-webmvc-4.2.5.RELEASE.jar
2.xml配置
web.xml配置
配置spring mvc核心控制器
解决提交表单中文乱码
<?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"> <!-- 注册springmvc核心控制器-->
<servlet>
<!--servlet-name的值对应一个文件:/WEB-INF/DispatcherServlet-servlet.xml -->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定application.xml文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping> <!--spring编码过滤器:解决POST提交中文乱码问题-->
<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> </web-app>
springmvc.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/tx/spring-mvc.xsd "> <!-- 1.注册Action(必须配置) -->
<bean name="/hello.action" class="com.eggtwo.action.HelloController"></bean> <!--2.映射器:如果将bean标签的name属性值作为请求URL.此标签可以省略-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!--3.适配器:实现了Controller接口的适配器,默认可省略-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!--4.视图解析器-->
<!--
如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
如果Action中书写的是视图真实名称,那么视图解析器就不能配置
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路径前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 路径后缀 -->
<property name="suffix" value=".jsp"/>
<!-- 前缀+视图逻辑名+后缀=真实路径 -->
</bean>
</beans>
3.编写Action
package com.eggtwo.action; import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.annotation.Annotation; public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "这是我的第二个springmvc应用程序,视图使用逻辑名"); //原来封装视图的真实路径
// modelAndView.setViewName("/WEB-INF/jsp/success.jsp"); String name = request.getParameter("name");//获取表单提交的数据
System.out.println("姓名:"+name); //现在封装视图的逻辑名称
modelAndView.setViewName("success"); return modelAndView;
} }
注解实现spring mvc
解决的问题:
1.一个controller中放置多个action
2.获取get/post请求的参数(action接收的string类型的date参数怎么转成date)
3.限定action只能接收一种请求方式(get/post)
4.解决表单提交的中文乱码
5.在action中获取request/response
6.在action中重定向
7.action返回值类型(返回html、string、json、file等等)
8.在action中获取request
1.引入jar包:
spring核心包
commons-logging-1.1.3.jar
spring-beans-4.2.5.RELEASE.jar
spring-context-4.2.5.RELEASE.jar
spring-core-4.2.5.RELEASE.jar
spring-expression-4.2.5.RELEASE.jar
spring aop包(注解会使用到aop)
aopalliance.jar
aspectjrt.jar
aspectjweaver.jar
spring-aop-4.2.5.RELEASE.jar
spring mvc包
spring-web-4.2.5.RELEASE.jar
spring-webmvc-4.2.5.RELEASE.jar
2.配置XML:
web.xml配置
<?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"> <!-- 注册springmvc核心控制器-->
<servlet>
<!--servlet-name的值对应一个文件:/WEB-INF/DispatcherServlet-servlet.xml -->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定application.xml文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring_annotation.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping> <!--spring编码过滤器:解决POST提交中文乱码问题-->
<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> </web-app>
spring mvc 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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/tx/spring-mvc.xsd ">
<!--让spring ioc去扫描具体包下的所有具有注解@Controller的类-->
<context:component-scan base-package="com.eggtwo.action"></context:component-scan> <!--注解映射器:可省略-->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean> <!--视图解析器-->
<!--
如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
如果Action中书写的是视图真实名称,那么视图解析器就不能配置
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路径前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 路径后缀 -->
<property name="suffix" value=".jsp"/>
<!-- 前缀+视图逻辑名+后缀=真实路径 -->
</bean>
</beans>
3.开发controller 和action:
package com.eggtwo.action; import com.eggtwo.entity.Student;
import com.sun.org.apache.regexp.internal.RE;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.WebRequest; import javax.servlet.http.HttpServletRequest;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* 此控制器是单例模式,构造函数只执行一次
* 注解控制器
*/
@Controller
@RequestMapping(value = "/anno")
public class AnnotationController { public AnnotationController() {
System.out.println("AnnotationController()");
} @RequestMapping(value = "/login.action")
public String login(Model model) {
model.addAttribute("message", "第一个注解实现的spring mvc login");
return "success";//逻辑名称,需要配置视图解析器
//return "/WEB-INF/jsp/success.jsp"; } /**
* 设置请求的url,接收参数的方式,请求的方式(get/post)(默认get/post请求都支持)
*/
@RequestMapping(value = "/register1.action", method = {RequestMethod.POST, RequestMethod.GET})
public String register1(Model model, String name, int age, boolean man) { model.addAttribute("message", "注册成功");
return "success";
// return "/WEB-INF/jsp/success.jsp"; } /**
* 请求url中的.action可以省略
*/
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Model model, Student student) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(student.getBirthday());
model.addAttribute("message", "注册成功");
model.addAttribute("student", student); return "success";
// return "/WEB-INF/jsp/success.jsp"; } /**
* 日期类型转换器
*
* @param binder
*/
@InitBinder
public void initBinder(WebDataBinder binder) {
//设置什么类型的时间格式可以转
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));//true:允许为空, false:不允许为空
}
}
3.1action向view视图(jsp页面传值)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Model model, Student student) {
model.addAttribute("message", "注册成功");
model.addAttribute("student", student);
return "success"; }
3.2指定action加载返回的视图(jsp页面)
指定物理视图名称:
return "/WEB-INF/jsp/success.jsp";
指定逻辑视图名称:
return "success";
逻辑视图需要在spring mvc文件配置视图解析器
<!--视图解析器-->
<!--
如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
如果Action中书写的是视图真实名称,那么视图解析器就不能配置
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路径前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 路径后缀 -->
<property name="suffix" value=".jsp"/>
<!-- 前缀+视图逻辑名+后缀=真实路径 -->
</bean>
4.URL配置:
在controller和请求action上配置
@RequestMapping(value = "/anno")
5.请求方式配置:
@RequestMapping(value = "/register1.action", method = {RequestMethod.POST, RequestMethod.GET})
@RequestMapping(value = "/register", method = RequestMethod.POST)
如果不配置method,默认支持所有请求方式
6.请求参数接收:
1.变量直接接收:方法的变量名要和表单的name值保持一致,多用于get查询请求
@RequestMapping(value = "/register1.action", method = {RequestMethod.POST, RequestMethod.GET})
public String register1(Model model, String name, int age, boolean man) { model.addAttribute("message", "注册成功");
return "success";
// return "/WEB-INF/jsp/success.jsp"; }
2.模型绑定接收:方法的变量名要和表单的name值保持一致,可以设置多个模型,多用于表单提交
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Model model, Student student) {
System.out.println(student.getBirthday());
model.addAttribute("message", "注册成功");
model.addAttribute("student", student); return "success";
// return "/WEB-INF/jsp/success.jsp"; }
3.数组参数接收:批量删除时用于接收ids,批量添加
ids为checkbox的名称
@RequestMapping(value = "/batchDelete.action")
public String register(Model model, Integer[] ids) {
for(int id :ids){
System.out.println(id);
}
return "success"; }
4.接收List<javaBean>集合
7.内部转发和重定向
内部 转发,url不变:可以使用model在多个action中传值,因为model是request域对象
@RequestMapping(value = "/forward.action")
public String forward(Model model) {
return "forward:/anno/login.action";
}
URL重定向,以url后缀的方式进行传值
@RequestMapping(value = "/go.action")
public String go(Model model) {
return "redirect:/anno/login.action?id=3";
}
8.action返回json和字符串
第一步:导入json包
jackson-annotations-2.6.0-xh.jar
jackson-core-2.6.0-xh.jar
jackson-databind-2.6.0-xh.jar
jackson-jr-all-2.4.3-xh.jar
第二步:在action请求方法上使用@ResponseBody注解表示该方法的返回值放在响应体(Response Body)返回给用户
第三步:在springmvc xml文件中配置json解析适配器
<!-- 注册json解析适配器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
第四步:开发action
返回json
@RequestMapping(value = "/getJson.action")
@ResponseBody
public Student getJson() {
Student student = new Student();
student.setName("测试");
student.setMan(true);
student.setBirthday(new Date());
student.setAge(14);
student.setScore(12.254);
return student;
}
返回字符串
@RequestMapping(value = "/getString.action",method = RequestMethod.GET)
@ResponseBody
public String getString() {
return "直接返回字符串";
}
9.在action中获取当前请求的request
在controller中添加如下特性:可以放在baseController
@Autowired
protected HttpServletRequest request; //自动注入request
java web开发入门六(spring mvc)基于intellig idea的更多相关文章
- 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener
[Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- 【Java Web开发学习】Spring MVC 使用HTTP信息转换器
[Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...
- 【Java Web开发学习】Spring MVC文件上传
[Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...
- 【Java Web开发学习】Spring MVC异常统一处理
[Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...
- 【Java Web开发学习】Spring MVC 开始配置
Spring MVC 开始配置 转载:http://www.cnblogs.com/yangchongxing/p/8871370.htm 学习搭建最简单的Spring MVC框架. ======== ...
- 【Java Web开发学习】Spring MVC整合WebSocket通信
Spring MVC整合WebSocket通信 目录 ========================================================================= ...
- day04 Java Web 开发入门
day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...
- 【Java Web开发学习】Spring JPA
[Java Web开发学习]Spring JPA 转载:https://www.cnblogs.com/yangchongxing/p/10082864.html 1.使用容器管理类型的JPA JND ...
随机推荐
- LibLog 类库 分析
前期思考: Microsoft.Logging 是否可用? 是否需要提供默认的 Logger 实现? 不需要.1,用户自己开启日志功能,设置开启属性,即可打印出相应的日志. LibLog 类库分析: ...
- CSS教程详解
CSS学习笔记 一.CSS基础 1.CSS简介 层叠:一层一层的: 样式表:很多的属性和样式 CSS语法: <style> 选择器 { 属性名:属性值; 属性名:属性值; …… } &l ...
- 基于直接缓冲区和非直接缓冲区的javaIO文件操作
基本概念: 1. 非直接缓冲区: 指的是通过jvm来缓存数据的,应用程序要读取本地数据要经历从本地磁盘到物理内存,然后copy到jvm中,然后再通过流的方式读取到应用程序中,写的操作正好与之相反. ...
- Object.defineProperty-vuejs数据响应基石
https://www.jianshu.com/p/07ba2b0c8fca https://juejin.im/post/5b99215d5188255c520cfe22 vuejs数据双向绑定地核 ...
- LinuxShell——内嵌命令
LinuxShell——内嵌命令 摘要:本文主要学习了Shell的常用内嵌命令. alias命令 alias命令可以为指定命令定义一个别名. 基本语法 查看所有别名: alias 设置别名: alia ...
- php 使用fsockopen 发送http请求
需求背景 在公司开发这么一个需求,每天三次定时催付待客服催付状态的订单,设定每天15.16.17点三次执行job任务来给一批订单打电话催付,需要三个时间点都把待客服催付的订单拨打一遍电话,根据数据组统 ...
- 如何使 highchart图表标题文字可选择复制
highchart图表的一个常见问题是不能复制文字 比如官网的某个图表例子,文字不能选择,也无法复制,有时产品会抓狂... 本文给出一个简单的方案,包括一些解决的思路,希望能帮助到有需要的人 初期想了 ...
- python通过连接池连接redis,操作redis队列
在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...
- vlan技术简单了解
VLAN(虚拟局域网)是对连接到的第二层交换机端口的网络用户的逻辑分段,不受网络用户的物理位置限制而根据用户需求进行网络分段.一个VLAN可以在一个交换机或者跨交换机实现.VLAN可以根据网络用户的位 ...
- linux 中断底半部机制对比(任务队列,工作队列,软中断)--由linux RS485引出的血案【转】
转自:http://blog.chinaunix.net/uid-20768928-id-5077401.html 在LINUX RS485的使用过程中,由于各种原因,最后不得不使用中断底半部机制的方 ...