首先视图解析器就是在访问完mapper之后,return一个字符串,这个字符串可以被视图解析器识别,从而返回相应的jsp界面,这个请求转发会带有当前控制层的方法指令,比如没收到值就话就会报空指针的错误。
1.在springmvc-servlet.xml下添加bean
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
2.一般视图解析器都是转发不带请求参数的指令,如果带有请求参数的话,可能会报空指针错误。
<body>
<a href="/pro/success"></a>
</body>
3.调用控制层方式时,通过注解访问当方法,并且返回到jsp界面。
@Controller
@RequestMapping("/pro")
public class ProductController {
@RequestMapping("/success")
public String success(){
return "b";
}
}
4.成功
二.重定向
如果是带有请求参数的指令,需要跳转到界面的话,就需要用到重定向操作,否则会报空指针的错误,比如我今天写的添加商品操作,本质上就是一个from表单的提交,这是一个带有参数的请求,所以最后跳转的时候需要用到重定向。
@Controller
@RequestMapping("/pro")
public class ProductController {
@RequestMapping("/addOnePro")
public String addOnePro(HttpServletRequest request, MultipartFile file1) throws IOException{
Product product=new Product();
String pro_name = request.getParameter("pro_name");
String pro_author = request.getParameter("pro_author");
String pro_price = request.getParameter("pro_price");
String pro_num = request.getParameter("pro_num");
String pro_pnum = request.getParameter("pro_pnum");
String pro_new = request.getParameter("pro_new");
String pro_intro = request.getParameter("pro_intro");
String path = request.getServletContext().getRealPath("/")+"img\\" + file1.getOriginalFilename();
file1.transferTo(new File(path));
product.setPro_img("img\\" + file1.getOriginalFilename());
product.setPro_author(pro_author);
product.setPro_intro(pro_intro);
product.setPro_name(pro_name);
product.setPro_new(pro_new);
int num=Integer.parseInt(pro_num);
int pnum=Integer.parseInt(pro_pnum);
int price=Integer.parseInt(pro_price);
product.setPro_num(num);
product.setPro_pnum(pnum);
product.setPro_price(price);
ps.addOnePro(product);
return "redirect:../product-list.jsp";
}
}