SpringMVC
# java注解
# servlet 拦截器
新建一个Maven的Web项目:Filter
在pom.xml上添加依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<build>
<finalName>Fileter</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
然后在src/main/java下新建一个包:com.hadoop.Filter
新建一个class:filt.java
package com.hadoop.Fileter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
// 拦截器
public class filt implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub
// 拦截后打印这个
System.out.println("I am happy!");
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
修改web.xml(在src/main/webapp/WEB-INF/web.xml)
添加拦截器
<!-- 配置在web.xml的拦截器,在容器启动的时候一起启动 -->
<filter>
<filter-name>filt</filter-name>
<filter-class>com.hadoop.Fileter.filt</filter-class>
</filter>
<filter-mapping>
<filter-name>filt</filter-name>
// 拦截所有
<url-pattern>/*</url-pattern>
</filter-mapping>
然后运行Tomcat尝试
正常情况下会显示Hello World
但有拦截器的情况下,没有Hello World如下图所示:
若想要页面显示
filt.java
package com.hadoop.Fileter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
// 拦截器
public class filt implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
// 拦截后打印这个
System.out.println("I am happy!");
// 如果有下一个过滤器则跳转到下一个过滤器,否则为目标页面
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
再运行页面的结果,两个都显示:
先经过拦截器,再访问servlet
在src/main/java下新建一个包:com.hadoop.controller
新建一个servlet:myservlet.java
package com.hadoop.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class myservlet
*/
public class myservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public myservlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletContext sc = getServletContext();
String fw = request.getParameter("fw");
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp");
System.out.println("How are you");
rd.forward(request, response);
}
}
myservlet.java写完后web.xml的配置也会随之更新
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 配置在web.xml的拦截器,在容器启动的时候一起启动 -->
<filter>
<filter-name>filt</filter-name>
<filter-class>com.hadoop.Fileter.filt</filter-class>
</filter>
<filter-mapping>
<filter-name>filt</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>myservlet</servlet-name>
<display-name>myservlet</display-name>
<description></description>
<servlet-class>com.hadoop.controller.myservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
其中servlet的配置
<servlet>
<servlet-name>myservlet</servlet-name>
<display-name>myservlet</display-name>
<description></description>
<servlet-class>com.hadoop.controller.myservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
然后再运行Tomcat
http://localhost:8080/Fileter/myservlet
拦截myservlet
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 配置在web.xml的拦截器,在容器启动的时候一起启动 -->
<filter>
<filter-name>filter</filter-name>
<filter-class>com.hadoop.Fileter.filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/myservlet</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>myservlet</servlet-name>
<display-name>myservlet</display-name>
<description></description>
<servlet-class>com.hadoop.controller.myservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
filter.java
package com.hadoop.Fileter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
// 拦截器
public class filter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
// 拦截后打印这个
System.out.println("I am happy!");
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
String request_url = req.getRequestURI();
System.out.println(request_url);
String ctx_path = req.getContextPath();
if(request_url.substring(ctx_path.length()).equals("/index.jsp"))
{
System.out.println("what is your name");
// 如果有下一个过滤器则跳转到下一个过滤器,否则为目标页面
chain.doFilter(request, response);
}
else
{
if(session.getAttribute("model")==null)
{
//非法访问,没有登录,跳转到登录页面
System.out.println("请登录");
session.setAttribute("error", "非法访问");
//保存客户端想去的地址,登陆成功后则直接跳转,而不是到首页
String goURL = req.getServletPath();//获取到地址不包括参数
//判断参数是否为空,不null就获取参数
if(req.getQueryString()!=null)
{
goURL+="?"+req.getQueryString();
}
else
chain.doFilter(request, response);
}
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
SpringMVC程序
第一个注解程序
创建一个maven的web项目:SpringMVC
1、在pom.xml里添加相应的依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.0-alpha1</version>
<scope>test</scope>
</dependency>
<!-- JSP相关 -->
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>SpringMVC</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
2、配置web.xml
配置SpringMVC的入口:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
配置SpringMVC文件
在项目里新建一个文件:springmvc.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket-4.0.xsd">
<context:component-scan base-package="com.hadoop.SpringMVC"></context:component-scan>
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<bean name="/my.do" class="com.hadoop.SpringMVC.myCon"></bean>
<!-- 配置jsp视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="jspViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value=""/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3、在src/main/java下新建一个包:com.hadoop.SpringMVC
新建一个class:myCon.java
package com.hadoop.SpringMVC;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
@RequestMapping("my.do")
public class myCon implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
ModelAndView model = new ModelAndView();
model.setViewName("index");
return model;
}
}
运行结果:
4、不需要在springmvc.xml中配置
Cont.java
package com.hadoop.SpringMVC;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@RequestMapping("/you")
@Controller
public class Cont {
@RequestMapping("/add")
public ModelAndView add()
{
ModelAndView mode = new ModelAndView();
mode.setViewName("/index");
return mode;
}
@RequestMapping("/delete")
public String delete()
{
return "/index";
}
}
add
delete
传参
// 传参
@RequestMapping("/{id}/insert")
public String insert(@PathVariable("id") Long id)
{
System.out.println(id);
return "/index";
}
@RequestMapping(value = "/insertin", params = "id")
public String insertin(@RequestParam("id") Long id)
{
System.out.println(id);
return "/index";
}
结果:
insert
insertin
传入列表
@RequestMapping("/list")
public String show(HttpServletRequest request, HttpServletResponse response)
{
List list = new ArrayList();
list.add("sartin");
list.add("board");
request.setAttribute("lis", list);
return "/index";
}
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.List"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<%
//String usercode = request.getParameter("usercode");//用request得到
List user=(List)request.getAttribute("lis");
%>
<body>
<h2>Hello World!</h2>
<table border="1px solid blue">
<%
for(int i = 0; i < user.size(); i++)
{
String cus = (String)user.get(i);
%>
<tr>
<td><%=cus%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
结果:
绑定对象
方法一:
//绑定对象
@RequestMapping("/login")
public String form(HttpServletRequest request, HttpServletResponse response)
{
String name = request.getParameter("name");
String passwd = request.getParameter("passwd");
System.out.println(name+"---"+passwd);
List list = new ArrayList();
list.add(name);
list.add(passwd);
request.setAttribute("lis", list);
return "/index";
}
form.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.List"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<body>
<h2>Hello World!</h2>
<form action="/SpringMVC/you/login.do" methon="post">
用户名:<input type="text" name="name"></br>
密码:<input type="password" name="passwd">
<input type="submit" value="提交"></input>
</form>
</body>
</html>
表单中输入用户名和密码:
得到结果:
方法二:
@RequestMapping("/login2")
public String form2(HttpServletRequest request, HttpServletResponse response, String name, String passwd)
{
System.out.println(name+"---"+passwd);
List list = new ArrayList();
list.add(name);
list.add(passwd);
request.setAttribute("lis", list);
return "/index";
}
form2.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.List"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<body>
<h2>Hello World!</h2>
<form action="/SpringMVC/you/login2.do" methon="post">
用户名:<input type="text" name="name"></br>
密码:<input type="password" name="passwd">
<input type="submit" value="提交"></input>
</form>
</body>
</html>
结果:
方法三:
//封装成对象
@RequestMapping("/login3")
public String form3(User user, HttpServletRequest request)
{
List list = new ArrayList();
list.add(user.getName());
list.add(user.getPwd());
request.setAttribute("lis", list);
return "/index";
}
User.java
package com.hadoop.bean;
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
private String pwd;
}
form3.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.List"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<body>
<h2>Hello World!</h2>
<form action="/SpringMVC/you/login3.do" methon="post">
用户名:<input type="text" name="name"></br>
密码:<input type="password" name="pwd"> // 这里的name跟User里对应就好了
<input type="submit" value="提交"></input>
</form>
</body>
</html>
结果:
文件上传
1、依赖:
<!-- 文件上传 -->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2、springmvc.xml
<!-- 文件上传功能需该配置 -->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 设定文件上传的最大值5MB , 5*1024*1024 -->
<property name="maxUploadSize" value="5242880"/>
</bean>
3、User.java
package com.hadoop.bean;
public class User {
private String pic;
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
private String pwd;
}
4、form.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.List"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<body>
<h2>Hello World!</h2>
<form action="/SpringMVC/you/upload.do" method="post" enctype="multipart/form-data">
头像:<input type="file" name="file"/>
<input type="hidden" name="pic" value=""></br>
用户名:<input type="text" name="name"></br>
密码:<input type="password" name="pwd">
<input type="submit" value="提交"></input>
</form>
</body>
</html>
5、代码
//上传文件
@RequestMapping("/upload")
public String img(User user, HttpServletRequest request, @RequestParam("file") MultipartFile mult) throws IllegalStateException, IOException
{
List list = new ArrayList();
list.add(user.getName());
list.add(user.getPwd());
if(mult != null)
{
System.out.println(mult.getOriginalFilename());
mult.transferTo(new File("/images/"+mult.getOriginalFilename()));
}
request.setAttribute("lis", list);
return "/index";
}
结果:
图片名称:
若想要把图片显示出来
在下图位置创建一个image文件夹
没成功,因为路径原因
//上传文件
@RequestMapping("/upload")
public String img(User user, HttpServletRequest request, @RequestParam("file") MultipartFile mult) throws IllegalStateException, IOException
{
List list = new ArrayList();
if(mult != null)
{
//获取文件的存储路径(绝对路径)
String path = request.getServletPath();
System.out.println(path);
// 获取原文件名
String fileName = mult.getOriginalFilename();
//创建文件实例
File filePath = new File(path, fileName);
System.out.println(mult.getOriginalFilename());
mult.transferTo(new File("/images/"+mult.getOriginalFilename()));
user.setPic("/images/"+mult.getOriginalFilename());
}
list.add(user);
request.setAttribute("lis", list);
return "/index";
}