第五章节 Servlet基础
目录
一、Web站点的建立
二、创建 Servlet的三种方法
三、Servlet常用接口与方法
四、Servlet上手
一、Web站点的建立
当客户端提交请求的时候,由tomcat容器之类的Web容载入并运行,然后将生成的动态页面返回给客户端。
如何能让Web容器找到编写好的Servlet文件呢,这就需要建立一个Web站点,并对站点进行配置。
Tomcat中有一个webapps文件,相当于默认站点,可以在这个文件中通过 下面的步骤来创建一个Web站点。
1.定义站点名。
2.创建WEB-INFO文件,这个文件用来存放Web站点的配置文件,自己编写的类和程序中用到的JAR包。
3.创建一个web.xml文件,这个是web的本地配置文件。
4.创建class文件,在WEB-INFO文件下创建一个classes文件夹,用来存放编写的class文件。
二、创建 Servlet的三种方法
Servlet是运行在tomcat之类的web容器中,需要进行配置,容器通过配置信息读取Servlet。
- 实现 Servlet接口
1.创建Servlet
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class Hello implements Servlet{ @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void init(ServletConfig config) throws ServletException { } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { PrintWriter pw = res.getWriter() ; pw.println("hello"); } }
2.配置web.xml文件
每一个编写好的Servlet都要在web.xml中进行配置。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.chuiyuan.Hello</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/servlet/Hello</url-pattern> </servlet-mapping> </web-app>
里面的servlet-name可以是任意的,后面的servlet-mapping中name和它一样就可以了。
由于 tomcat在启动的时候 载入web.xml文件,所以web.xml文件一经修改,服务器就要重启才会有效果。
- extends GenericServlet
在上面的Hello的同一个包里面,编写 Hello1.class
d
package com.chuiyuan; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class Hello1 extends GenericServlet{ @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { try { PrintWriter out = res.getWriter(); out.print("Hello1"); } catch (Exception e) { // TODO: handle exception } } }
- extends HTTPServlet
在同一个包里面编写 Hello2.class. HttpServlet是最常用的。
package com.chuiyuan; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello2 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { PrintWriter out = resp.getWriter() ; out.println("Hello2"); } catch (Exception e) { // TODO: handle exception } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); //引用 doGet,避免代码重复 } }
- 在之前的文件中追加配置
<!-- hello1 --> <servlet> <servlet-name>hello1</servlet-name> <servlet-class>com.chuiyuan.Hello1</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello1</servlet-name> <url-pattern>/servlet/Hello1</url-pattern> </servlet-mapping> <!-- hello2 --> <servlet> <servlet-name>hello2</servlet-name> <servlet-class>com.chuiyuan.Hello2</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello2</servlet-name> <url-pattern>/servlet/Hello2</url-pattern> </servlet-mapping>
我们通过 http://localhost:8080/Hello/servlet/Hello2来访问。
四、Servlet上手
在实际项目中,都是让用户提交一个操作,然后服务器得到这个提交的信息,返回一些数据给用户。下面是一个登陆的例子。
有两个Servlet,用到了Servlet的通信 。
如下
package com.chuiyuan; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Index extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { resp.setContentType("text/html;charset=gbk"); PrintWriter out = resp.getWriter() ; out.println("<html>"); out.println("<body>"); out.println("<h1>用户登陆</h1>"); //提交到了Login处理 out.println("<form action=Login method= post>"); out.println("<table>"); out.println("<tr><td>用户名:<input type =text name=username></td></tr>"); out.println("<tr><td>密码:<input type =password name=password></td></tr>"); out.println("<tr><td>密码:<input type ='submit' value='提交'></td></tr>"); out.println("</form>"); out.println("</body>"); out.println("</html>"); out.println(""); } catch (Exception e) { // TODO: handle exception } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
提交后,由Login进行处理
package com.chuiyuan; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Login extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("username") ; String pwd = req.getParameter("password") ; try { resp.setContentType("text/html;charset=gbk"); PrintWriter out = resp.getWriter() ; out.println("用户名是:"+name+"<br>"); out.println("密码是:"+pwd+"<br>"); } catch (Exception e) { // TODO: handle exception } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
配置文件一定要有。如下
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!-- index --> <servlet> <servlet-name>index</servlet-name> <servlet-class>com.chuiyuan.Index</servlet-class> </servlet> <servlet-mapping> <servlet-name>index</servlet-name> <url-pattern>/servlet/Index</url-pattern> </servlet-mapping> <!-- login --> <servlet> <servlet-name>login</servlet-name> <servlet-class>com.chuiyuan.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/servlet/Login</url-pattern> </servlet-mapping> </web-app>
在浏览器中输入
http://localhost:8080/Chapter5/servlet/Index