# 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 } }再运行页面的结果,两个都显示:
在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 } }第一个注解程序
创建一个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
结果:
insert
insertin
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"; }