1.SpringMVC入门:表现层框架,spring的一部分
2.Spring处理流程:
Controller代码:
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; } }
@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"; }