1. 程式人生 > >Java Servlet接口、web.xml配置、HttpServlet父類

Java Servlet接口、web.xml配置、HttpServlet父類

txt webapps void obj 每次 classes 自動 desc file

Servlet接口(處理客戶端請求、響應給瀏覽器的動態資源的規範)

創建類實現Servlet接口 實現service方法

web.xml進行servlet的配置

Servlet接口的方法

init(ServletConfig config) 初始化

默認第一次訪問時創建servlet對象

ServletConfig:配置信息對象 在web.xml

serviceServletRequest 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)

實現步驟: 包下 newServletClass nameMyServlet 自動繼承

自動在web.xml中進行servlet的配置

WindowpreferencesJava/Editor/TemplatesNew

name:servlet Description:servlet by my Pattern:代碼

快捷鍵 描述 粘貼代碼

HttpServlet類的方法

1init()

2doGet(HttpServletRequest request,HttpServletResponse response)

3doPost(HttpServletRequest request,HttpServletResponse response)

4destroy()

訪問地址 先去自己寫的web.xml中找

找不到再去TomCatconf/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

//獲取srcclasses)下文件 通過類加載器

String path=類名.class.getClassLoader().getResource("c.txt").getPath();

字節碼對象 加載 獲取資源 獲取路徑

域對象的通用的方法:

context.setAttribute(String name,Object obj); (鍵,值)

context.getAttribute(String name); 返回Object類型

removeAttribute(String name)

HttpServletResponseHttpServlet類的響應對象)

用戶登錄
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父類