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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM