SpringMVC的入门学习

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值