Java Servlet接口、web.xml配置、HttpServlet父類
Servlet接口(處理客戶端請求、響應給瀏覽器的動態資源的規範)
創建類實現Servlet接口 實現service方法
在web.xml進行servlet的配置
Servlet接口的方法
init(ServletConfig config) 初始化
默認第一次訪問時創建servlet對象
ServletConfig:配置信息對象 在web.xml內
service(ServletRequest request,ServletResponse response)
每次請求都會執行 :創建新的 請求對象 和 響應對象
destroy():服務器關閉 (銷毀servlet對象)
public class MyServlet implements Servlet{
public void init(ServletConfig config) throws ServletException {
String servletName=config.getServletName(); //獲取Servlet名稱
String value=config.getInitParameter("url"); //獲取初始化參數
ServletContext context=config.getServletContext();//WEB項目對象
}
public void destroy() { System.out.println("servlet銷毀了
public ServletConfig getServletConfig() { return null; }
public String getServletInfo() { return null; }
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException,IOException {
System.out.println("servlet方法正在運行");
}
}
web.xml文件內容
<?xml version="1.0" encoding="UTF-8"?>
<web-app ......>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.oracle.demo01.MyServlet</servlet-class>
<init-param>
<param-name>url</param-name>
<param-value>com.mysql.jdbc.driver</param-value>
</init-param>
<load-on-startup>3</load-on-startup><!--啟動時創建Servlet對象-->
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name> <!--*:任意字符串-->
<url-pattern>/MyServlet</url-pattern> <!--完全匹配-->
<!--<url-pattern>*.html</url-pattern>--> <!--擴展名匹配-->
<!--<url-pattern>/java/*</url-pattern>--> <!--目錄匹配-->
<!--<url-pattern>/</url-pattern>--> 找不到 <!--缺省匹配-->
擴展名匹配和目錄匹配不能混用
</servlet-mapping>
<servlet>......</servlet> <servlet-mapping>......</servlet-mapping>可多套
<welcome-file-list><!--歡迎頁面 前一個找不到 再找下一個-->
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
HttpServlet(實際開發中 創建類繼承HttpServlet)
實現步驟: 包下 new→Servlet→Class name:MyServlet 自動繼承
自動在web.xml中進行servlet的配置
Window→preferences→Java/Editor/Templates→New→
name:servlet Description:servlet by my Pattern:代碼
快捷鍵 描述 粘貼代碼
HttpServlet類的方法
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()
訪問地址 先去自己寫的web.xml中找
找不到再去TomCat的conf/server.xml中找 缺省匹配
缺省匹配 默認去WebContent下找靜態資源
404
ServletContext對象 WEB項目對象(域對象 整個項目共用一個)
一個web應用可有多個servlet對象
創建:web應用被加載(服務器啟動 並 發布web應用)
銷毀:web應用被卸載(服務器關閉 或 移除該web應用)
web.xml中配置初始化參數
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<servlet>...</servlet>
ServletContext context=this.getServletContext(); //獲取WEB項目對象
String initParameter=context.getInitParameter("driver");//獲得"driver"參數
System.out.println(initParameter); //com.mysql.jdbc.Driver
//獲取文件的絕對路徑 通過WebContent下相對路徑
String pathc=context.getRealPath("WEB-INF/classes/c.txt");
//F:\java\apache-tomcat-7.0.52\webapps\WEB0002\WEB-INF\classes\c.txt
//獲取src(classes)下文件 通過類加載器
String path=類名.class.getClassLoader().getResource("c.txt").getPath();
字節碼對象 加載 獲取資源 獲取路徑
域對象的通用的方法:
context.setAttribute(String name,Object obj); (鍵,值)
context.getAttribute(String name); 返回Object類型
removeAttribute(String name)
HttpServletResponse(HttpServlet類的響應對象)
用戶登錄 WebContent下創建login.jsp 內容為: <body> <form action="/WEB0002/LoginServlet" method="post"> 用戶名:<input type="text" name="username"><br> 密碼:<input type="password" name="password"><br> <input type="submit" value="登陸"> </form> </body> Java Resources/src下創建包如下 com.oracle.web LoginServlet.java com.oracle.service UserService.java com.oracle.dao UserDao.java com.oracle.tools JDBCUtils.java WebContent/WEB-INF/lib/mysql-connector-java-5.1.37-bin.jar Build Path LoginServlet.java文件內容: public class LoginServlet extends HttpServlet { private UserService userService=new UserService();//創建服務層對象 public void init() throws ServletException { //第一次訪問 創建對象 ServletContext context=getServletContext();//獲取WEB項目對象 int num=0; //初始化計數器 context.setAttribute("num", num); //計數器 存鍵值對 } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲取前端提交的用戶名和密碼 String username=request.getParameter("username"); String password=request.getParameter("password"); //調用Service層方法驗證 int count=userService.loginUser(username, password); if(count>0){ ServletContext context=getServletContext(); //獲取項目對象 int num=(int)context.getAttribute("num"); //取鍵值對 的值 num++; context.setAttribute("num", num); //將計數器存回去 response.getWriter().write("success number:"+num); }else{ response.getWriter().write("faile"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); //調用get請求方法 } } UserService.java內容: public class UserService { private UserDao userDao=new UserDao(); //用戶登錄 public int loginUser(String username,String password){ int count=0; count=userDao.loginUser(username, password);//點try return count; } } UserDao.java內容: public class UserDao { //登陸 public int loginUser(String username,String password) throws SQLException{ Connection conn=JDBCUtils.getConn(); String sql= "select count(*) from user where uname=? and password=?"; PreparedStatement pst=conn.prepareStatement(sql); pst.setString(1, username); pst.setString(2, password); ResultSet rs=pst.executeQuery(); int count=0; while(rs.next()){ count=rs.getInt(1); } JDBCUtils.close(conn, pst, rs); return count; } }
Java Servlet接口、web.xml配置、HttpServlet父類