SpringMVC快速入门记录(一)

1.SpringMVC入门:表现层框架,spring的一部分


2.Spring处理流程:

3.要在web.xml里写好相关配置

    <!--配置DispatcherServlet-->
    <servlet>
        <servlet-name>shuoshuo-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--
            配置SpringMVC 需要配置的文件
            spring-dao.xml,spring-service.xml,spring-web.xml
            Mybites -> spring -> springMvc
        -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-*.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>shuoshuo-dispatcher</servlet-name>
        <!--默认匹配所有请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 这个是配置编码问题,以防中文出现问题-->
    <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>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


4.在web包里创建XXXController类,如下:

@Controller
@RequestMapping("/shuoshuo")
public class ShuoshuoController {

    @Autowired
    private ShuoshuoService shuoshuoService;

    @RequestMapping(value = "/list" ,method= RequestMethod.GET)
    public String list(Model model)
    {
        List<Shuoshuo> shuoshuoList = shuoshuoService.queryAllShuoshuo();
        model.addAttribute("list",shuoshuoList);
        return "list";
    }

    @RequestMapping(value = "/postShuoshuo" ,method= RequestMethod.POST)
    public ModelAndView postShuoshuo(String name,String text)
    {
        System.out.println(text);

        shuoshuoService.insertShuoShuo(name,text);

        List<Shuoshuo> shuoshuoList = shuoshuoService.queryAllShuoshuo();

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("redirect:list");
        modelAndView.addObject("list",shuoshuoList);
        return modelAndView;
    }

}

5.如上,类上打上@Controller 。@RequestMapping("/shuoshuo")表示访问路径,这个类下的访问路径都是加shuoshuo


6.方法上的@RequestMapping("/list"),那么此时路径应该是localhost:8080/项目名/shuoshuo/list访问到这个方法


7.springmvc里数据和jsp页面是用Model和View搞定的


model.addAttribute("list",shuoshuoList);//设置数据
modelAndView.setViewName("redirect:list");//设置重定向jsp页面
return "list";//跳转到list.jsp


8.springmvc的方法参数,可以直接在方法参数里写HttpServletRequest,HttpServletResponse,HttpSession,ModelAndView,Model,View(springmvc默认支持的)如下这样:

/**
 * 根据id查询商品,使用Model
 * 
 * @param request
 * @param model
 * @return
 */
@RequestMapping("/itemEdit")
public String queryItemById(HttpServletRequest request, Model model) {
	// 从request中获取请求参数
	String strId = request.getParameter("id");
	Integer id = Integer.valueOf(strId);

	// 根据id查询商品数据
	Item item = this.itemService.queryItemById(id);

	// 把商品数据放在模型中
	model.addAttribute("item", item);

	return "itemEdit";
}

9.第8点讲的是几个默认的方法参数类,还可以绑定简单的数据类型(

整形:Integer、int

字符串:String

单精度:Float、float

双精度:Double、double

布尔型:Boolean、boolean

),如下:

请求url:

http://localhost:8080/xxx.action?id=2&status=false  //表单也和这个同理一样

 

处理器方法:

publicString editItem(Model model,Integer id,Boolean status) //名字一样即可


10.绑定普通VO或复合VO类(常见于表单)

VO代码:

class ContactInfo {
    private String tel;
    private String address;

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

public class User {
    private String firstName;
    private String lastName;
    private ContactInfo contactInfo;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public ContactInfo getContactInfo() {
        return contactInfo;
    }

    public void setContactInfo(ContactInfo contactInfo) {
        this.contactInfo = contactInfo;
    }

}


Controller代码:

@RequestMapping("saysth.do")
public void test(User user) {
    System.out.println(user.getFirstName());
    System.out.println(user.getLastName());
    System.out.println(user.getContactInfo().getTel());
    System.out.println(user.getContactInfo().getAddress());
}

表单代码:

<form action="saysth.do" method="post">
<input name="firstName" value="张" /><br>
<input name="lastName" value="三" /><br>
<input name="contactInfo.tel" value="13809908909" /><br>
<input name="contactInfo.address" value="北京海淀" /><br>
<input type="submit" value="Save" />
</form>


非常简单 ,类里普通数据 只需将对象的属性名和input的name值一一匹配即可

复合类需要使用“复合类名(对象类型的属性).复合类属性名”来命名input的name。


11.自定义参数绑定(比如把JSP页面里的字符串日期转为 日期类,使用Converter接口,略)


12.绑定简单类型。@RequestParam

使用@RequestParam常用于处理简单类型的绑定。


value:参数名字,即入参的请求参数名字,如value=“itemId”表示请求的参数     区中的名字为itemId的参数的值将传入
 
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错
TTP Status 400 -Required Integer parameter 'XXXX' is not present
 
defaultValue:默认值,表示如果请求中没有同名参数时的默认值
 
定义如下:

@RequestMapping("/itemEdit")
public String queryItemById(@RequestParam(value = "itemId", required = true, defaultValue = "1") Integer id,
       ModelMapmodelMap) {
    // 根据id查询商品数据
    Itemitem = this.itemService.queryItemById(id);
    // 把商品数据放在模型中
    modelMap.addAttribute("item", item);
    return "itemEdit";
}


原文地址:https://www.cnblogs.com/chz-blogs/p/9381009.html