编写简单的Servlet程序。

[size=large][color=red]水平有限,如有技术问题,请提出,谢谢!!!
[/color][/size]


下面描写的是一段超级简单的doPost方法,可以使用HttpServletRequest对象里的request.getParameter()方法接收来自页面表单的数据。

比如:
request.getParameter("UserName");

这个方法表面接受页面表单名为UserName的数据。

页面:
<form method="post" action="/Film/servlet/UserRegister">
用户名:<input type="text" name="UserName"><br>



package app.user.action;

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;

import core.security.MD5;

import app.user.service.UserService;

public class UserRegisterAction extends HttpServlet {

private UserService userService=new UserService();

private String userName;
private String passWord;


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//JS弹出中文,解决乱码
response.setCharacterEncoding("GB2312");

userName=request.getParameter("UserName");
passWord=request.getParameter("PassWord");
PrintWriter out=response.getWriter();

if(request.getParameter("PassWord2").equals(passWord)&&userName!=null&&userName.length()!=0){
userService.saveUserInformationByRegister(userName,MD5.getMD5(passWord));
out.print("<script language='javascript'>alert('注册成功!');window.location.href='/Film/index.jsp';</script>");
}else{
out.print("<script language='javascript'>alert('填写错误!请重新填写.');window.location.href='/Film/servlet/registerUser.jsp';</script>");
}

}


}


之后,我们需要在web.xml文件里配置这个servlet。

 <servlet>
<servlet-name>UserRegister</servlet-name>
<servlet-class>app.user.action.UserRegister</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>UserRegister</servlet-name>
<url-pattern>/servlet/UserRegister</url-pattern>
</servlet-mapping>



[quote]这里的
<servlet-name> UserRegister </servlet-name>
使用servlet-name定义servlet的名称,名称可以随意,一般选取有意义的名称。
<servlet-class>app.user.action.UserRegister</servlet-class>
servlet用来定义由哪一个类来处理用户的请求。形式为:包名+类名

<servlet-mapping>
<servlet-name>UserRegister</servlet-name>
该名称与上面定义的servlet名要一致。
<url-pattern>/servlet/UserRegister</url-pattern>
定义servlet的表现形式,也就是用户在浏览器的地址栏输入的一部分url地址。

OK,到这里这个servlet算是完成了。
[/quote]

首先,使你的类继承HttpServlet类,让我们来看一看HttpServlet类的原码:

package javax.servlet.http;

import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.text.MessageFormat;
import java.util.Enumeration;
import java.util.ResourceBundle;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public abstract class HttpServlet extends GenericServlet
implements Serializable


这里可以看见HttpServlet类继承GenericServlet类,而且继承了Serializable接口,我们来看一看GenericServlet的原码:

package javax.servlet;

import java.io.IOException;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.ResourceBundle;

public abstract class GenericServlet
implements Servlet, ServletConfig, Serializable


里面也没什么。重点还是在HttpServlet这个类。

这个类里实现了几个HTTP协议请求的方法。比如:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_post_not_supported");
if (protocol.endsWith("1.1"))
resp.sendError(405, msg);
else
resp.sendError(400, msg);
}


因为我们在自己的类里覆盖了doPost方法,所以这里不会向页面发 resp.sendError(405, msg);或 resp.sendError(400, msg);错误。

HttpServlet类里的service方法实现了GenericServlet基类的service抽象方法。

首先,进行request = (HttpServletRequest)req;response = (HttpServletResponse)res;
转换,成功之后,掉用service(request, response);下面代码展现了这一过程。

 public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
HttpServletRequest request;
HttpServletResponse response;
try
{
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}
}


之后,调用下面的service(request, response);方法。

 protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
long lastModified;
String method = req.getMethod();

if (method.equals("GET")) {
lastModified = getLastModified(req);
if (lastModified == -1L)
{
doGet(req, resp);
} else {
long ifModifiedSince = req.getDateHeader("If-Modified-Since");
if (ifModifiedSince < lastModified / 1000L * 1000L)
{
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus(304);
}
}
}
else if (method.equals("HEAD")) {
lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
}
else if (method.equals("POST")) {
doPost(req, resp);
}
else if (method.equals("PUT")) {
doPut(req, resp);
}
else if (method.equals("DELETE")) {
doDelete(req, resp);
}
else if (method.equals("OPTIONS")) {
doOptions(req, resp);
}
else if (method.equals("TRACE")) {
doTrace(req, resp);
}
else
{
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs);

resp.sendError(501, errMsg);
}
}


这里可以看见,根据我们传入的请求和响应对象,判断应该执行哪个方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值