關於servlet3.0 介紹很少說,直接進入開發主題javascript
先寫個登錄頁面,代碼以下html
index.jsp 頁面
java
<%@ 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"
"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配置web
<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 代碼以下session
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,
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); } } }
寫一個 中文亂碼的Filterapp
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("======初始化====="); } }
登錄成後的頁面 dom
login.jspjsp
<%@ 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>
強制登錄ide
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做用域post
// 設置做用域 req.getSession().setAttribute("username", username); // 加上這句 //req.setAttribute("username", username); 註釋掉
上傳文件
上傳文件的servlet
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頁面 ,以下
<%@ 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>
此時上傳就能夠了
寫的不是很詳細,只是粗略的進行了下測試
若是不足,多多指導。