SpringMVC—注解方式

SpringMVC注解方式


要点:
基于xml文件配置的mvc的缺点:到项目到达一定程序时,就会有很多的配置文件,造成项目维护起来比较麻烦,优点:低侵入式,降低了耦合。


注解:
@Controller:将一个类标记为控制器


@RequestMapping:可以修饰两种类型,修饰方法时表示:将请求映射到对应的方法;修饰类时表示:类的映射路径,相当于定义了一个相对的路径,在地址栏中访问时就要加个修饰了,例如:在类中修饰了一个@RequestMapping("/jsp"),那么在地址栏中就是:http://localhost:SpringMVC07/jsp/toLogin.do。
value属性:只做修饰的时候,可以不用写value,例如:@RequestMapping("/jsp"),这样写和@RequestMapping(value="/jsp")是一样的。
method属性:表示请求的方式,例如:@RequestMapping(value="/toLogin_get" ,method=RequestMethod.GET),表示以GET方式请求,method=RequestMethod.POST表示以POST方式请求。


@PathVariable:restful风格,路径变量,在方法上面定义一个:@RequestMapping("/toUrlLogin/{name} "),然后方法的参数定义为:toUrlLogin(@PathVariable String name),其中name就是路径变量,当访问地址是:http://localhost:8080/SpringMVC07/jsp/toUrlLogin/zhangsan.do,会将zhangsan取出来放在name变量中,还可以支持多个变量:@RequestMapping("/toUrlLogin/{name} /{age}/{sex}");注:java编译分为两种,dubug、release,如果是选择release编译,将原来:toUrlLogin(@PathVariable String name),写成toUrlLogin(@PathVariable("name") String name)。


@RequestParam:request参数,例如:@RequestParam String password,使用注解方式避免了使用request.getParameter("password")方式来取,参数的类型根据属性编辑器开决定。


@CookieValue:从请求中获得CoolieValue。


@RequestHeader:从请求中获得请求头部的信息。


@InitBinder:数据绑定,将一个方法设置成数据绑定方法;例如:public void initBinder(WebRequestDataBinder binder)。


方法的参数:参数可以是0到多个
HttpServletRequest、HttpServletResponse、HttpSession、@PathVariable、@RequestParam、任意对象。


方法的返回值类型:
void、String、ModelAndView、Model、Map、任意对象类型。(Model类型其实就是对Map类型的封装)


操作:
1.新建一个名为 :SpringMVC07 的项目,并把配置spring mvc需要的Jar都加到WEB-INF/lib目录下。


2.在项目中建两个源包,src/java , src/config ,源包在编译之后,都会跑到Tomcat相应的应用目录下的WEB-INF/classes目录下。


3.在config源包中建一个spring包,并在spring包中建一个servlet.xml,配置servlet.xml,如果要使用基于注解的spring mvc ,则在配置文件中必须加入一个 context 与 mvc 的命名空间,分别为: xmlns:context="http://www.springframework.org/schema/context"   
    xmlns:mvc="http://www.springframework.org/schema/mvc"  


4.controller类可以不定义requestMapping,但一个要请求路径的方法,就必须定义requestMapping。

 

web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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">

<!-- 配置DispatcherServlet -->
<servlet>

  <!-- servlet配置 -->
  <servlet-name>commServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  
  <!-- 初始化参数 -->
  <init-param>
    
    <!-- 手动配置配置文件 -->
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/spring/*.xml</param-value>
    
  </init-param>
  
  <!-- 项目启动时加载 -->
  <load-on-startup>1</load-on-startup>

</servlet>

<!-- servlet映射 -->
<servlet-mapping>

  <servlet-name>commServlet</servlet-name>
  <!-- 所有.do结尾的请求都由commServlet管理  -->
  <url-pattern>*.do</url-pattern>

</servlet-mapping>




  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


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:p="http://www.springframework.org/schema/p"     
       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/aop http://www.springframework.org/schema/aop/spring-aop-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"> 

<!-- 主键扫描,配置要扫描的Java类 -->
<context:component-scan base-package="com.cjh.action"/>


    <!-- 定义一个视图解析类,基于ResourceView的解析器 ,此解析器是在url解析器上,加入了对jstl的支持-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    
    </bean>
</beans>


LoginAction类:
package com.cjh.action;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.cjh.model.User;


import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;


@Controller  //标记这个类为控制器
@RequestMapping("/jsp") //类的映射路径
public class LoginAction {


/**
* toLogin映射到toLogin()方法
* @return
*/
@RequestMapping("/toLogin")  //映射到toLogin方法
public String toLogin(){
return "login";
}

/**
* debug编译时写成@PathVariable String name
* @param name
* @return
*/
@RequestMapping("/toUrlLogin/{name}") //name为url模板中取出的路径变量
public String toUrlLogin(@PathVariable String name){ //路径变量
System.out.println(name);
return "login";
}

/**
* release编译的时候@PathVariable("name")要写这样
* @param name
* @return
*/
@RequestMapping("/toUrlLogin2/{name}") //name为url模板中取出的路径变量
public String toUrlLogin2(@PathVariable("name") String name){ //路径变量
System.out.println(name);
return "login";
}

/**
* 以Get方式请求时,并且请求的url是toLogin_get的
* @return
*/
@RequestMapping(value="/toLogin_get" ,method=RequestMethod.GET)//请求为GET方式时
public String toLogin_get(){
System.out.println("RequestMethod.GET");
return "login";
}

/**
* 以POST方式请求时,并且请求的url是toLogin_post的
* @return
*/
@RequestMapping(value="/toLogin_post" , method=RequestMethod.POST)//请求为POST方式时
public String toLogin_post(){
System.out.println("RequestMethod.POST");
return "login";
}

/**
* 将请求中的字符日期转换成Date
* @param date
*/
@RequestMapping(value="/toDate/{d}", method=RequestMethod.GET)
public void toDate(@PathVariable("d") Date date){
System.out.println(date);
}

/**
* 参数可以是很多种
* @param request
* @param response
* @param session
*/
public void toAllArgs(HttpServletRequest request,HttpServletResponse response,
HttpSession session,@PathVariable("name") String name,@RequestParam String password){

}

/**
* 使用@RequestParam获得参数
* @param name
*/
@RequestMapping("/toRequestParam")
public void toRequestParam(@RequestParam String name){
System.out.println(name);
}

/**
* 使用@RequestParam并且是Get方式获得参数
*/
@RequestMapping(value="/toRequestParamGet" , method=RequestMethod.GET)
public void toRequestParamGet(@RequestParam String name,@RequestParam String password){
System.out.println(name);
System.out.println(password);
}

/**
* 参数是一个Map的
* @param model
* @return
*/
@RequestMapping("toMap")
public String toMap(Map model){
model.put("a", "b");
return "login";
}

/**
* 将表单数据封装成实体对象传入
* @param user
* @return
*/
@RequestMapping("/toUser")
public String toUser(User user){
return "login";
}

/**
* 数据绑定
* @param binder
*/
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
//registerCustomEditor方法的第一个参数为要转换类型的class,第二个参数为属性编辑器
//CustomDateEditor属性编辑器类的构造方法的第一个参数为格式,第二个参数为是否可以为空
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}

}







Spring MVC中,可以使用注解方式来实现图片上传功能。首先,需要在Controller类中添加一个处理上传图片的方法,并使用@RequestMapping注解指定该方法的URL路径。例如,可以使用@RequestMapping("/uploadImage")来指定上传图片的URL路径。在该方法中,可以使用HttpServletRequest对象获取上传的图片文件,并使用自定义的类(例如UploadedImageFile)来封装上传的图片文件。同时,该方法需要抛出IllegalStateException和IOException异常,以处理可能出现的异常情况。具体的代码示例如下: ```java @RequestMapping("/uploadImage") public ModelAndView upload(HttpServletRequest request, UploadedImageFile file) throws IllegalStateException, IOException { // 处理上传图片的逻辑 // 采用随机数来命名图片,防止上传文件名相同的文件会覆盖原文件 // ... return new ModelAndView("uploadSuccess"); } ``` 另外,需要在Spring MVC的配置文件中配置MultipartResolver,以支持文件上传功能。Spring MVC提供了一个即插即用的MultipartResolver实现类:CommonsMultipartResolver,它使用了Jakarta Commons FileUpload技术来实现文件上传功能。默认情况下,Spring MVC上下文中没有配置MultipartResolver,因此需要手动配置MultipartResolver。可以在Spring MVC的配置文件中添加如下配置: ```xml <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 配置文件上传的最大大小 --> <property name="maxUploadSize" value="10485760" /> </bean> ``` 以上就是使用注解方式Spring MVC中实现图片上传的方法。通过配置MultipartResolver和编写处理上传图片的方法,就可以实现图片上传的功能了。 #### 引用[.reference_title] - *1* *2* [SpringMVC注解方式与文件上传](https://blog.csdn.net/weixin_34579167/article/details/114423045)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringMVC基于注解使用:上传和下载](https://blog.csdn.net/weixin_53058174/article/details/127824112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河马开源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值