后端服務(wù)器一般是指servlet容器,用于執(zhí)行java源程序
站在用戶的角度思考問題,與客戶深入溝通,找到潮南網(wǎng)站設(shè)計(jì)與潮南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋潮南地區(qū)。
常見的網(wǎng)頁有html,htm,shtml,asp,aspx,php,jsp等格式
前兩個(gè)常用于靜態(tài)網(wǎng)頁,后面幾個(gè)常用于動(dòng)態(tài)網(wǎng)頁。
這里前端網(wǎng)頁以比較常見的 xx.html 和 xx.jsp 網(wǎng)頁作為介紹,其它類似
一、靜態(tài)頁面xx.html如何跟后臺(tái)交互:
先來看一個(gè)最簡(jiǎn)單的登陸界面源代碼
user: password: input type="submit" value="Submit"/
/form12
這是一個(gè)表單,我們看到里面都是純html內(nèi)容,這是一個(gè)靜態(tài)頁面,當(dāng)我們點(diǎn)擊submit按鈕時(shí)候,瀏覽器會(huì)提交表單內(nèi)的數(shù)據(jù)到服務(wù)器的loginServlet這個(gè)相對(duì)地址,我們看看瀏覽器的地址變成啥了:
這不就是我們的后臺(tái)servlet的地址嘛,然后這個(gè)地址指向的是loginServlet這個(gè)servlet,然后在web.xml文件中找到這個(gè)servlet關(guān)聯(lián)的java類,從而執(zhí)行了服務(wù)器端的程序(第一次執(zhí)行,那么會(huì)實(shí)例化,然后執(zhí)行里面init()函數(shù),然后執(zhí)行service()函數(shù),如果是第二次調(diào)用,那么不用實(shí)例化了,直接執(zhí)行service()函數(shù)),我們來看看服務(wù)器端的源程序:
package com.atguigu.javaweb;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class loginServlet extends MyGeneriServlet {
public void init(javax.servlet.ServletConfig config) throws ServletException{
super.init(config);
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
//獲取請(qǐng)求方式是GET,POST方式?
HttpServletRequest httpServletRequest=(HttpServletRequest) request;
String method=httpServletRequest.getMethod();
System.out.println(method);
//1.獲取請(qǐng)求參數(shù):username,password
String username=request.getParameter(“username”);
String password=request.getParameter(“password”);
//獲取請(qǐng)求參數(shù)
String initUser=getServletContext().getInitParameter(“user”);
String initpassword=getServletContext().getInitParameter(“password”);
PrintWriter out=response.getWriter();
//3.對(duì)比
if(initUser.equals(username)initpassword.equals(password)){
out.print("Hello"+username); // 生成html內(nèi)容
}else{
out.print("Sorry"+username); // 生成html內(nèi)容
}
}12345678
}
上面沒有判斷此時(shí)對(duì)servlet的請(qǐng)求是post還是get方法,不過沒關(guān)系,request這個(gè)傳進(jìn)來的參數(shù)以及包含了這些信息,自己判斷一下執(zhí)行相應(yīng)的操作即可
由于頁面路徑已經(jīng)跳轉(zhuǎn)到servlet了,但是servlet不是一個(gè).html文件啊,那豈不是沒有內(nèi)容供瀏覽器顯示了,不是的,我們看到返回的參數(shù)response中的對(duì)象PrintWriter out用于動(dòng)態(tài)生成html內(nèi)容的字符串"Hello",所以這時(shí)候相當(dāng)于servlet這個(gè)路徑也有了html內(nèi)容了,瀏覽器的頁面就會(huì)顯示上述字符串了
二、jsp頁面如何跟后端服務(wù)器交互:
jsp網(wǎng)頁文件就是html內(nèi)容里面插入java代碼,當(dāng)我們?cè)L問.jsp網(wǎng)頁文件時(shí)候,服務(wù)器提前已經(jīng)知道這個(gè)頁面內(nèi)含有java代碼,那么服務(wù)器這邊就得先執(zhí)行一下這些代碼(就跟執(zhí)行servlet的java源代碼一樣),同時(shí)把執(zhí)行的結(jié)果嵌入在當(dāng)前這個(gè).jsp頁面內(nèi),我們看看源代碼:
%@page import=“java.util.Date”% // 如果這個(gè).jsp頁面中用到了一些java函數(shù),就得導(dǎo)入庫,這就跟java源文件一樣的
% out.println("Hello World!"); // 這里實(shí)際上是服務(wù)器執(zhí)行了結(jié)果,然后以文本返回給瀏覽器進(jìn)行顯示 %
上面紅色代碼就是java代碼,剛剛說過對(duì)象PrintWriter out用于動(dòng)態(tài)生成html內(nèi)容的字符串,所以服務(wù)器執(zhí)行完嵌入在里面的java代碼后,就是動(dòng)態(tài)生成了一串html代碼,然后一起傳給客戶端瀏覽器進(jìn)行顯示
當(dāng)然這種情況.jsp里面沒有按鈕,表單這樣的控件,現(xiàn)在再來看看有表單這種.jsp如何跟后端交互:
view.jsp
%@page import=“day03_student.Student”% // 還是得帶入java用到的庫文件
學(xué)生個(gè)人基本信息
% Student s=(Student)request.getAttribute("students"); // %
編號(hào) 學(xué)號(hào) 姓名 性別 年齡
%=s.getId()% %=s.getStuno()% %=s.getName()% %=s.getGender()% %=s.getAge() %
參考的原文:
這時(shí)候如果我們直接訪問這兒view.jsp文件,應(yīng)該是沒有數(shù)據(jù)的,因?yàn)閷?duì)象s無法從request對(duì)象獲取,必須得先給這個(gè)request對(duì)象賦值才行,即應(yīng)該從如下servlet路徑跳轉(zhuǎn)來view.jsp文件路徑才行
public class viewservlet extends HttpServlet {
private StudentDao dao=new StudentDao();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String idstr = request.getParameter("id");
int id = Integer.parseInt(idstr);
//將數(shù)據(jù)放入request中,傳遞到頁面
Student student=dao.queryById(id);
request.setAttribute("students", student);
request.getRequestDispatcher("view.jsp").forward(request, response); // 這里是從當(dāng)前頁面跳轉(zhuǎn)去哪個(gè)頁面,同時(shí)傳遞了request, response這兩個(gè)參數(shù),這時(shí)候的request就是有內(nèi)容的,接下來的view.jsp頁面就能獲取到內(nèi)容而且動(dòng)態(tài)生成html內(nèi)容
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}123456789101112131415
}
總結(jié):每個(gè)xx.html文件,xx.jsp文件,servlet響應(yīng)程序…都是需要在客戶端瀏覽器通過URL來訪問的。
xx.jsp文件,servlet響應(yīng)程序因?yàn)楹衘ava源代碼,需要服務(wù)器電腦先執(zhí)行一下,.jsp文件中的java代碼一般會(huì)動(dòng)態(tài)生成一些html內(nèi)容嵌入在當(dāng)前.jsp文件里面一起給瀏覽器顯示出來;而servlet中的java代碼一般是數(shù)據(jù)處理功能的,可能會(huì)通過request.getRequestDispatcher(“view.jsp”).forward(request, response);
這樣的方式跳轉(zhuǎn)到其它有html內(nèi)容的頁面的URL(同時(shí)傳遞處理好的數(shù)據(jù)過去) 來顯示結(jié)果
前端頁面用bootstrap的框架可以快速開發(fā)啊。類似的還有easyUi等等,關(guān)鍵是還是要用的很熟,用的熟了一些常用的class都非常清楚,一些常用的模塊,比如模態(tài)框,下拉框,輸入框組,導(dǎo)航條,菜單欄,等都可以直接復(fù)制過來用,稍微改改就行了。所以還是要非常熟。常用控件和模塊化的,信手拈來。
這個(gè)是web前端的技術(shù),在jsp頁面中通過
window.scroll(0,document.getElementById(divId).offsetTop);可以實(shí)現(xiàn)頂部跳轉(zhuǎn),實(shí)現(xiàn)的方式可能不同,但基本思路差不多。 更多細(xì)節(jié)網(wǎng)上搜索下可以找到,希望對(duì)你有幫助。