SSM入门之路(4):HttpSession和上传图片

一、HttpSession


什么是HttpSession?

定义: Session代表服务器与浏览器的一次会话过程,每个session有一个唯一ID。在Java中,session指的是javax.servlet.http.HttpSession类的对象

这个对象位于服务器中,在JSP文件编译时自动生成,这意味着我们可以在程序中直接使用session对象,而不必显示声明。当发生session超时(客户端长时间不用这个session提出请求)/用户程序调用HttpSession.invalidate()/服务器停止服务时session对象被删除。
以上内容参考自:http://blog.51cto.com/lavasoft/275589

HttpSession中包含session id、session context等通信内容,用户也可以用setAttribute()方法将其他对象与session绑定。Session具有持久性,可以用来记录非一次性变量。
接口具体内容可参考:HttpSession接口文档


HttpSession的使用

目标:实现访问网页主页面(/hello)时显示页面访问次数(session count)。每访问一次/hello,次数+1;并利用客户端重定向设置一个/clear路径,访问/clear时重置主页面session count。
步骤:
1.  建立Dynamic Web Project项目,命名为springmvc。

2.  导入需要的jar文件。
项目建立方法与所用到的jar文件与SSM入门之路(3):使用SpringMVC相同。

3.  项目文件目录。(包括下文实现“上传图片”功能的文件)
SSM入门之路(4):HttpSession和上传图片_第1张图片

4.  各文件内容


  • web.xml:配置DispatherServlet

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    
    <servlet-mapping>
        <servlet-name>defaultservlet-name>
        <url-pattern>*.jpgurl-pattern>
    servlet-mapping>
    
    
    <servlet>
        <servlet-name>springmvcservlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        servlet-class>
        <load-on-startup>1load-on-startup>
    servlet>
    <servlet-mapping>
        <servlet-name>springmvcservlet-name>
        <url-pattern>/url-pattern>
    servlet-mapping>
web-app>

  • springmvc-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context        
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    
    <context:component-scan base-package="controller" />
    <context:component-scan base-package="pojo"/>
    <bean id="irViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        
        <property name="prefix" value="/WEB-INF/page/" />
        <property name="suffix" value=".jsp" />
    bean>
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
beans>
  • hello.jsp:view视图
<%@ page language="java" pageEncoding="UTF-8"%>

<html>
    <head>
        <title>hello springMVCtitle>
    head>
    <body>
        
        <h2>你好,${name}h2>
        <br>
        这是你今天第 ${count} 次访问这个网站。
    body>
html>

  • helloController.java:控制器
package controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

// 这是一个Controler
@Controller 
public class HelloController {

    @RequestMapping("/hello")  //访问路径:/hello
    public ModelAndView handleRequest(
            HttpServletRequest request, 
            HttpServletResponse response,
            HttpSession session) throws Exception{
        //获取session count值,每访问hello页面一次,count值加1
        Integer i = (Integer) session.getAttribute("count");
        if(i == null)
            i = 0;
        i++;
        session.setAttribute("count", i);
        ModelAndView mav = new ModelAndView("hello");
        mav.addObject("name", "N_LOG_N");
        return mav;
    }

    @RequestMapping("/index") //访问路径:/index
    public ModelAndView jump() {
        //访问/index重定向到/hello,实际显示hello.jsp页面
        ModelAndView mav = new ModelAndView("redirect:/hello");
        return mav;
    }

    @RequestMapping("/clear") 
    public ModelAndView clear(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws Exception {
        //置0 session count值
        session.setAttribute("count", 0);
        ModelAndView mav = new ModelAndView("hello");
        //返回hello界面
        mav = handleRequest(request, response, session);
        return mav;
    }
}

5.  将程序部署到Tomcat服务器上
右键springmvc文件夹 → Run As → Run On Server 。

6.  运行效果
- 访问/hello页面的效果
SSM入门之路(4):HttpSession和上传图片_第2张图片
- 多次访问/hello页面,session count持续增加
SSM入门之路(4):HttpSession和上传图片_第3张图片
- 使用/index地址,重定向到/hello界面
输入http://localhost:8080/springmvc/index查看效果。
- 访问/clear页面,重置session
SSM入门之路(4):HttpSession和上传图片_第4张图片


二、实现上传图片

目标:在/upload界面上传一张图片,保存到服务器端,并在点击上传按钮后在同一页面显示出来。
细节:由于用户可能会上传同名文件,在保存图片时随机生成新名字。

步骤:
1.  按上文文件目录所示,在恰当位置建立upload.jsp、uploadImageFile.java和uploadController.java 文件。

2.  各文件内容。


  • uploadImageFile.java
package pojo;

import org.springframework.web.multipart.MultipartFile;

public class UploadImageFile {
    private MultipartFile image;

    public MultipartFile getImage() {
        return image;
    }
    public void setImage(MultipartFile image) {
        this.image = image;
    }
}

  • upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%>

<h2>上传图片h2>

<form action="uploadImage" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td>选择图片:td>
            
            <td><input type="file" name="image" accept="image/*"/>td>
            <td ><input type="submit" value="上传" />
        tr>
    table>
form>


<img src="image/${imageName}" height="400" width="500" style="${style}"/>
<h4 style="${style}">随机生成的图片名:${imageName}h4>
  • uploadController.java
package controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.xwork.RandomStringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pojo.UploadImageFile;

@Controller
public class UploadController {

    @RequestMapping("/upload")
    public ModelAndView upload() {
        String display = "display:none";
        ModelAndView mav = new ModelAndView("upload");
        //向视图页面upload.jsp传递style对象,使
元素不可见 mav.addObject("style", display); return mav; } @RequestMapping("/uploadImage") public ModelAndView uploadImage(HttpServletRequest request, UploadImageFile file) throws IllegalStateException, IOException{ //为文件生成随机名,避免用户上传同名文件 String name = RandomStringUtils.randomAlphanumeric(10); String newFileName = name + ".jpg"; //在/image目录下创建newFileMame文件 File newFile = new File(request.getServletContext().getRealPath("/image"), newFileName); //在服务器端创建目标文件所在目录 newFile.getParentFile().mkdirs(); //生成上传文件的副本 file.getImage().transferTo(newFile); String display = "display:block"; ModelAndView mav = new ModelAndView("upload"); //向视图页面upload.jsp传递imageName和style两个对象 mav.addObject("imageName",newFileName); mav.addObject("style", display); return mav; } }

3.  运行结果
- 图片上传界面
SSM入门之路(4):HttpSession和上传图片_第5张图片
- 点击上传按钮,显示图片
SSM入门之路(4):HttpSession和上传图片_第6张图片


文章内容参考自:http://how2j.cn/k/springmvc/springmvc-upload/621.html?p=52209
为记录学习过程所需,侵删。

你可能感兴趣的:(SSM入门之路(4):HttpSession和上传图片)