java servlet .net_JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚
時隔多日,多日合適嗎,應該是時隔多月。我又想起了一般處理程序。這都是由于近期在實現(xiàn)的DRP系統(tǒng)中經(jīng)經(jīng)常使用到jsp+servlet達到界面與邏輯的分離。servlet負責處理從jsp傳回的信息;每當這個時候我就有一種感覺,這里的Servlet好像跟一般處理程序有著相同的作用,只是由于我對一般處理程序的了解并不深刻,僅僅是在一個寫簡單的實例中應用過。大家有什么看法都能夠提出來,以下我就從我有限的知識出發(fā)來說說我的理解:
一、一般處理程序
一般處理程序用來處理一般的web請求。一般處理程序實現(xiàn)一個FrameWork的接口:IHttpHandler,該接口定義了假設實現(xiàn)一個HTTP騎牛的處理所必須實現(xiàn)的一些系統(tǒng)約定。創(chuàng)建一個空白的一般處理程序:
///
/// HelloWord 的摘要說明
///
public class HelloWord : IHttpHandler
{
public void ProcessRequest(HttpContextcontext)
{
context.Response.ContentType ="text/plain";
context.Response.Write("HelloWorld");
}
public bool IsReusable
{
get
{
return false;
}
}
}
我們能夠看到僅僅須要實現(xiàn)一個方法和一個屬性,當中ProcessRequest放置處理請求的主要代碼;IsReusable屬性,獲取指示其它請求能否夠使用IHttpHandler 實例,一般都設置為true;
以下以以一個簡單的加入用戶為例。看一般處理程序是怎樣實現(xiàn)的:
web傳遞信息:
//加入用戶信息
function saveOneOrganization() {
//獲username稱
var nameValue =$("#UserName").val();
//獲取password
var passWordValue =$("#PassWord").val();
//給隱藏控件test的value賦值
var test = "add";
if (nameValue == "" ||passWordValue == "" ||) {
alert("請將信息填寫完整!");
}
$.post("addManager.ashx", {nameValue: nameValue, passWordValue: passWordValue,test: test }, function(data) {
alert(data);
});
}
一般處理信息處理:
///
/// addManager1 的摘要說明
///
public class addManager1 : IHttpHandler
{
UserManagerBLL userManagerBll = newUserManagerBLL();
public void ProcessRequest(HttpContextcontext)
{
//接受前臺傳過來的test值
string command =context.Request.Params["test"];
if (command =="addUser") //加入username
{
addUser(context);
}
else if (command =="delUser")
{
modifyUser(context);
}
}
//加入用戶信息
public void addUser(HttpContextcontext) {
//username稱
string strNameValue =context.Request.Params["nameValue"];
//用戶密碼
string strpassWordValue =context.Request.Params["passwordValue"];
//實例化用戶實體
UserEntity userEntity = new UserEntity();
//將變量值傳給實體
userEntity.UserName = strNameValue;
userEntity.Password =strpassWordValue;
//調(diào)用B層的方法
string strResult=userManagerBll.add(userEntity);
//往前抬傳值
context.Response.Write(strResult);
context.Response.End();
}
//改動
public void modifyUser(HttpContextcontext)
{
//實現(xiàn)與加入用戶已知不再詳述
}
public bool IsReusable
{
get
{
return true;
}
}
}
二、Servlet
事實上Servelet范圍非常廣。這里我說的Servlet僅僅是Servlet的一種實現(xiàn)。創(chuàng)建Servlet事實上現(xiàn)HttpServlet,與IHttpHandler相似的是HttpServleteasy也是響應Web客戶的請求,WEB容器把客戶請求封裝成一個HttpServletRequest對象,然后把對象傳給Servlet的對象方法進行處理。
在繼承HttpServlet時。能夠選擇覆蓋部分方法。比如:doGet()或doPost(),或者覆蓋Service方法。
以下簡答的加入改動實例看一下servlet的實現(xiàn):
jsp調(diào)用:
function add(){
window.self.location="servlet/flowCard/FlowCardServlet?command=add"
}
Servlet實現(xiàn):
publicclass UserServlet extends HttpServlet {
@Override
protectedvoid service(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//必須顯示調(diào)用父類的service方法
super.service(request,response);
if("add".equals(getCommand())) {
add(request,response);
}elseif ("del".equals(getCommand())) {
}elseif ("modify".equals(getCommand())) {
}else {
}
}
/**
* 加入
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
privatevoid add(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//用戶姓名
String userName=request.getParameter("userName");
//用戶password
String passWord=request.getParameter("passWord");
user.setUserName(userName)
user.setpassWord(passWord)
UserManager.add(user);
//頁面跳轉
response.sendRedirect(request.getContextPath()+ "/flowcard/flow_card_maint.jsp");
}
/**
* 刪除
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
privatevoid del(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//略去
}
}
使用servlet須要在web.xml中進行配置:
UserServlet
com.tgb.UserServlet
2
UserServlet
/servletUserServlet
比較:
1、事實上從上面的代碼能夠看出。他們兩個都能夠依據(jù)頁面?zhèn)鬟^來的參數(shù)推斷要運行的方法。進而調(diào)用業(yè)務層的詳細處理過程,非常easy的把頁面與業(yè)務邏輯分開。
2、在.net中的一般處理程序與java中Servlet都是用來處理web端發(fā)送的請求,解開頁面與業(yè)務邏輯的耦合;看起來作用就像是MVC框架中Controller的作用,近期感覺非常多東西非常像。主要是缺乏實踐還沒摸透當中的道理,歡迎指正。
總結
以上是生活随笔為你收集整理的java servlet .net_JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java调用百度推送详解_Java 以
- 下一篇: 浅谈开发中的MVVM模式及与MVP和MV