XX网站搭建全程
XX網(wǎng)站搭建全程
- 項(xiàng)目流程
- 環(huán)境與技術(shù)
- 1. 背景
- 2. 用戶特點(diǎn)
- 3. 角色定義:
- 4. 角色定義:系統(tǒng)主要用例
- 5. 功能描述
- 目錄結(jié)構(gòu)
- web配置
- 防止sql注入過(guò)濾器
- 登錄攔截器
- 路徑映射
本博客記錄了接單全程
項(xiàng)目流程
環(huán)境與技術(shù)
1. 背景
產(chǎn)品名稱(chēng):醫(yī)療科技公司網(wǎng)站
最終用戶:網(wǎng)站管理人員及網(wǎng)上用戶
2. 用戶特點(diǎn)
本網(wǎng)站的用戶都是網(wǎng)絡(luò)用戶,包括兩大類(lèi),一類(lèi)是訪問(wèn)者,另一類(lèi)是企業(yè)網(wǎng)站管理人員。
3. 角色定義:
角色是指與系統(tǒng)產(chǎn)生交互的外部用戶或者外部系統(tǒng)。
網(wǎng)站角色有兩類(lèi),訪問(wèn)者,企業(yè)管理員。外部系統(tǒng)為數(shù)據(jù)庫(kù)。
4. 角色定義:系統(tǒng)主要用例
此網(wǎng)站可以分為兩個(gè)主要組成部分,一個(gè)是客戶端子系統(tǒng),一個(gè)是管理端子系統(tǒng)。客戶端子系統(tǒng)功能主要是指網(wǎng)上訪問(wèn)者對(duì)于網(wǎng)站的訪問(wèn)與信息查詢(xún)等。管理端子系統(tǒng)的功能主要是對(duì)網(wǎng)站信息進(jìn)行管理。
5. 功能描述
1) 訪問(wèn)者:
僅能訪問(wèn)公司網(wǎng)站的公開(kāi)信息部分
2) 網(wǎng)站管理者
所有網(wǎng)站管理者均可以對(duì)訂單以及網(wǎng)站頁(yè)面信息進(jìn)行操作(為保信息安全,每一次操作都會(huì)產(chǎn)生對(duì)應(yīng)一條記錄保存操作者的信息)
對(duì)于所有管理者:
a) 聯(lián)系方式增刪改查
b) 網(wǎng)站主頁(yè)滾動(dòng)圖片管理
c) 注冊(cè)登錄
d) 公司介紹管理
e) 公司檔案信息管理
f) 公司榮譽(yù)資質(zhì)管理
g) 公司相冊(cè)管理
h) 訂單管理(即采購(gòu)清單管理)
i) 招商代理管理
j) 產(chǎn)品管理
i. 產(chǎn)品推薦設(shè)置
ii. 供應(yīng)產(chǎn)品設(shè)置
iii. 產(chǎn)品分類(lèi)管理
對(duì)于網(wǎng)站頂層管理者:
a) 人員管理(對(duì)已注冊(cè)的管理員或者未注冊(cè)的準(zhǔn)管理員進(jìn)行信息管理,防止數(shù)據(jù)庫(kù)人員信息只進(jìn)不出)
目錄結(jié)構(gòu)
web配置
防止sql注入過(guò)濾器
<filter><filter-name>SqlInjectFilter</filter-name><filter-class>com.jianxiao.util.SqlInjectFilter</filter-class> </filter><filter-mapping><filter-name>SqlInjectFilter</filter-name><url-pattern>/ *</url-pattern></filter-mapping> package com.jianxiao.util;import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration;public class SqlInjectFilter implements Filter {public void destroy() {}public void init(FilterConfig arg0) throws ServletException {}public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;// 獲得所有請(qǐng)求參數(shù)名Enumeration params = request.getParameterNames();String sql = "";while (params.hasMoreElements()) {// 得到參數(shù)名String name = params.nextElement().toString();// 得到參數(shù)對(duì)應(yīng)值String[] value = request.getParameterValues(name);for (int i = 0; i < value.length; i++) {sql = sql + value[i];}}if (sqlValidate(sql)) {// throw new IOException("您發(fā)送請(qǐng)求中的參數(shù)中含有非法字符");sql = "null";} else {chain.doFilter(request, response);}}/*** 參數(shù)校驗(yàn)* * @param str*/public static boolean sqlValidate(String str) {str = str.toLowerCase();// 統(tǒng)一轉(zhuǎn)為小寫(xiě)System.out.println("這是----->"+str);String badStr = "select.update.and.delete.insert.truncate.char.into.substr.ascii.declare.exec.count.master.into.drop.execute.table";String[] badStrs = badStr.split("\\.");for (int i = 0; i < badStrs.length; i++) {// System.out.println("這是badStr----->"+badStrs[i]);// 循環(huán)檢測(cè),判斷在請(qǐng)求參數(shù)當(dāng)中是否包含SQL關(guān)鍵字if (str.indexOf(badStrs[i]) >= 0) {System.out.println("被攔截!"+badStrs[i]);return true;}}return false;} }登錄攔截器
<filter><filter-name>MyInterceptor</filter-name><filter-class>com.jianxiao.interceptors.MyInterceptor</filter-class> </filter> <filter-mapping><filter-name>MyInterceptor</filter-name><url-pattern>/ *</url-pattern> </filter-mapping> package com.jianxiao.interceptors;import java.io.IOException;import java.text.SimpleDateFormat; import java.util.Date;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.jianxiao.dao.LogDao; import com.jianxiao.impl.LogDaoimpl; import com.jianxiao.po.User;public class MyInterceptor implements Filter {/*** 攔截器*/// 不攔截的請(qǐng)求private static final String[] IGNORE_URI = { "jumpIndex", "jumpProduct", "jumpCDetail", "jumpCertification","zhaoShanginfo", "shoppingList", "jumpToAlbum", "goToliuYan", "goToDangAn", "layui", "login", "loginJudge","quit","myJs","img","res", "jumpZhuCe", "goToZhuCe", "alupload", "upload", "zsupload", "ceupload", "getShoppingList" };private static final String[] SUPER_URI = { "memberList", "getMember", "memberUpdate", "memberAdd", "memberInsert","logList", "getLog"};private LogDao logDao = new LogDaoimpl();@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) servletRequest;HttpServletResponse resp = (HttpServletResponse) servletResponse;// 把用戶提交的數(shù)據(jù)的編碼統(tǒng)一為utf-8req.setCharacterEncoding("utf-8");// 把servlet打印輸入的內(nèi)容先設(shè)定為htmlresp.setContentType("text/html");// 設(shè)置輸出信息的編碼為utf-8resp.setCharacterEncoding("utf-8");String servletPath = req.getServletPath();String XRequested = req.getHeader("X-Requested-With");// PrintWriter out = resp.getWriter();System.out.println("----請(qǐng)求的路徑servletPath----------------" + servletPath);System.out.println("路徑-->" + req.getRequestURI() + "--servletPath--->" + servletPath + "----XRequested---->" + XRequested);// flag 為true的話,通過(guò),為false重新登錄boolean flag = false;HttpSession session = req.getSession();User user = (User) session.getAttribute("user");if (user != null) {// 進(jìn)入日志 操作人為userString logsql = "insert into log (action,time,person) values(?,?,?)";SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 設(shè)置日期格式String time = df.format(new Date());String person = user.getuName();String action = null;switch (servletPath) {case "/loginJudge":action = "登錄";System.out.println(action);break;case "/getMember":action = "瀏覽人員";break;case "/memberUpdate":action = "更新人員";break;case "/memberInsert":action = "添加人員";break;case "/categoryList":action = "瀏覽產(chǎn)品類(lèi)別";break;case "/categoryUpdate":action = "編輯產(chǎn)品類(lèi)別";break;case "/categoryDelete":action = "刪除產(chǎn)品類(lèi)別";break;case "/categoryInsert":action = "插入產(chǎn)品類(lèi)別";break;case "/productList":action = "瀏覽產(chǎn)品";break;case "/productInsert":action = "插入產(chǎn)品";break;case "/productUpdateSome":action = "更改產(chǎn)品開(kāi)關(guān)";break;case "/productUpdate":action = "編輯產(chǎn)品";break;case "/productDelete":action = "刪除產(chǎn)品";break;case "/getOrders":action = "瀏覽訂單";break;case "/orderInsert":action = "插入訂單";break;case "/orderEdit":action = "編輯訂單";break;case "/getShoppingList":action = "瀏覽采購(gòu)訂單";break;case "/editShoppingList":action = "編輯采購(gòu)訂單";break;case "/shoppingListInsert":action = "添加采購(gòu)訂單";break;case "/shoppingInsert":action = "批量導(dǎo)入采購(gòu)訂單";break;case "/certificationList":action = "瀏覽榮譽(yù)資質(zhì)";break;case "/certificationUpdate":action = "編輯榮譽(yù)資質(zhì)";break;case "/certificationDelete":action = "刪除榮譽(yù)資質(zhì)";break;case "/certificationInsert":action = "添加榮譽(yù)資質(zhì)";break;case "/jumpAlbumList":action = "瀏覽公司相冊(cè)";break;case "/albumInsert":action = "添加公司相冊(cè)圖片";break;case "/jumpAlbumEdit":action = "修改公司相冊(cè)";break;case "/albumDelete":action = "刪除公司相冊(cè)";break;case "/jumpZhaoShangList":action = "瀏覽招商列表";break;case "/zhaoShangInsert":action = "添加招商信息";break;case "/jumpZhaoShangEdit":action = "編輯招商信息";break;case "/zhaoShangDelete":action = "刪除招商信息";break;case "/contactUs":action = "瀏覽聯(lián)系方式";break;case "/contactUpdate":action = "修改聯(lián)系方式";break;case "/cDetailList":action = "瀏覽公司詳情";break;case "/cDetailUpdate":action = "編輯/刪除/添加公司詳情";break;case "/jumpCDetailAdd":action = "跳轉(zhuǎn)到添加公司詳情";break;case "/cFileList":action = "瀏覽公司檔案";break;case "/cFileUpdate":action = "編輯公司檔案";break;case "/jumpLiuYan":action = "瀏覽留言";break;case "/liuYanDelete":action = "刪除留言";break;}Object param[]=new Object[3];param[0]=action;param[1]=time;param[2]=person;System.out.println("操作--"+action);if(action!=null) {logDao.insert(param, logsql);}}if ("XMLHttpRequest".equals(XRequested) && user != null) {flag = true;chain.doFilter(servletRequest, servletResponse);} else {// 如果不是ajax請(qǐng)求,判斷是否需要攔截for (String s : IGNORE_URI) {if (servletPath.contains(s)) {// System.out.println("----請(qǐng)求的路徑servletPath----------------" + servletPath);chain.doFilter(servletRequest, servletResponse);flag = true;break;}}// 需要攔截if (!flag) {if (user != null) {if (user.getuGrade().equals("1")) {chain.doFilter(servletRequest, servletResponse);return;} else {// 判斷訪問(wèn)的路徑是否涉及到一級(jí)管理員,如果涉及到一級(jí)管理員彈窗提示越權(quán)!// 判斷當(dāng)前訪問(wèn)的路徑里邊是否有一級(jí)管理員的專(zhuān)屬路徑for (String s : SUPER_URI) {if (servletPath.contains(s)) {System.out.println("----請(qǐng)求的路徑servletPath----------------" + servletPath);req.getRequestDispatcher("WEB-INF/backstage/index2.jsp").forward(req, resp);break;} else {chain.doFilter(servletRequest, servletResponse);return;}}}}else {resp.sendRedirect("login");}}}}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}路徑映射
沒(méi)有采用注解的方式,采用的配置的方式,類(lèi)似于下面
<servlet><servlet-name>GoToFinalIndex</servlet-name><servlet-class>com.jianxiao.action.GoToFinalIndex</servlet-class> </servlet> <servlet-mapping><servlet-name>GoToFinalIndex</servlet-name><url-pattern>/goToFinalIndex</url-pattern> </servlet-mapping>具體項(xiàng)目代碼就不寫(xiě)了,很簡(jiǎn)單的增刪改查,由于沒(méi)有使用框架,開(kāi)發(fā)起來(lái)相當(dāng)費(fèi)勁,客戶要求的原生的servlet。。。寫(xiě)此博客只為了給大家像我一樣的小白提供些思路
下面展示下成果,大家見(jiàn)笑了
總結(jié)
- 上一篇: 基于java的校园兼职管理系统_基于JA
- 下一篇: (17)DialogBox和Dialog