springmvc怎么将session作成成员变量_SpringMVC

1.回顾servelt

     servlet类实现HttpServlet类,重写doGet,doPost方法 (doPost调用doGet方法);

    controller层作用:从前台获取数据,调用service层处理,进行视图跳转;

2.SpringMVC中跳转方式

       跳转有两种:一种forward,一种redirect.

             forward跳转,一次请求,地址栏不变;

             redirect跳转,多次请求,地址栏改变

1. Controller跳转到JSP  forward跳转到页面 : 默认就是forward跳转                      语法 : return "页面逻辑名"  redirect跳转到页面: 使用springmvc提供redirect: 关键字进行重定向页面跳转                  语法 : return "redirect:/index.jsp"                   注意:使用redirect跳转 页面不会经过视图解析器2. Controller跳转到Controller  forward:跳转到Controller : 使用springmvc提供的关键字forward:    语法:forward:/跳转类上@RequestMapping的值/跳转类上方法的@RequestMapping的值  redirect:跳转到Controller:使用springmvc 提供的关键字 redircet:   语法:redirect:/跳转类上@RequestMapping的值/跳转类上方法@RequestMapping的值

原始的servlet跳转

forward:  请求转发  一次请求 跳转之后地址栏不变  request作用域传递数据    request.getRequestDispatcher("/servlet路径").forward(request,response);redirect :请求重定向 客户端跳转 多次请求,请求之后地址栏改变 不能使用  request 传递数据    response.sendRedirect("/项目名/servlet路径");

SpringMVC中参数的接收

springmvc : 使用控制器方法参数(形参),接收客户端请求数据    好处: 1. 完成类型的自动转换  2.定义不定长形式参数列表接收客户端请求数据    springmvc中参数接收细节:    a.接收零散类型数据        后台在控制器方法中声明多个形参,保证接收参数变量名与前台传递参数变量名一致          b.接收对象类型数据       语法:将要接收对象作为控制器方法形参声明即可      前台传递参数形式: 只需要保证前台传递参数名与接收的对象属性名一致,springmvc自动封装对象        c.接收数组或集合类型数据      语法: 将要 接收数组作为控制器方法的参数声明即可      前台语法: 要求前台传递的多个参数变量名都要 与 后台接收数组变量名一致, springmvc自动将多个变量名放入一个数组中          d.springmvc不支持直接接收集合类型  但是允许间接接收  将接收集合类型放入自定义对象中完成参数接收    

SpringMVC解决post方式提交中文乱码问题

<filter>  <filter-name>charsetfilter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>    <init-param>      <param-name>encodingparam-name>        <param-value>UTF-8param-value>    init-param>filter><filter-mapping>  <filter-name>charsetfilter-name>    <url-pattern>/*url-pattern>filter-mapping>

SpringMVC中数据传值机制

85083867bda8ee7bcd531b3eb45c4567.png

/*总结: 使用forward跳转时使用request传递数据     1.获取request对象: HttpServletRequest  直接在当前控制器方法参数中声明 httpServletRequest对象    2.获取response对象:HttpServletResponse  直接在当前控制器方法参数中声明httpServletResponse对象        EL 表达式 :  ${requestScope.name}      引入JSTL : "${requestScope.users}" var=        ${user.id}---${user.name} ----${user.age}----{user.bir} ==="${user.bir}" pattern=                  第二种方式: springmvc对request对象进一步封装 model对象  封装request作用域         使用redirect跳转页面数据传递     1.使用 return "redirect:/index.jsp"+?id=1   字符串拼接传值     2.使用 session 作用域传值    */

SpringMVC配置url-pattern为"/"导致静态资源拦截问题解决方法

/*1. 在springmvc配置文件中加入如下配置         // 解决静态资源拦截问题*/

SpringMVC文件上传

用户将 自己本地计算机中文件上传到当前使用应用的服务器的过程称之问文件上传a.先在系统中 开发文件上传页面b.文件上传页面的form表单提交方式必须 post  enctype必须为umltipart/form-datac.开发对应控制器处理问题上传d.文件上传必须引入 commons-fileupload jar包e.在springmvc使用multipartFile接收文件必须配置文件上传解析器 且 解析器id必须为 multipartResolverf.注意:在springmvc中默认文件上传没有大小限制  可以设置文件大小// FileController@RequestMapping("upload")//在springmvc中使用 multipartFile形式接收文件时必须在springmvc配置文件中配置 文件上传解析器 // 并且文件上传解析器必须存在id,       //id必须为multipartResolverpublic String upload(MultipartFile file) {//需要跟表单的名字一致  System.out.println("文件名:"+ file.getOriginalfilename());  System.out.println("文件类型:"+ file.getContentType();    System.out.println("文件大小:"+ file.getSize();    //处理文件上传    //根据相对upload获取绝对upload路径    String realPath = request.getSession().getServletContext().getRealPath("/upload");                       //文件上传    file.transferTo(new File(realPath,file.getOriginalFilename()));                        return "index";}// springmvc.xmlid=

servlet的文件上传

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("utf-8");        response.setCharacterEncoding("utf-8");        response.setContentType("text/html;charset=UTF-8");      //上传        try {        boolean isMultipart = ServletFileUpload.isMultipartContent(request);        if(isMultipart) {          //判断前台的form是否有mutipart属性          //FileItemFactory factory = new DiskFileItemFactory();   //缓冲区          DiskFileItemFactory factory = new DiskFileItemFactory();          ServletFileUpload upload = new ServletFileUpload(factory);                    //设置上传文件时 用到的临时文件的大小   DiskFileItemFactory()的对象      factory.setSizeThreshold(10240);//设置临时的缓冲文件大小为10KB      factory.setRepository(new File("e:\\BaiduNetdiskDownload\\uploadtemp"));//设置临时文件的目录      //控制上传单个文件的大小  20KB   ServletFileUpload(factory)的对象      upload.setSizeMax(20480);//单位是字节 B          //通过parseRequest解析form中的所有请求字段,并保存到items集合中(即前台传递的 sno sname spicture 此时就保存在了items中)      List items = upload.parseRequest(request);      //遍历 items中的数据(sno sname spicture)      Iterator iterator = items.iterator();  //使用迭代器 遍历      while(iterator.hasNext()) {        FileItem item = iterator.next();        String itemName = item.getFieldName();                int sno = -1;        String sname = null;        //判断前台字段 是普通form表单字段(sno sname) ,还是文件字段              if(item.isFormField()) {          if(itemName.equals("sno")) {//根据name属性判断item是sno sname 还是spicture            sno = Integer.parseInt(item.getString("UTF-8")) ;          }else if(itemName.equals("sname")) {            sname = item.getString("UTF-8");          }else {            System.out.println("其他字段.....");          }        }else{//spicture          //文件上传          //文件名          //getName() 是 获取 文件名          String fileName = item.getName();          String ext = fileName.substring(fileName.indexOf(".")+1);          if(! ext.equals("png") || ext.equals("gif") || ext.equals("jpg")) {            System.out.println("图片类型有误!格式只能是png  gif jpg");            return ;//终止          }          //获取文件内容 并上传          //定义文件路径:指定上传的位置(服务器路径)          //获取服务器路径 E:\BaiduNetdiskDownload\apache-tomcat-9.0.26-windows-x64\apache-tomcat-9.0.26\wtpwebapps\UpAndDown          //String path = request.getSession().getServletContext().getRealPath("upload");          String path = "E:\\BaiduNetdiskDownload\\upload";          File file = new File(path,fileName);            item.write(file); //上传          System.out.println(fileName+"上传成功");          PrintWriter out = response.getWriter();          out.println(fileName+"上传成功");          return;                  }        }      }               }catch (FileUploadBase.SizeLimitExceededException e) {      // TODO: handle exception           System.out.println("上传文件大小大于20KB");     }catch (FileUploadException e) {      // TODO Auto-generated catch block      e.printStackTrace();       } catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();       }          }

SpringMVC对 ajax支持,@RequestBody注解的使用

/*  第一种方式     在控制器中使用原生的 json转换工具 Gson  */  String json = new Gson().toJSON(对象);  response.setContentType("application/json;charset=UTF-8");  response.getWriter().print(json);/*  第二种方式 @ResponseBody     需要引入jackson  或者 Gson   作用:将 当前方法的 返回值自动转为json格式数据并响应前台  */

SpringMVC 拦截器 interceptors

/* 拦截器 类似与 javaWeb中的 filter 不同于 filter  主要是用来对应用中的请求(控制器的方法)做拦截作用  作用 : 将多个控制器中执行共有代码 放入拦截器中执行,从而减少 controller中代码冗余     举例: 比如在做  加入购物车时 先判断 有没有登录 , 下单的时候 判断有没有登录 特点:     a.拦截器只能拦截控制器相关请求,不能拦截 jsp相关的请求     b.拦截器可以直接中断用户请求轨迹     c.请求到达会经过拦截器,请求回来同样会经过拦截器 拦截器的开发:     1.MyIntercetptor implements HandlerInterceptor{           public boolean preHandler(...){}           public void postHandler(...){}           public void afterCompletion(...){}     }     2.配置拦截器       a.注册拦截器         <bean id="myinterceptor1" class="包名下的.MyInterceptor">bean>       b. 配置拦截器的请求                  <mvc:interceptors>       <bean class="com.bjsxt.interceptor.DemoInterceptor">bean>       <mvc:interceptor>           <mvc:mapping path="/demo"/>              <bean class="com.bjsxt.interceptor.DemoInterceptor">bean>       mvc:interceptor>      mvc:interceptors>         */

SpringMVC全局异常处理

/*1.全局异常处理    当项目在运行的过程中出现异常时的处理机制    注意: 全局异常处理 一定是 “抛出来的” 异常        try处理过的不行    好处:当系统出现运行时异常,用户可以 友好的方式看到错误页面 2.自定义全局异常处理类  public class CustomerExceptionResolver implements                    HanderExceptionResolver{        // 实现 resolverException方法                     }     3. 在springmvc.xml中配置全局异常处理类  */   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值