servlet 3.0

  1. 关于servlet3.0 介绍不多说,直接进入开发主题

    先写个登陆页面,代码如下

  2. index.jsp 页面
  3. <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
     <%
     	String msg = request.getParameter("msg");
     %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  4. "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    <title>用户登陆</title>
    </head>
    <body>
    	<form action="login" method="post" style="text-align: center;">
    		<h1>用户登陆</h1>
    		用户名:<input type="text" name="username">
    		<br/>
    		密  码:<input type="password" name="password">
    		<br/>
    		<input type="submit" value="登陆"><br/>
    		<span id="msg"><%=msg %></span>
    	</form>
    	<script type="text/javascript">
    		var msg = <%=msg%>;  
    		if(msg==null){
    			document.getElementById("msg").style.display = "none";
    		}
    	</script>
    </body>
    </html>

    原来需要在web.xml中配置,如下,在servlet3.0中通过注解功能,不再需要web.xml配置

  5. <servlet>
      	<servlet-name>login</servlet-name>
      	<servlet-class>com.action.Login</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>login</servlet-name>
      	<url-pattern>/login</url-pattern>
      </servlet-mapping>

    servlet 代码如下

  6. package com.action;
    
    import java.io.IOException;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebInitParam;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author zhuweishi
     * @version 1.1.0 
     */
    /*
     * @SuppressWarnings 表示不提示警告信息
     * @WebServlet 
     *     name 相当于web.xml中servlet的servlet-name
     *     urlPatterns  servlet-maring 中的url-pattern
     *     loadOnStartup  加载顺序
     *     inintParams 初始值
     */
    @SuppressWarnings("serial")
    @WebServlet(name="Test",urlPatterns={"/login","/test/login"},loadOnStartup=1,
  7. initParams={@WebInitParam(name="usname",value="张三")})
    public class Login extends HttpServlet{
    
    	@Override
    	public void init(ServletConfig config) throws ServletException {
    
    		//ServletConfig config = this.getServletConfig();
    		String usname = config.getInitParameter("usname");
    		System.out.println(usname+"-----");
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
    			throws ServletException, IOException {
    
    		String username = req.getParameter("username");
    		String password = req.getParameter("password");
    		System.out.println(username+"==="+password);
    
    		resp.setCharacterEncoding("UTF-8");
    		if("sysadmin".equals(username)){
    			if("000000".equals(password)){
    				// 设置作用域
    				req.setAttribute("username", username);
    				//转发
    				req.getRequestDispatcher("/login.jsp").forward(req,resp);
    			}else{
    				String msg = java.net.URLEncoder.encode("密码错误!", "utf-8");
    				resp.sendRedirect(req.getContextPath()+"/index.jsp?msg="+msg);
    			}
    		}else{
    		        // 解决中文乱码
    			String msg = java.net.URLEncoder.encode("用户名错误!", "utf-8");
    			resp.sendRedirect(req.getContextPath()+"/index.jsp?msg="+msg);
    		}
    	}
    
    }

写一个 中文乱码的Filter

package com.filter;

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.annotation.WebFilter;

/*
 * 原来 web.xml 配置
 *    <filter>
 *      <filter-name>UTFFilter</filter-name>
 *     <filter-class>com.action.UTFFilter</filter-class>
 *  	   <init-param>
 *  	   	  <param-name>enconding</param-name>
 *  	   	  <param-value>UTF-8</param-value>
 *  	   </init-param>
 *  </filter>
 *  <filter-mapping>
 *      <filter-name>UTFFilter</filter-name>
 *      <url-pattern>/*</url-pattern>
 *  </filter-mapping>
 * -------------------------------------------------
 * filterName 对应web.xml 中filter-name
 * value      对应web.xml 中 url-pattern
 * servletNames 是指定那个servlet的name
 */
@WebFilter(filterName="UTFFilter",value="/*",servletNames={"Test"})
public class UTFFilter implements  Filter{

	@Override
	public void destroy() {
		System.out.println("======销毁======");
	}
	@Override
	public void doFilter(ServletRequest req, ServletResponse res, 
			FilterChain chain) throws IOException, ServletException {
		// 设置编码方式
		req.setCharacterEncoding("UTF-8");
		chain.doFilter(req, res);
	}
	@Override
	public void init(FilterConfig config) throws ServletException {
		System.out.println("======初始化=====");
	}
}

登陆成后的页面

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	欢迎 ${username}
</body>
</html>

强制登陆

package com.filter;

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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@WebFilter("/*")
public class LoginFilter implements Filter{
	@Override
	public void destroy() {
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, 
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		HttpSession session = request.getSession();

		// 获取登陆用户名
		String username = (String)session.getAttribute("username");
		// 获取请求的uri
		String uri = request.getRequestURI();
		System.out.println("username:"+username+"==========");
		if(username != null){
			chain.doFilter(request, res);
		}else if(uri.contains("/login")){
			chain.doFilter(request, res);
		}else{
			System.out.println("===else====");
			request.getRequestDispatcher("/index.jsp").forward(req, res);
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {

	}

}

这里需要把上面servlet中的Login 修改下 session作用域

// 设置作用域
req.getSession().setAttribute("username", username); // 加上这句
//req.setAttribute("username", username); 注释掉

上传文件

  1. 上传文件的servlet
  2. package com.action;
    
    import java.io.IOException;
    import java.util.UUID;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.MultipartConfig;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.Part;
    
    @WebServlet("/upload")
    @MultipartConfig
    public class Upload extends HttpServlet{
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
    			throws ServletException, IOException {
    
    		// 获取文件部件 part
    		Part part = req.getPart("upfile");
    
    		String name = part.getHeader("content-disposition");
    		System.out.println(name);
    
    		System.out.println("partName:"+part.getName());
    		// 上传路径
    		String root = req.getServletContext().getRealPath("/upload");
    		System.out.println("root:"+root);
    		// 后缀名
    		String str = name.substring(name.lastIndexOf("."),name.length()-1);
    		System.out.println("str:"+str);
    		// 重命名
    		String filename = root + "\\"+UUID.randomUUID().toString()+str;
    
    		part.write(filename);
    	}
    }

    修改login.jsp页面 ,如下

  3. <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	欢迎 ${username} <br/>
    	<form action="upload" method="post" enctype="multipart/form-data">
    		<input type="file" name="upfile"><br/>
    		<input type="submit" value="上传">
    	</form>
    </body>
    </html>

    此时上传就可以了

写的不是很详细,只是粗略的进行了下测试

如果不足,多多指导。

时间: 2024-10-30 01:39:28

servlet 3.0的相关文章

Servlet 3.0 对异步处理的支持

Servlet 3.0 实现了对异步处理的支持 通过利用注解@WebServlet(urlPatterns="/AServlet" AysnsSupported=true) 让后new一个上下文对象 代码如下 AsyncContext ac= request.startAysnc(request,response) 传入一个Runnable  对象 ac.start(new Runnable(){ // 加入代码 });   上述表示Servlet3.0 对异步处理的支持

关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系

tomcat 的 org.apache.coyote.http11.Http11NioProtocol Connector 是一个使用 Java NIO 实现的异步 accept 请求的 connector 它的作用是不需要为每个请求建立一个线程, 而是使用固定的accept线程 accept 多个请求, 然后排队处理. 大概的意思是使用固定的 acceptThread 来 accept n 个请求, 然后将请求入队, 最后使用固定的 requestProcessingThread 来处理业务逻

Servlet 3.0 新特性详解

转自:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性详解 张 建平2010 年 4 月 23 日发布 WeiboGoogle+用电子邮件发送本页面 6 Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其

Servlet 3.0对上传的支持

Servlet 2.5 进行上传   首先对表单的要求     ->method ="post"    ->enctype="mulitpart/form-data"  默认值是"application/x-www-urlencoded"    -><input="file" name="文件名必须给出">  对Servlet的要求   因为是多部件   所以对于request

Servlet 3.0 新特性

Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声: 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来

jsp Servlet 3.0文件上传

Servlet 3.0之前上传文件一般都要借助与第三方插件上传,有了servlet3.0后,上传文件从此变得简单.老规矩,直接上代码. 1.建立一个index.jsp用于表单提交 1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3

Servlet 3.0 新特性概述

Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声: 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线

atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结

atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结 1. jar比较,j2ee 1.6 添加了许多的jar 1 2. ,Servlet 3.0 2 2.1. 可插性  web片段 2 2.2. 异步处理 3 2.3. anno支持filter,sevlet,listen 3 2.4. 三.元数据和通用注释 3 2.5. 现有API的改进 HttpServletRequest,,HttpServletRequest,,ServletContext,,dynac fi

[转]Servlet 3.0 新特性详解

原文地址:http://blog.csdn.net/xiazdong/article/details/7208316 Servlet 3.0 新特性概览 1.Servlet.Filter.Listener无需在web.xml中进行配置,可以通过Annotation进行配置: 2.模块化编程,即将各个Servlet模块化,将配置文件也分开配置. 3.Servlet异步处理,应对复杂业务处理: 4.异步Listener,对于异步处理的创建.完成等进行监听: 5. 文件上传API简化: tomcat

Servlet 3.0 特性

Servlet 3.0 了解即可. 在servlet3.0中可以使用注解来替代我们配置文件.简单说:在servlet3.0中可以没有web.xml文件.版本对应关系                      servlet2.5      javaee5.0     tomcat 5.x tomcat6     jdk1.5                     servlet3.0       javaee6.0      tomcat7.0               jdk1.6 1.使