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"));
}

原文地址:https://www.cnblogs.com/zhli/p/2950858.html