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; } }