准备工作
安装tomcat
manager app登录不进去的问题的解决是在/conftomcat-users.xml 中输入:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="manager" password="manager" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>
开发Servlet的三种方式
apache-tomcat-7.0.92\webapps\myWebSite\WEB-INF\web.xml写入:
<web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hellogen</servlet-name>
<servlet-class>HelloGen</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hellogen</servlet-name>
<url-pattern>/Hellogen</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hellohttp</servlet-name>
<servlet-class>HelloHttp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hellohttp</servlet-name>
<url-pattern>/hellohttp</url-pattern>
</servlet-mapping>
</web-app>
apache-tomcat-7.0.92\webapps\myWebSite\WEB-INF\classes\Hello.java
经过编译得到Hello.class,其他类似不再说明
启动apache-tomcat-7.0.92\bin\startup.bat
在浏览器中输入http://localhost:8080 进入tomcat
在浏览器中输入http://localhost:8080 /WebSite/hello即可打开页面
实现Servlet接口
package com.tingwei;
import javax.servlet.*;
import java.io.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class Hello implements Servlet{
/**
* Method init
*
*
* @param parm1 该函数只会被调用一次,当用户第一次访问该servlet时被调用
*
@throws ServletException
*
*/
public void init(ServletConfig parm1) throws ServletException {
// TODO: Add your code here
System.out.println("init it");
}
public ServletConfig getServletConfig() {
// TODO: Add your code here
return null;
}
/*
* @param parm1 req用于获得客户端(浏览器)信息
* @param parm2 res用于向客户端(浏览器)返回信息
*这个函数用于处理业务逻辑,当用户每次访问该servlet时都会被调用
*/
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO: Add your code here
System.out.println("service it");
//从re中得到PrintWriter
PrintWriter pw=res.getWriter();
pw.println("hello world");
}
/*
*/
public String getServletInfo() {
// TODO: Add your code here
return " ";
}
/**
* Method destroy
*
*释放内存
*1.reload 该servlet(webapps)//2.关闭tomcat//3.关机
*/
public void destroy() {
// TODO: Add your code here
System.out.println("destroy");
}
}
继承ServletGeneric
import javax.servlet.GenericServlet;
import javax.servlet.*;
import java.io.*;
public class HelloGen extends GenericServlet{
//重写service方法
public void service(ServletRequest req,ServletResponse res){
//返回hello,world generic
try{
PrintWriter pw=res.getWriter();
pw.println("hello,world! generic");
}catch(Exception ex){
ex.printStackTrace();
}
}
}
继承HttpServlet
import javax.servlet.http.*;
import java.io.*;
public class HelloHttp extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
try{
PrintWriter pw=res.getWriter();
pw.println("hello,http");
}catch(Exception ex){
ex.printStackTrace();
}
}
//处理post请求
//res:用于获取客户端(浏览器)的请求
//req:用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
基于Servlet做一个简单的登录验证网页
<web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>loginCl</servlet-name>
<servlet-class>LoginCl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginCl</servlet-name>
<url-pattern>/loginCl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>wel</servlet-name>
<servlet-class>Wel</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wel</servlet-name>
<url-pattern>/wel</url-pattern>
</servlet-mapping>
</web-app>
Login.java
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
try{
//中文乱码的解决
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//返回登录界面
pw.println("<html>");
pw.println("<body>");
pw.println("<h1>登录界面</h1>");
pw.println("<form action=loginCl method=post>");
pw.println("User name:<input type=text name=username><br>");
pw.println("Password:<input type=password name=password><br>");
pw.println("<input type=submit value=loging><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
}catch(Exception ex){
ex.printStackTrace();
}
}
//处理post请求
//res:用于获取客户端(浏览器)的请求
//req:用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
LoginCl.java
import javax.servlet.http.*;
import java.io.*;
public class LoginCl extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
try{
//接收用户名称和密码
String u=req.getParameter("username");
String p=req.getParameter("password");
//验证
if(u.equals("sp")&&p.equals("123")){
//合法
res.sendRedirect("wel");
}else{
//不合法
res.sendRedirect("login");//写你要跳转的servlet的那个url
}
}catch(Exception ex){
ex.printStackTrace();
}
}
//处理post请求
//res:用于获取客户端(浏览器)的请求
//req:用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
Wel.java
import javax.servlet.http.*;
import java.io.*;
public class Wel extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
try{
PrintWriter pw=res.getWriter();
pw.println("Welcome!");
}catch(Exception ex){
ex.printStackTrace();
}
}
//处理post请求
//res:用于获取客户端(浏览器)的请求
//req:用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}