SpringMVC的配置和用法

1、搭建SpringMVC框架步骤:
1)配置部署描述符(web.xml):
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet<!--指定servlet的全名,此是springmvc自带的DispatcherServlet -->
</servlet-class>
<!-- load-on-startup这个参数可选,如果存在则在程序启动时装载servlet并调用init方法,若不存在则第一个请求时加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern><!-- /表示将所有URL映射到此servlet -->
</servlet-mapping>
--------------------------------------------------------------------------------------------------------------------------------------------------
2)配置SpringMVC配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- SpringMVC的配置文件需在WEB-INF目录下,命名方式必须为servletName-servlet.xml
servletName是部署描述符中(web.xml)<servlet-name>springmvc</servlet-name>的名字 -->
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<bean name="/getMsg" class="org.great.action.GetMsgTestAction">
<!-- name为映射路径,如<form action="getMsg">
class为进入此映射路径后所调用的类-->
</bean>
</beans>
--------------------------------------------------------------------------------------------------------------------------------------------------
3)实现Controller接口:
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
GetMsgBean gmb = new GetMsgBean();
gmb.setUserName(req.getParameter("userName"));
gmb.setPwd(req.getParameter("pwd"));
//向前台返回一个页面、模型名称及模型,在前台可以通过EL表达式根据模型名称取得实例中的属性${getMsgBean.userName }
return new ModelAndView("MyJsp.jsp", "getMsgBean", gmb);
}
==================================================================================================================================================
2、注解:
1)依赖注入:
@Autowired:可以处理构造器注入和setter注入(构造器注入首选)(按byType进行注入)
@Resource:只能处理setter注入(setter注入首选)(默认按byName注入,可对type进行设置)
--------------------------------------------------------------------------------------------------------------------------------------------------
2)自动扫描标记:(在类上有次标记,可自动扫描进spring容器中进行定义,无需再次在容器中自定义)
@Component 通用注解
@Named 通用注解
@Repository 持久化层组件注解
@Service 业务层组件注解
@Controller 控制层组件注解
@PostConstruct
public void init(){}//初始化回调方法
@PreDestroy
public void destroy(){}//销毁回调方法
--------------------------------------------------------------------------------------------------------------------------------------------------
3)@Value("#{user.userName}") ""中的值可以是基本类型,也可以是从容器中引用来的ID
--------------------------------------------------------------------------------------------------------------------------------------------------
==================================================================================================================================================
3、集合注入:<util:list />、<util:set />、<util:map/>、<util:properties />
1)可使用注解@Value("#{stuList}")将此list的值赋值给bean中的属性(<util:set />、<util:map/>类似)
<util:list id="stuList">
<value>A</value>
<value>B</value>
</util:list>
--------------------------------------------------------------------------------------------------------------------------------------------------
2)使用util:properties读取文件,之后使用#{user.userName}获得文件中属性值
<util:properties id="user" location="classpath:userText.properties"></util:properties>
==================================================================================================================================================
4、访问静态文件,如jsp、js、css
1)方案一:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
--------------------------------------------------------------------------------------------------------------------------------------------------
2)方案二:使用<mvc:resources/>元素
<mvc:resources mapping="/images/**" location="/images/" />//location指定静态资源的位置
==================================================================================================================================================
5、文件上传:(多文件上传:JSP页面<input type="file" name="file" multiple="multiple"/>)
<!-- 上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

@RequestMapping("/upLoad")
public String upLoad(@RequestParam("file") MultipartFile file[]){
for(MultipartFile mf : file){
String fileName = mf.getName();
String fileContentType = mf.getContentType();
String fileAllName = mf.getOriginalFilename();
if (!mf.isEmpty()){
try {
//使用StreamsAPI方式拷贝文件
Streams.copy(mf.getInputStream(),new FileOutputStream("E:/"+mf.getOriginalFilename()),true);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
PS:
<!-- 文件上传中文乱码,在spring的配置文件中定义以下bean -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8"/>
</beans>
--------------------------------------------------------------------------------------------------------------------------------------------------
***一个关于上传的工具类:
public class FileUploadUtil {
public static final String FILE_PATH = "upload";//要保存的路径
//文件上传
public static String uploadFile(MultipartFile file, HttpServletRequest request) throws IOException {
String fileName = file.getOriginalFilename();
//获得服务器的绝对路径
String path = request.getSession().getServletContext().getRealPath(FILE_PATH);
File tempFile = new File(path, new Date().getTime() + String.valueOf(fileName));
if (!tempFile.getParentFile().exists()) {
tempFile.getParentFile().mkdir();
}
if (!tempFile.exists()) {
tempFile.createNewFile();
}
//保存(MultipartFile类的方法)
file.transferTo(tempFile);
return tempFile.getName();
}
public static File getFile(HttpServletRequest request, String fileName) {
String path = request.getSession().getServletContext().getRealPath(FILE_PATH);
return new File(path, fileName);
}
}
==================================================================================================================================================
6、文件下载:
@RequestMapping("/downLoad")
public ResponseEntity<byte[]> down() {
// 指定文件,必须是绝对路径
File file = new File("D:/新2015培训手册.doc");
// 下载浏览器响应的那个文件名
String dfileName = file.getName();
// 下面开始设置HttpHeaders,使得浏览器响应下载
HttpHeaders headers = new HttpHeaders();
// 设置响应方式
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
byte a[] = null;
try {
// 设置响应文件
headers.setContentDispositionFormData("attachment", new String(dfileName.getBytes("gbk"),"iso-8859-1"));
a = FileUtils.readFileToByteArray(file);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 把文件以二进制形式写回
return new ResponseEntity<byte[]>(a, headers, HttpStatus.CREATED);
}
==================================================================================================================================================
7、
<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:
@Controller 声明Action组件
@Service 声明Service组件 @Service("myMovieLister")
@Repository 声明Dao组件
@Component 泛指组件, 当不好归类时.
@RequestMapping("/menu") 请求映射
@Resource 用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") (可以直接省略get\set方法)
@Autowired 用于注入,(srping提供的) 默认按类型装配
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody(使用ajax必须在action方法上加的注解)
@Scope("prototype") 设定bean的作用域
==================================================================================================================================================
8、
@Controller 控制器(注入服务)
@Service 服务(注入dao)
@Repository dao(实现dao访问)
@Component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
==================================================================================================================================================
9、controller层使用@controller注解
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。通俗来说,被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作。
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。比如下面,跳转到登录页面的路径就是localhost:8080/xxx/hello1/hello

@RequestMapping
@RequestMapping(value="/hello1") 等同 @RequestMapping("/hello1")等同于/hello1

/hello1/hello
@RequestMapping(value="/hello1")
public class HelloController {
@RequestMapping(value="/hello",method=RequestMethod.GET)
public String sayHello(Model model){
model.addAttribute(key, value)//前台使用${key}可以去得到model中的value
==================================================================================================================================================
10、service采用@service注解
@Service("userService")注解是告诉spring,当Spring要创建UserService的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserService的实例时,就可以由Spring创建好的"userService",然后注入给Action。
==================================================================================================================================================
11、dao层使用@repository注解
@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name = "userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。

@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,我们也要清楚,@Autowired是根据类型进行自动装配的。
==================================================================================================================================================
12、mapper层使用@Component注解
==================================================================================================================================================
13、转发与重定向
可以通过redirect/forward:url方式转到另一个Action进行连续的处理。
可以通过redirect:url 防止表单重复提交。
写法如下:
return "forward:/order/add";
return "redirect:/index.jsp";
==================================================================================================================================================
14、AJAX的用法:@ResponseBody//使用此注解可以返回JSON数据
可以在action中实例一个Map对象,然后将前台要的数据存储在这个对象中
直接return map这个对象,前台ajax的回调函数自然可以得到JSON数据
==================================================================================================================================================
15、@RequestParam("role_no"):等同于request.getParameter("role_no")
可以取得前台input中name="role_no"的value值
==================================================================================================================================================
16、在JSP页面中使用SpringMVC标签:
在web.xml中配置:
<jsp-config>
<taglib>
<span style="white-space:pre"></span>
<taglib-uri>/spring</taglib-uri>
<span style="white-space:pre"></span>
<taglib-location>/WEB-INF/spring.tld</taglib-location>
</taglib>
</jsp-config>
在WEB-INF目录中导入:spring-form.tld、spring.tld
==================================================================================================================================================

时间: 2024-10-20 07:13:27

SpringMVC的配置和用法的相关文章

【初学菜鸟作--KVM虚拟机配置及用法】

KVM虚拟机配置及用法 1.主要存放位置: 安装kvm虚拟机默认存放位置  --/var/lib/libvirt/images kvm虚拟机配置文件存放位置  --/etc/libvirt/qemu/ 2.常用管理命令: 管理命令 virsh list --查看已打开虚拟机列表 virsh list --all --查看所有虚拟机列表 virsh version --查看版本号 virsh start yeyue1     --启动虚拟机 virsh create /etc/libvirt/qe

springMVC零配置吐槽

此时此刻,哥哥我不得不大大的吐槽一下.从github上down下来一个spring-mvc的chat演示样例,牛逼作者用的是注解的方式,项目全然零配置.而我眼下用的springMVC框架,还是在xml里面配置,所以,在用这个样例的时候,出现了一些小意外,比方,并不能非常好的与我如今的框架集成.天朝用springMVC框架的实在太少了,准确来说,是总结springMVC框架的大牛实在太少了.只是最后经过百般鼓捣,就在前一分钟,能用了,集成成功了.真尼玛幸福.springMVC零配置吐槽,布布扣,b

springmvc resources 配置

http://www.mkyong.com/spring-mvc/spring-mvc-how-to-include-js-or-css-files-in-a-jsp-page/ 如果<mvc:resources mapping="/resources/**" location="/resources/mytheme/" />注意location是Webroot目录下面的文件夹则<link href="${pageContext.requ

Springmvc中配置Quartz使用,实现任务实时调度。

菜鸡的自我修炼,第一次接触quartz,做个记录.-------jstarseven 最近在项目中,第一次在springmvc中配置实用quartz,深刻的感受到quartz带来的方便,顺手做个记录. 简单介绍: Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联.整合了 Quartz 的应用程序可以重用来自不同事件的作业,

springmvc+mybatis配置

环境: Jdk 1.8.0_40 Eclipse 4.4.2 Tomcat 8.0.20 Maven 3.2.5 Mybatis 3.2.8 Spring 4.1.5 主要步骤:(以下能够正常运行) 1. 新建工程 Maven Project -> New Maven Project 保持默认,直接下一步 -> 选择org.apache.maven.archetypes,点击下一步 -> 输入Group id 和Artifact id,完成 2. 配置pom.xml <projec

springMVC+Hibernate配置

本文描述下 sypro 项目中使用 springMVC+Hibernate配置,初学SpringMVC做下简单整理解. 1.web项目首先我们要使用 web.xml文件将 spring配置引入进来 Xml代码   <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee&q

SpringMVC常用配置(二),最简洁的配置实现文件上传

Spring.SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章: 1.Spring基础配置 2.Spring常用配置 3.Spring常用配置(二) 4.SpringMVC基础配置(通过注解配置,非xml配置) 5.SpringMVC常用配置 OK ,那么这里我想说另外一个话题,那就是文件上传,我之前在做Android开发的时候,文件上传我们一般会有两种策略,一种是通过IO流上传,还有一种是通过表单上传,其实这两种在客户端实现起来都是很简单的,在服

springmvc框架配置

web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee&quo

SpringMVC基础配置及应用

一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servlet>     <servlet-name>