zoukankan      html  css  js  c++  java
  • springmvc学习笔记 及 java读取src目录文件

    这周除了日常工作外主要是学习了SpringMvc,包括基于配置文件跟注解两种方式,因为是刚接触,所以研究的不是很深刻,下面简要介绍一下(首先要加载jar包,除了spring的jar包外,还有三个jar包:commons-logging-1.1.1.jar,jstl-1.2.jar,standard-1.1.2.jar):

    • 基于配置文件方式:

    1、基于配置文件的我主要是做了一个最基础的HelloWorld Demo,为了使用springmvc,首先要对配置文件进行配置,首先是web.xml,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>SMVCAnnotationCURD</display-name>
    <servlet>
    <servlet-name>smvc</servlet-name>

    <!--所有请求交由DispatcherServlet处理-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>smvc</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--设置编码为utf-8-->
    <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>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

    2、下面是spring配置文件,默认为servlet名字-servlet.xml文件名,目录与wenb.xml在同一目录下,也可以通过<init-param></init-param>节点进行配置,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <!-- spring配置文件:配置HandlerMapping、HandlerAdapter -->
    <beans>
    <!-- HandlerMapping -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!-- HandlerAdapter -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!-- ViewResolver,构造返回路径,比如服务器返回结果为hello,则返回结果页面为/WEB-INF/jsp/hello.jsp -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 处理器 -->
    <bean name="/hello" class="com.nova.web.controller.HelloWorldController"/>
    </beans>

    3、定义处理器,内容如下:

    public class HelloWorldController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest req,
    HttpServletResponse resp) throws Exception {
    //1、收集参数、验证参数
    //2、绑定参数到命令对象
    //3、将命令对象传入业务对象进行业务处理
    //4、选择下一个页面
    UserDao userDao = new UserDao();
    List<User> uList = userDao.getUserList();
    ModelAndView mv = new ModelAndView();
    //添加模型数据 可以是任意的POJO对象
    mv.addObject("users", uList);
    //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
    mv.setViewName("hello");
    return mv;
    }}

    4、jsp页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Spring MVC demo:Hello World</title>
    </head>
    <body>
    <table border="1">
    <c:forEach items="${users}" var="user">
    <tr>
    <td><c:out value="${user.userName}"/></td>
    <td><c:out value="${user.password}"/></td>
    <td><c:out value="${user.address}"/></td>
    <td><c:out value="${user.age}"/></td>
    </tr>
    </c:forEach>
    </table>
    </body>
    </html>

    • 基于注解方式:springmvc提供的注解方式大大提高了变成效率,简要介绍如下:

    1、web.xml文件不变

    2、spring配置文件:因为要使用注解,所以要加上注解部分,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" >
    <!-- 控制器所在的包{添加注解的Controller} -->
    <context:component-scan base-package="com.nova.web.controller" />
    <mvc:annotation-driven/>
    <!-- ViewResolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean>
    </beans>

    3、控制器部分:

    package com.nova.web.controller;

    import java.util.List;

    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;

    import com.nova.web.dao.impl.UserDaoImpl;
    import com.nova.web.sdo.User;

    @Controller
    @RequestMapping("/user")
    public class UserController{
    /**
    * 获取所有用户信息
    * @return
    */
    @RequestMapping("getAll")
    public ModelAndView getAllUser(){
    UserDaoImpl userDao = new UserDaoImpl();
    List<User> uList = userDao.getAllUser();
    ModelAndView mv = new ModelAndView();
    mv.addObject("users", uList);
    mv.setViewName("userList");
    return mv;
    }

    /**
    * 跳转到添加用户界面
    * @return
    */
    @RequestMapping(value="/showAddUser",method=RequestMethod.GET)
    public String showAddUser(Model model) {
    model.addAttribute(new User());
    return "addUser";
    }
    /**
    * 添加用户
    * @param req
    * @param resp
    * @return
    * @throws Exception
    */
    @RequestMapping(value="/createUser",method=RequestMethod.POST)
    public String createUserGet(User user) {
    System.err.println("user name:" + user.getUserName());
    UserDaoImpl userDao = new UserDaoImpl();
    userDao.createUser(user);
    return "redirect:/user/getAll";
    }

    /**
    * 修改用户
    * @param req
    * @param resp
    * @return
    * @throws Exception
    */
    @RequestMapping(value="/updateUser",method=RequestMethod.POST)
    public String updateUserGet(User user,Model model) {
    UserDaoImpl userDao = new UserDaoImpl();
    int flag = userDao.updateUser(user);
    if(flag == 0){
    model.addAttribute("message", "修改失败!");
    return "redirect:/user/"+user.getUserId()+"/update";
    }else{
    return "redirect:/user/getAll";
    }
    }

    /**
    * 编辑用户信息
    * @see 访问该方法的路径就应该是"/user/用户编号/update"
    */
    @RequestMapping(value="/{userId}/update", method=RequestMethod.GET)
    public ModelAndView updateUser(@PathVariable String userId){
    UserDaoImpl userDao = new UserDaoImpl();
    User user = userDao.findUserById(userId);
    ModelAndView mv = new ModelAndView();
    mv.addObject("user", user);
    mv.setViewName("showEditUser");
    return mv;
    }

    /**
    * 删除用户信息
    * @see 访问该方法的路径就应该是"/user/用户编号/delete"
    */
    @RequestMapping(value="/{userId}/delete", method=RequestMethod.GET)
    public String delUser(@PathVariable String userId){
    UserDaoImpl userDao = new UserDaoImpl();
    userDao.deleteUser(userId);
    return "redirect:/user/getAll";
    }
    }

    • springmvc拦截器:

    拦截器最主要一个功能就是权限的拦截,比如用户没有通过登陆界面直接访问是不允许也是不安全的,这个时候可以通过springmvc提供的拦截器来进行拦截,如下简介:

    1、web.xml文件不变

    2、spring配置文件添加拦截器进行拦截,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" >
    <!-- 控制器所在的包{添加注解的Controller} -->
    <context:component-scan base-package="com.nova.web.controller" />
    <mvc:annotation-driven/>
    <!-- 拦截器 -->
    <mvc:interceptors>
    <mvc:interceptor>

    <!--拦截所有以/user/开头的请求-->
    <mvc:mapping path="/user/**"/>
    <bean class="com.nova.web.interceptor.UserInterceptor"></bean>
    </mvc:interceptor>
    </mvc:interceptors>
    <!-- ViewResolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean>
    </beans>

    3、编写拦截器:

    package com.nova.web.interceptor;

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

    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;

    import com.nova.web.sdo.User;

    public class UserInterceptor implements HandlerInterceptor {

    /**
    * 该方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进 行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
    */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
    Object obj) throws Exception {
    System.out.println("拦截器开启。。。。");
    System.out.println("请求地址:" + request.getServletPath());
    if(request.getServletPath().startsWith("/user/login")||request.getServletPath().startsWith("/user/checkLogin")){
    return true;
    }else{
    User user = (User)request.getSession().getAttribute("user");
    if(null==user){
    System.err.println("请先登录。。。");
    response.sendRedirect(request.getContextPath()+"/user/login");
    return false;
    }else{
    System.err.println("用户" + user.getUserName() + "登录成功");
    return true;
    }
    }
    }

    /**
    * 该方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回请求前被调用,在该方法中对用户请求request进行处理。
    */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
    Object obj, ModelAndView mv) throws Exception {
    System.out.println("拦截器工作。。。。");
    // mv.addObject(new User());
    // mv.setViewName("login");
    }

    /**
    * 该方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
    */
    @Override
    public void afterCompletion(HttpServletRequest arg0,
    HttpServletResponse arg1, Object arg2, Exception arg3)
    throws Exception {
    System.out.println("拦截器结束。。。。");
    }

    }

    • java读取src目录下文件:

    public static String readEmailTemplate(){
    String path = EmailUtils.class.getResource("/EmailTemplate.txt").getPath();
    File file = new File(path);
    String source = null;
    try {
    source = FileUtils.readFileToString(file, "UTF-8");
    } catch (IOException e) {
    e.printStackTrace();
    }
    return source;
    }
    public static void main(String[] args) {
    String msg = readEmailTemplate();
    System.err.println(msg.replaceAll("#dataId", "1234567890"));
    }

  • 相关阅读:
    logdump命令使用
    centos 添加用户并赋予sudo权限
    ogg进程解析
    xxl-job-executor2.2.0添加为默认执行器(docker方式)
    mysql设置数据库默认编码和表名不区分大小写
    linux-curl工具使用
    docker通过dockerfile打java项目镜像
    通过shell检查服务并发送mail告警(shell监控脚本)
    esxi6.5安装教程
    Vmware Vcenter6.5 配置集群和主机
  • 原文地址:https://www.cnblogs.com/zhli/p/2950858.html
Copyright © 2011-2022 走看看