网站建设一般用什么语言php网站开发有前景吗

news/2025/9/23 11:54:10/文章来源:
网站建设一般用什么语言,php网站开发有前景吗,手机上的网站是怎么做的,一流高职院校建设网站文章目录 一、为什么使用token口令二、登录注册功能2.1 登录表单提交后端代码#xff1a; 2.2 根据token获取完整用户信息代码实现#xff1a; 2.3 注册时用户名占用校验代码实现#xff1a; 2.4 注册表单提交代码实现#xff1a; 三、头条首页功能3.1 查询所有头条分类3.2… 文章目录 一、为什么使用token口令二、登录注册功能2.1 登录表单提交后端代码 2.2 根据token获取完整用户信息代码实现 2.3 注册时用户名占用校验代码实现 2.4 注册表单提交代码实现 三、头条首页功能3.1 查询所有头条分类3.2 分页带条件查询所有头条代码实现 3.3 查看头条详情代码实现 四、头条发布修改和删除4.1 登录校验代码实现 4.2 提交发布头条(新增代码实现 4.3 修改头条回显4.4 保存修改代码实现 4.5 删除头条 总结2.1 登录表单提交 一、为什么使用token口令 为什么使用 token 口令 而不使用 cookie和session cookie和session 对于高并发项目不合适 token: 二、登录注册功能 2.1 登录表单提交 需求描述: 输入 用户名 密码 验证登录根据输入的用户名 和 密码 提示不同的响应信息 URI user/login 请求方式 POST 请求参数: { username:dougwake, //用户名 userPwd:123456 //明文密码 } 响应示例: 登录成功 用户名输入有误 密码错误 后端代码 2.1.1 Controller 层 package com.doug.headline.controller;import com.doug.headline.common.Result; import com.doug.headline.common.ResultCodeEnum; import com.doug.headline.dao.NewsUserDao; import com.doug.headline.pojo.NewsUser; import com.doug.headline.service.NewsUserService; import com.doug.headline.service.impl.NewsUserServiceImpl; import com.doug.headline.util.JwtHelper; import com.doug.headline.util.MD5Util; import com.doug.headline.util.WebUtil; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse;import java.io.IOException; import java.util.HashMap; import java.util.Map;WebServlet(/user/*) public class NewsUserController extends BaseController {private NewsUserService newsUserService new NewsUserServiceImpl();/*** 接收前端请求参数 进行登录校验** param req* param resp* throws ServletException* throws IOException*/protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 接收前端传递过来的JSON串 即请求参数NewsUser newsUser WebUtil.readJson(req, NewsUser.class);// 调用业务层代码 查找用户名是否存在NewsUser loginNewsUser newsUserService.findByUsername(newsUser.getUsername());Result result null;if (null ! loginNewsUser) {// 用户名存在 - 进一步判断 密码是否正确先将明文密码转成MD5 再与已存密码对比if (loginNewsUser.getUserPwd().equals(MD5Util.encrypt(newsUser.getUserPwd()))) {// 响应结果 是键值对形式 所以用mapMapString, Object data new HashMap();// 创建token String token JwtHelper.createToken(loginNewsUser.getUid().longValue());data.put(token, token);result Result.ok(data);} else {// 密码有误result Result.build(null, ResultCodeEnum.PASSWORD_ERROR);}} else {// 查找为空 用户名不存在 返回自定义用户名错误业务码result Result.build(null, ResultCodeEnum.USERNAME_ERROR);}// 响应结果WebUtil.writeJson(resp, result);} }2.1.2 service public interface NewsUserService {/*** 根据用户名获得查询的用户信息* param username 要查找的用户名* return 如果找到返回NewsUser对象,找不到返回null*/NewsUser findByUsername(String username); }public class NewsUserServiceImpl implements NewsUserService {private NewsUserDao newsUserDao new NewsUserDaoImpl();Overridepublic NewsUser findByUsername(String username) {return newsUserDao.findByUsername(username);} }2.1.3 dao public interface NewsUserDao {/*** 根据用户名获得查询的用户信息* param username 要查找的用户名* return 如果找到返回NewsUser对象,找不到返回null*/NewsUser findByUsername(String username); }public class NewsUserDaoImpl extends BaseDao implements NewsUserDao {Overridepublic NewsUser findByUsername(String username) {String sql selectuid,username,user_pwd userPwd,nick_name nickNamefromnews_userwhereusername ?;;ListNewsUser newsUserList baseQuery(NewsUser.class, sql, username);// 如果找到,返回集合中的第一个数据(其实就一个)if(null ! newsUserList newsUserList.size() 0){return newsUserList.get(0);}return null;} }2.2 根据token获取完整用户信息 需求描述: 客户端发送请求,提交token请求头,后端根据token请求头获取登录用户的详细信息并响应给客户端进行存储 URI: user/getUserInfo 请求方式: GET 请求头 token: ... 响应示例 成功获取 获取失败 代码实现 2.2.1 Controller private NewsUserService newsUserService new NewsUserServiceImpl();/*** 接收token,根据token查询完整用户信息* param req* param resp* throws ServletException* throws IOException*/protected void getUserInfo(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String token req.getHeader(token);Result result Result.build(null, ResultCodeEnum.NOTLOGIN);// token 存在if(null ! token){// token 没有到期if(!JwtHelper.isExpiration(token)){Integer uid JwtHelper.getUserId(token).intValue();// 通过token的uid 找对象NewsUser newsUser newsUserService.findByUid(uid);newsUser.setUserPwd();HashMapString, Object data new HashMap();data.put(loginUser,newsUser);result Result.ok(data);}}WebUtil.writeJson(resp,result);}2.2.2 Service /*** 根据用户id查询用户信息* param uid 要查询的用户id* return 找到返回NewsUser对象,找不到返回null*/NewsUser findByUid(Integer uid);Overridepublic NewsUser findByUid(Integer uid) {return newsUserDao.finByUid(uid);}2.2.3 Dao NewsUser finByUid(Integer uid);Overridepublic NewsUser finByUid(Integer uid) {String sql selectuid,username,user_pwd userPwd,nick_name nickNamefromnews_userwhereuid ?;;ListNewsUser newsUserList baseQuery(NewsUser.class, sql, uid);// 如果找到,返回集合中的第一个数据(其实就一个)return null ! newsUserList newsUserList.size() 0 ? newsUserList.get(0):null;}2.3 注册时用户名占用校验 用户在注册时输入用户名时,立刻将用户名发送给后端,后端根据用户名查询用户名是否可用并做出响应 URI user/checkUserName 请求方式: POST 请求参数: usernameDougWake 响应示例: 用户名校验通过 用户名被占用 代码实现 /*** 注册时校验用户名是否占用* param req* param resp* throws ServletException* throws IOException*/protected void checkUserName(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username req.getParameter(username);NewsUser newsUser newsUserService.findByUsername(username);Result result null;if(null newsUser){result Result.ok(null);}else{result Result.build(null,ResultCodeEnum.USERNAME_USED);}WebUtil.writeJson(resp,result);}2.4 注册表单提交 客户端将新用户信息发送给服务端,服务端将新用户存入数据库,存入之前做用户名是否被占用校验,校验通过响应成功提示,否则响应失败提示 URI : user/regist 请求方式: POST 请求参数 : {username:GavinGroves,userPwd:0123456,nickName:加文 }响应示例: 注册成功 用户名占用第二次注册 代码实现 2.4.1 Controller /*** 用户注册* param req* param resp* throws ServletException* throws IOException*/protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {NewsUser newsUser WebUtil.readJson(req, NewsUser.class);NewsUser usedUser newsUserService.findByUsername(newsUser.getUsername());Result result null;if(null ! usedUser){result Result.build(null,ResultCodeEnum.USERNAME_USED);}else{newsUserService.registUser(newsUser);result Result.ok(null);}WebUtil.writeJson(resp,result);}2.4.2 Service /*** 注册用户信息,注册成功返回大于0的整数,失败返回0* param newsUser 要添加的新对象* return*/int registUser(NewsUser newsUser);Overridepublic int registUser(NewsUser newsUser) {// 密码明文转密文newsUser.setUserPwd(MD5Util.encrypt(newsUser.getUserPwd()));return newsUserDao.insertNewsUser(newsUser);}2.4.3 Dao /*** 将用户信息存入数据库* param newsUser 插入新的用户对象* return*/int insertNewsUser(NewsUser newsUser);public int insertNewsUser(NewsUser newsUser) {String sql insert into news_user values(DEFAULT,?,?,?);return baseUpdate(sql, newsUser.getUsername(), newsUser.getUserPwd(), newsUser.getNickName());}三、头条首页功能 3.1 查询所有头条分类 进入新闻首页,查询所有分类并动态展示新闻类别栏位 URI: portal/findAllTypes 请求方式 GET 响应示例: {code: 200,message: success,data: [{tid: 1,tname: 新闻},{tid: 2,tname: 体育},{tid: 3,tname: 娱乐},{tid: 4,tname: 科技},{tid: 5,tname: 其他}] }Controller package com.doug.headline.controller;import com.doug.headline.common.Result; import com.doug.headline.pojo.NewsType; import com.doug.headline.service.NewsTypeService; import com.doug.headline.service.impl.NewsTypeServiceImpl; import com.doug.headline.util.WebUtil; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse;import java.io.IOException; import java.util.List;/*** Author: Gavin* Date: 2024-02-02 17:10* Description: 门户 控制器 即 当用户没有登录时候 所看到的页面首页*/ WebServlet(/portal/*) public class PortalController extends BaseController {private NewsTypeService typeService new NewsTypeServiceImpl();/*** 查询所有头条类型 业务接口实现** param req* param resp* throws ServletException* throws IOException*/protected void findAllTypes(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ListNewsType newsTypeList typeService.findAllTypes();WebUtil.writeJson(resp,Result.ok(newsTypeList));} }service public interface NewsTypeService {/*** 查询全部新闻类型* return 新闻类型数据*/ListNewsType findAllTypes(); }public class NewsTypeServiceImpl implements NewsTypeService {private NewsTypeDao typeDao new NewsTypeDaoImpl();Overridepublic ListNewsType findAllTypes() {return typeDao.findAllTypes();} }dao public interface NewsTypeDao {/*** 查询全部新闻类型* return 新闻类型数据*/ListNewsType findAllTypes(); } public class NewsTypeDaoImpl extends BaseDao implements NewsTypeDao {Overridepublic ListNewsType findAllTypes() {String sql select tid,tname from news_type;return baseQuery(NewsType.class,sql);} }3.2 分页带条件查询所有头条 客户端向服务端发送查询关键字,新闻类别,页码数,页大小服务端根据条件搜索分页信息,返回含页码数,页大小,总页数,总记录数,当前页数据等信息,并根据时间降序,浏览量降序排序 uri: portal/findNewsPage 请求方式POST 请求参数: {keyWords:马斯克, // 搜索标题关键字type:0, // 新闻类型pageNum:1, // 页码数(当前页码)pageSize:10 // 页大小(一页10条显示数据 }响应示例: {code:200,message:successdata:{pageInfo:{pageData:[ // 本页的数据{hid:1, // 新闻id title:尚硅谷宣布 ... ..., // 新闻标题type:1, // 新闻所属类别编号pageViews:40, // 新闻浏览量pastHours:3 , // 发布时间已过小时数publisher:1 // 发布用户ID},{hid:1, // 新闻id title:尚硅谷宣布 ... ..., // 新闻标题type:1, // 新闻所属类别编号pageViews:40, // 新闻浏览量pastHours:3, // 发布时间已过小时数publisher:1 // 发布用户ID},{hid:1, // 新闻id title:尚硅谷宣布 ... ..., // 新闻标题type:1, // 新闻所属类别编号pageViews:40, // 新闻浏览量pastHours:3, // 发布时间已过小时数publisher:1 // 发布用户ID}],pageNum:1, //页码数pageSize:10, // 页大小totalPage:20, // 总页数totalSize:200 // 总记录数}} }代码实现 3.2.1 controller WebServlet(/portal/*) public class PortalController extends BaseController {private NewsTypeService typeService new NewsTypeServiceImpl();private NewsHeadlineService headlineService new NewsHeadlineServiceImpl();/*** 分页带条件查询新闻* param req* param resp* throws ServletException* throws IOException*/protected void findNewsPage(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HeadlineQueryVo headlineQueryVo WebUtil.readJson(req, HeadlineQueryVo.class);//查询分页五项数据MapString,Object pageInfo headlineService.findPage(headlineQueryVo);//将分页五项数据放入MapString, Object pageInfoMap new HashMap();pageInfoMap.put(pageInfo,pageInfo);WebUtil.writeJson(resp,Result.ok(pageInfoMap));}3.2.2 service public interface NewsHeadlineService {/*** 分页查询头条新闻方法* param headlineQueryVo* return*/MapString, Object findPage(HeadlineQueryVo headlineQueryVo); } public class NewsHeadlineServiceImpl implements NewsHeadlineService {private NewsHeadLineDao headLineDao new NewsHeadlineDaoImpl();Overridepublic MapString, Object findPage(HeadlineQueryVo headlineQueryVo) {// 准备一个map用于装分页的五项数据MapString, Object pageInfo new HashMap();// 分页查询本页数据新闻ListHeadlinePageVo pageData headLineDao.findPageList(headlineQueryVo);// 当前 页码数int pageNum headlineQueryVo.getPageNum();// 页大小int pageSize headlineQueryVo.getPageSize();// 总记录数int totalSize headLineDao.findPageCount(headlineQueryVo);// 总页数(多出一条数据的情况 1页上去int totalPage totalSize % pageSize 0 ? totalSize / pageSize : totalSize / pageSize 1;pageInfo.put(pageData,pageData);pageInfo.put(pageNum,pageNum);pageInfo.put(pageSize,pageSize);pageInfo.put(totalPage,totalPage);pageInfo.put(totalSize,totalSize);return pageInfo;} }3.2.3 dao public interface NewsHeadLineDao {/*** 根据查询条件,查询当前页数据* param headlineQueryVo* return*/ListHeadlinePageVo findPageList(HeadlineQueryVo headlineQueryVo);/*** 根据查询条件,查询满足条件的记录数* param headlineQueryVo* return*/int findPageCount(HeadlineQueryVo headlineQueryVo);}package com.doug.headline.dao.impl;import com.doug.headline.dao.BaseDao; import com.doug.headline.dao.NewsHeadLineDao; import com.doug.headline.pojo.vo.HeadlinePageVo; import com.doug.headline.pojo.vo.HeadlineQueryVo;import java.util.ArrayList; import java.util.LinkedList; import java.util.List;public class NewsHeadlineDaoImpl extends BaseDao implements NewsHeadLineDao {Overridepublic ListHeadlinePageVo findPageList(HeadlineQueryVo headlineQueryVo) {List params new ArrayList();String sql selecthid,title,type,page_views pageViews,TIMESTAMPDIFF(HOUR,create_time,now()) pastHours,publisherfromnews_headlinewhereis_deleted 0;if(headlineQueryVo.getType() ! 0){sql sql.concat( and type ? );params.add(headlineQueryVo.getType());}if(headlineQueryVo.getKeyWords() ! null !headlineQueryVo.getKeyWords().equals()){sql sql.concat( and title like ? );params.add(%headlineQueryVo.getKeyWords()%);}// 按时间升序 浏览量降序sql sql.concat( order by pastHours ASC , page_views DESC );// 分页显示sql sql.concat( limit ?,? );params.add((headlineQueryVo.getPageNum()-1)*headlineQueryVo.getPageSize());params.add(headlineQueryVo.getPageSize());return baseQuery(HeadlinePageVo.class,sql,params.toArray());}Overridepublic int findPageCount(HeadlineQueryVo headlineQueryVo) {// 拼接动态 SQL,拼接参数List args new LinkedList();String sql select count(1) from news_headline where is_deleted 0;StringBuilder sqlBuffer new StringBuilder(sql);String keyWords headlineQueryVo.getKeyWords();//判断并动态拼接条件if(null ! keyWords keyWords.length() 0){sqlBuffer.append( and title like ? );args.add(% keyWords %);}// 判断并动态拼接条件Integer type headlineQueryVo.getType();if(null ! type type!0){sqlBuffer.append( and type ? );args.add(type);}// 参数转数组Object[] argsArr args.toArray();System.out.println(sqlBuffer.toString());Long totalSize baseQueryObject(Long.class, sqlBuffer.toString(), argsArr);return totalSize.intValue();} }3.3 查看头条详情 用户点击查看全文时,向服务端发送新闻id后端根据新闻id查询完整新闻文章信息并返回后端要同时让新闻的浏览量1 URI : portal/showHeadlineDetail 请求方式 POST 请求参数hid 1 响应示例 {code:200,message:success,data:{headline:{hid:1, // 新闻id title:马斯克宣布 ... ..., // 新闻标题article:... ... // 新闻正文type:1, // 新闻所属类别编号typeName:科技, // 新闻所属类别pageViews:40, // 新闻浏览量pastHours:3 , // 发布时间已过小时数publisher:1 , // 发布用户IDauthor:张三 // 新闻作者}} }代码实现 3.3.1 controller /*** 查询单个新闻详情* param req* param resp* throws ServletException* throws IOException*/protected void showHeadlineDetail(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取要查询的详情新闻idInteger hid Integer.valueOf(req.getParameter(hid));// 封装data内容HashMapString, Object headlineInfo new HashMap();// 查询新闻详情的voHeadlineDetailVo headlineDetailVo headlineService.findHeadlineByHid(hid);Result result null;if(null ! headlineDetailVo){headlineInfo.put(headline,headlineDetailVo);result Result.ok(headlineInfo);}WebUtil.writeJson(resp,result);}3.3.2 service /*** 根据hid 查看单个新闻详情* param hid* return*/HeadlineDetailVo findHeadlineByHid(Integer hid);Overridepublic HeadlineDetailVo findHeadlineByHid(Integer hid) {// 修改新闻信息浏览量1headLineDao.increasePageViews(hid);// 查询新闻详情return headLineDao.findHeadlineInfoByHid(hid);}3.3.3 dao /*** 根据 hid 查看详细新闻* param hid 新闻对应ID* return*/HeadlineDetailVo findHeadlineInfoByHid(Integer hid);/*** 新闻浏览量1* param hid* return*/int increasePageViews(Integer hid);Overridepublic HeadlineDetailVo findHeadlineInfoByHid(Integer hid) {String sql selecth.hid,h.title,h.article,h.type,h.page_views as pageViews,TIMESTAMPDIFF(HOUR,create_time,now()) pastHours,h.publisher,t.tname as typeName,u.nick_name as authorfromnews_headline hleft joinnews_type tonh.type t.tidleft joinnews_user uonh.publisher u.uidwhereh.hid ?;ListHeadlineDetailVo headlineDetailVoList baseQuery(HeadlineDetailVo.class, sql, hid);if (null ! headlineDetailVoList headlineDetailVoList.size() 0) {return headlineDetailVoList.get(0);}return null;}Overridepublic int increasePageViews(Integer hid) {String sql update news_headline set page_views page_views 1 where hid ?;return baseUpdate(sql, hid);}四、头条发布修改和删除 4.1 登录校验 客户端在进入发布页前、发布新闻前、进入修改页前、修改前、删除新闻前先向服务端发送请求携带token请求头后端接收token请求头后,校验用户登录是否过期并做响应前端根据响应信息提示用户进入登录页还是进入正常业务页面 URI : user/checkLogin 请求 GET 请求头 token: … … 响应 登录未过期 {code:200,message:success,data:{} }登录已过期 {code:504,message:loginExpired,data:{} }代码实现 4.1.1 controller /*** 前端自行校验token登录是否过期* param req* param resp* throws ServletException* throws IOException*/protected void checkLogin(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String token req.getHeader(token);Result result Result.build(null, ResultCodeEnum.NOTLOGIN);//token 不等于空 且 没有过期if(null ! token){if(!JwtHelper.isExpiration(token)){result Result.ok(null);}}WebUtil.writeJson(resp,result);}4.1.2 登录过滤器 /*** Author: Gavin* Date: 2024-02-07 21:58* Description: 过滤器自动校验请求是否过期(过滤所有/headline/*下的方法*/ WebFilter(/headline/*) public class LoginFilter implements Filter {Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest)servletRequest;String token request.getHeader(token);//boolean flag false;// token 不为空 且 没有过期//if(null ! token){// boolean expiration JwtHelper.isExpiration(token);// if(!expiration){// flag true;// }//}boolean flag null ! token (!JwtHelper.isExpiration(token));if(flag){//放行 请求响应filterChain.doFilter(servletRequest,servletResponse);}else{WebUtil.writeJson((HttpServletResponse) servletResponse, Result.build(null, ResultCodeEnum.NOTLOGIN));}} }4.1.3 web.xml中配置登录校验过滤器 !--登录校验过滤器--filterfilter-nameloginFilter/filter-namefilter-classcom.doug.headline.filters.LoginFilter/filter-class/filterfilter-mappingfilter-nameloginFilter/filter-nameurl-pattern/headline/*/url-pattern/filter-mapping4.2 提交发布头条(新增 用户在客户端输入发布的新闻信息完毕后发布前先请求后端的登录校验接口验证登录登录通过则提交新闻信息后端将新闻信息存入数据库 URI : headline/publish 请求方式 : POST 请求头 token: … … 请求参数 {title:道格维克 ... ..., // 文章标题article:... ..., // 文章内容type:1 // 文章类别 }响应示例 响应发布 {code:200,message:success,data:{} }失去登录状态发布失败 {code:504,message:loginExpired,data:{} }代码实现 4.2.1 controller package com.doug.headline.controller;import com.doug.headline.common.Result; import com.doug.headline.pojo.NewsHeadline; import com.doug.headline.service.NewsHeadlineService; import com.doug.headline.service.impl.NewsHeadlineServiceImpl; import com.doug.headline.util.JwtHelper; import com.doug.headline.util.WebUtil; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;WebServlet(/headline/*) public class NewsHeadlineController extends BaseController {private NewsHeadlineService headlineService new NewsHeadlineServiceImpl();/*** 发布新闻** param req* param resp* throws ServletException* throws IOException*/protected void publish(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 读取新闻信息NewsHeadline newsHeadline WebUtil.readJson(req, NewsHeadline.class);// 通过token获取发布者IDString token req.getHeader(token);Long userId JwtHelper.getUserId(token);newsHeadline.setPublisher(userId.intValue());// 将新闻存入数据库headlineService.addNewsHeadline(newsHeadline);WebUtil.writeJson(resp, Result.ok(null));} }4.2.2 seriver /*** 新增头条新闻* param newsHeadline* return*/int addNewsHeadline(NewsHeadline newsHeadline);/*** 发布新闻** param req* param resp* throws ServletException* throws IOException*/protected void publish(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 读取新闻信息NewsHeadline newsHeadline WebUtil.readJson(req, NewsHeadline.class);// 通过token获取发布者IDString token req.getHeader(token);Long userId JwtHelper.getUserId(token);newsHeadline.setPublisher(userId.intValue());// 将新闻存入数据库headlineService.addNewsHeadline(newsHeadline);WebUtil.writeJson(resp, Result.ok(null));}4.2.3 dao /*** 增加新闻头条* param newsHeadline* return*/int addNewsHeadline(NewsHeadline newsHeadline);Overridepublic int addNewsHeadline(NewsHeadline newsHeadline) {String sql insert intonews_headlinevalues(DEFAULT,?,?,?,?,0,NOW(),NOW(),0) ;return baseUpdate(sql,newsHeadline.getTitle(),newsHeadline.getArticle(),newsHeadline.getType(),newsHeadline.getPublisher());}添加成功 4.3 修改头条回显 前端先调用登录校验接口,校验登录是否过期登录校验通过后 ,则根据新闻id查询新闻的完整信息并响应给前端 URI : headline/findHeadlineByHid 请求方式POST 请求参数hid1 响应实例 查询成功 {code:200,message:success,data:{headline:{hid:1,title:马斯克宣布,article:... ... ,type:2}} }4.3.1 controller /*** 修改新闻信息** param req* param resp* throws ServletException* throws IOException*/protected void findHeadlineByHid(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Integer hid Integer.valueOf(req.getParameter(hid));HeadlineDetailVo headlineByHid headlineService.findHeadlineByHid(hid);HashMapString, Object headlineMap new HashMap();Result result null;if(null ! headlineByHid){headlineMap.put(headline,headlineByHid);result Result.ok(headlineMap);}WebUtil.writeJson(resp,result);}4.4 保存修改 客户端将新闻信息修改后,提交前先请求登录校验接口校验登录状态登录校验通过则提交修改后的新闻信息,后端接收并更新进入数据库 URI:headline/update 请求方式post 请求参数 {hid:1,title:道格维克 ... ...,article:... ...,type:2 }响应实例 修改成功 {code:200,message:success,data:{} }修改失败 {code:504,message:loginExpired,data:{} }代码实现 4.4.1 controller /*** 修改新闻信息* param req* param resp* throws ServletException* throws IOException*/protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {NewsHeadline newsHeadline WebUtil.readJson(req, NewsHeadline.class);headlineService.updateHeadline(newsHeadline);WebUtil.writeJson(resp,Result.ok(null));}4.4.2 service /*** 修改新闻信息* param newsHeadline* return*/int updateHeadline(NewsHeadline newsHeadline);Overridepublic int updateHeadline(NewsHeadline newsHeadline) {return headLineDao.updateHeadlineInfo(newsHeadline);}4.4.3 dao /*** 修改新闻信息* param newsHeadline* return*/int updateHeadlineInfo(NewsHeadline newsHeadline);Overridepublic int updateHeadlineInfo(NewsHeadline newsHeadline) {String sql update news_headline set title ?,article ?,type ? ,update_time now() where hid ?;return baseUpdate(sql, newsHeadline.getTitle(),newsHeadline.getArticle(),newsHeadline.getType(),newsHeadline.getHid());}4.5 删除头条 将要删除的新闻id发送给服务端服务端校验登录是否过期,未过期则直接删除,过期则响应登录过期信息 URI : headline/removeByHid 请求方式POST 请求参数hid1 响应实例 删除成功 {code:200,message:success,data:{} }删除失败 {code:504,message:loginExpired,data:{}}controller: /*** 删除对应Hid的新闻* param req* param resp* throws ServletException* throws IOException*/protected void removeByHid(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Integer hid Integer.parseInt(req.getParameter(hid));headlineService.removeByHid(hid);WebUtil.writeJson(resp,Result.ok(null));}service /*** 删除单个新闻* param hid 新闻hid* return*/int removeByHid(Integer hid);Overridepublic int removeByHid(Integer hid) {return headLineDao.removeByHid(hid);}dao /*** 删除对应hid的新闻* param hid* return*/int removeByHid(Integer hid);Overridepublic int removeByHid(Integer hid) {String sql update news_headline set is_deleted 1, update_time NOW() where hid ?;return baseUpdate(sql, hid);}总结 2.1 登录表单提交

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis-list类型基本命令

redis-list类型基本命令redis存储数据的value可以是一个String类型的列表。列表中的数据会按照插入顺序进行排序,不过,该列表的底层实际上是一个没有 头节点的双向链表,所以对列表表头和表尾操作性能较高,但是对中…

游戏性能优化与逆向分析技术

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、前言一直以来性能优化的工作,非常依赖于工具,从结果反推过程,采集产品…

vue2 项目实例 动态路由菜单(四)

vue2 项目实例 动态路由菜单(四)动态路由涉及到 router、 store、 beforeEach、 permission权限1、触发登录事件Login.vue 监听路由变化,下次登录重定向上次页面watch: {$route: {handler: function(route) {this.r…

政务网站建设的三大核心功能是什么建设自己网站软件下载

一、简述静态网页和动态网页的区别。 静态网页: 静态网页是指运行于客户端的程序、网页、组件、纯粹HTML格式的网页; 如果有涉及网页内容的修改,就要修改源文件,重新上传到服务器。而且当网站信息量很大的时候,网页制作和维护都非常困…

重庆百度推广seo长春seo

很多同学不止一次和我反馈,我们的系统很混乱,主要表现在:应用的层次结构混乱:不知道应用应该如何分层、应该包含哪些组件、组件之间的关系是什么;缺少规范的指导和约束:新加一段业务逻辑不知道放在什么地方…

对于网站建设提出建议网站做APP麻烦吗

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码…

网站后台链接怎么做平面设计手绘网站

原标题:个税起征点上调至5000,用Python算一算少交多少税今天出了一个重磅消息,个税起征点从3500上调到5000啦! 广大IT农民工的生活压力又减轻了一些,有没有 晚上加一个鸡腿,要不要~ 开心归开心,…

气血不足做网站网站收索流量

不能过帐凭证:本币计的税基为0 消息编号 FF759 诊断 尝试步成本币中计税基数为零的凭证,尽管外币中税金额和计税基数不为零, 系统响应 拒绝凭证输入。 步骤 再次输入凭证。 这个错误的原因,是因为四舍五入导致的税为零。根据百度的反馈&…

网站开发公司名单网站托管团队

1 需求 我们需要实现携带时间头的一系列照片如下显示,现在我们拿到了图片集合,肯定需要对图片根据实现进行分组显示 date picture picture picture picture picture picture picture picture picturedate picture picture picture picture picture 2 代码实现 fun getImag…

网站建设需要哪些企业资料石家庄校园兼职网站建设

8月26日,2023未来产业发展大会在杭州未来科技城国际会议中心开幕!会上,发布了未来科技城培育发展未来产业行动计划,启动了未来产业发展共同体,进行了未来产业公共服务平台签约仪式。未来科技城与加速科技签约共建集成电…

复古风格网站git做网站根目录

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

app 微信 网站三合一企业宣传册模版

花了几天的时间,整出个 “hello spring boot”,并且把它从 2 搞到了 3。 纸上得来终觉浅!自己实践出真知!现在再回头来囫囵一遍,加深下印象。回想下从前自觉某一编程语言大都如此,先找到简单示例照着画一遍…

使用 feign 调用时对微服务实例进行选择

使用 feign 调用时对微服务实例进行选择1.概述 在 微服务 调用的时候,我们会需要将微服务实例进行分组的情况,我们有订单和库存服务,订单服务 和库存服务 分别 为 A,B两组服务实例。 A 服务分组服务A用户,B服务分组…

EI目录今年第3次更新!55本中国期刊被收录,附完整版下载

8月,EI Compendex数据库发布了最新版收录期刊目录。 目录实际更新时间为2025年7月24日 2025年截止8月份EI数据库已更新3次,更新时间分别为2025年1月、2025年4月和2025年7月。 本次目录共收录期刊5702本,其中包含Jou…

友点企业网站管理系统3d全屋定制设计软件

1.没镜像就拉取镜像 dockerhub中查看版本 官网 docker pull zookeeper:3.4.14 不加版本号也行,默认拉取最新版 创建并启动容器 docker run -p 2181:2181 --privilegedtrue --name zookeeper01 -d zookeeper –privilegedtrue 容器内用户开启root权限 docker ps…

程序员的未来:从技术岗位到全栈思维的进化之路 - 实践

程序员的未来:从技术岗位到全栈思维的进化之路 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

envoy和nginx的区别

Envoy 和 Nginx 都是高性能的网络代理和反向代理服务器,广泛应用于现代分布式系统中。尽管它们在某些场景下功能重叠(如负载均衡、反向代理),但在设计目标、架构、功能特性和适用场景上存在显著差异。 以下是 Envo…

基于自适应差分进化算法的MATLAB实现

基于自适应差分进化算法(Adaptive Differential Evolution, ADE)的MATLAB实现一、算法原理 自适应差分进化算法通过动态调整缩放因子(F)和交叉概率(CR)提升全局搜索能力。核心改进包括:参数自适应:根据种群适应…

临沂专业网站建设公司哪家好做网站菜单背景图片

问你一句:「你知道 HTTP/1.1 该如何优化吗?」 我们可以从下面这三种优化思路来优化 HTTP/1.1 协议: 尽量避免发送 HTTP 请求在需要发送 HTTP 请求时,考虑如何减少请求次数减少服务器的 HTTP 响应的数据大小 下面,就针对这三种思路具体看看有哪些优化…

什么网站做推广效果好移动端网站没有icp

当遇到错误提示“vcruntime140.dll已加载,但找不到入口点”时,很多人可能会感到困惑,不知道如何去处理这个问题。不过没有必要紧张,在这里我会为大家详细解释 vcruntime140.dll 文件是什么,并指导大家如何高效地解决 v…