当前位置: 首页 > news >正文

最新传奇手游开服网站网络工具

最新传奇手游开服网站,网络工具,抖音优化推广,WordPress漏洞报告目录 一、前期准备 1.1 编写页面跳转控制类 二、实现CRUD 2.1 相关依赖 2.2 配置文件 2.3 逆向生成 2.4 后台代码完善 2.4.1 编写切面类 2.4.2 编写工具类 2.4.3 编写biz层 2.4.4 配置mapper.xml 2.4.5 编写相应接口类(MusicMapper) 2.4.6 处…

目录

一、前期准备

1.1 编写页面跳转控制类

二、实现CRUD

2.1 相关依赖

2.2 配置文件

2.3 逆向生成

2.4 后台代码完善

2.4.1 编写切面类

2.4.2 编写工具类

2.4.3 编写biz层

2.4.4 配置mapper.xml

2.4.5 编写相应接口类(MusicMapper)

2.4.6 处理controller层发送到biz的请求(配置spring-mvc.xml)

2.4.7 编写tag助手标签类

2.4.8 引入tld标签库

2.4.9 编写controller类

2.5 前台代码

2.5.1 主页面编写

2.5.2 修改界面编写

三、展示效果

四、实战SpringMVC增删改查的收获


一、前期准备

1.1 编写页面跳转控制类

通过@PathVariable方式实现公共页面跳转。代码如下:

package com.Kissship.web;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;/*** @author Kissship* @site www.Kissship.com* @company xxx公司* @create 2023-09-07-15:01** 用来处理页面跳转*/
@Controller
public class PageController {//<a href="order/preSave">新增</a>   新增界面@RequestMapping("/page/{page}")public String toPage(@PathVariable("page") String page){return page;}@RequestMapping("/page/{dir}{page}")public String toDirPage(@PathVariable("dir") String dir,@PathVariable("page") String page){return dir + "/" + page;}}

二、实现CRUD

2.1 相关依赖

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>kissshipssm</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>kissshipssm Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version><!--添加jar包依赖--><!--1.spring 5.0.2.RELEASE相关--><spring.version>5.0.2.RELEASE</spring.version><!--2.mybatis相关--><mybatis.version>3.4.5</mybatis.version><!--mysql--><mysql.version>5.1.44</mysql.version><!--pagehelper分页jar依赖--><pagehelper.version>5.1.2</pagehelper.version><!--mybatis与spring集成jar依赖--><mybatis.spring.version>1.3.1</mybatis.spring.version><!--3.dbcp2连接池相关 druid--><commons.dbcp2.version>2.1.1</commons.dbcp2.version><commons.pool2.version>2.4.3</commons.pool2.version><!--4.log日志相关--><log4j2.version>2.9.1</log4j2.version><log4j2.disruptor.version>3.2.0</log4j2.disruptor.version><slf4j.version>1.7.13</slf4j.version><!--5.其他--><junit.version>4.12</junit.version><servlet.version>4.0.0</servlet.version><lombok.version>1.18.2</lombok.version><mybatis.ehcache.version>1.1.0</mybatis.ehcache.version><ehcache.version>2.10.0</ehcache.version><redis.version>2.9.0</redis.version><redis.spring.version>1.7.1.RELEASE</redis.spring.version><jackson.version>2.9.3</jackson.version><jstl.version>1.2</jstl.version><standard.version>1.1.2</standard.version><tomcat-jsp-api.version>8.0.47</tomcat-jsp-api.version><commons-fileupload.version>1.3.3</commons-fileupload.version><hibernate-validator.version>5.0.2.Final</hibernate-validator.version><shiro.version>1.3.2</shiro.version></properties><dependencies><!--1.spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!--2.mybatis相关--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--pagehelper分页插件jar包依赖--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>${pagehelper.version}</version></dependency><!--mybatis与spring集成jar包依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><!--mybatis与ehcache整合--><dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-ehcache</artifactId><version>${mybatis.ehcache.version}</version></dependency><!--ehcache依赖--><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>${ehcache.version}</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>${redis.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>${redis.spring.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency><!--3.dbcp2连接池相关--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>${commons.dbcp2.version}</version><exclusions><exclusion><artifactId>commons-pool2</artifactId><groupId>org.apache.commons</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>${commons.pool2.version}</version></dependency><!--springmvc依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!--4.log日志相关依赖--><!-- log4j2日志相关依赖 --><!-- log配置:Log4j2 + Slf4j --><!-- slf4j核心包--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version><scope>runtime</scope></dependency><!--核心log4j2jar包--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j2.version}</version></dependency><!--用于与slf4j保持桥接--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version></dependency><!--web工程需要包含log4j-web,非web工程不需要--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j2.version}</version><scope>runtime</scope></dependency><!--需要使用log4j2的AsyncLogger需要包含disruptor--><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>${log4j2.disruptor.version}</version></dependency><!--5.其他--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version><scope>provided</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>${standard.version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jsp-api</artifactId><version>${tomcat-jsp-api.version}</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>${commons-fileupload.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>${hibernate-validator.version}</version></dependency><!--shiro依赖--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>${shiro.version}</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId><version>${shiro.version}</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>${shiro.version}</version></dependency><dependency><groupId>org.example</groupId><artifactId>Spring-mybatis</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency></dependencies><build><finalName>kissshipssm</finalName><resources><!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题--><resource><directory>src/main/resources</directory><includes><include>*.properties</include><include>*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven.compiler.plugin.version}</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><dependencies><!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies><configuration><overwrite>true</overwrite></configuration></plugin><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></build></project>

2.2 配置文件

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><display-name>Archetype Created Web Application</display-name><!-- Spring和web项目集成start --><!-- spring上下文配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-context.xml</param-value></context-param><!-- 读取Spring上下文的监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- Spring和web项目集成end --><!-- 中文乱码处理 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- Spring MVC servlet --><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><!--web.xml 3.0的新特性,是否支持异步--><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

2.3 逆向生成

生成后的对应目标目录如下:

在生成后的HBookMapper接口中,需要加上@Repository给Spring进行托管。

2.4 后台代码完善

2.4.1 编写切面类

PagerAspect:

package com.Kissship.aspect;import com.Kissship.utils.PageBean;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;import java.util.List;@Aspect
@Component
public class PagerAspect {@Around("execution(* *..*Biz.*Pager(..))")public Object invoke(ProceedingJoinPoint args) throws Throwable {PageBean pageBean=null;Object[] ags = args.getArgs();for (Object param:ags){
if (param instanceof PageBean){pageBean=(PageBean)param;break;
}}if (pageBean!=null&& pageBean.isPagination()){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());}Object lst = args.proceed();if(pageBean!=null && pageBean.isPagination()){PageInfo pageInfo = new PageInfo((List) lst);pageBean.setTotal((int) pageInfo.getTotal());}return lst;}
}

2.4.2 编写工具类

PageBean:

package com.Kissship.utils;import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;/*** @author Kissship* @site www.Kissship.com* @company xxx公司* @create 2023-08-15-15:42*/
public class PageBean implements Serializable {private static final long serialVersionUID = 2422581023658455731L;//页码private int page=1;//每页显示记录数private int rows=10;//总记录数private int total=0;//是否分页private boolean isPagination=true;//上一次的请求路径private String url;//获取所有的请求参数private Map<String,String[]> map;public PageBean() {super();}//设置请求参数public void setRequest(HttpServletRequest req) {String page=req.getParameter("page");String rows=req.getParameter("rows");String pagination=req.getParameter("pagination");this.setPage(page);this.setRows(rows);this.setPagination(pagination);this.url=req.getContextPath()+req.getServletPath();this.map=req.getParameterMap();}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Map<String, String[]> getMap() {return map;}public void setMap(Map<String, String[]> map) {this.map = map;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public void setPage(String page) {if(null!=page&&!"".equals(page.trim()))this.page = Integer.parseInt(page);}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}public void setRows(String rows) {if(null!=rows&&!"".equals(rows.trim()))this.rows = Integer.parseInt(rows);}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public void setTotal(String total) {this.total = Integer.parseInt(total);}public boolean isPagination() {return isPagination;}public void setPagination(boolean isPagination) {this.isPagination = isPagination;}public void setPagination(String isPagination) {if(null!=isPagination&&!"".equals(isPagination.trim()))this.isPagination = Boolean.parseBoolean(isPagination);}/*** 获取分页起始标记位置* @return*/public int getStartIndex() {//(当前页码-1)*显示记录数return (this.getPage()-1)*this.rows;}/*** 末页* @return*/public int getMaxPage() {int totalpage=this.total/this.rows;if(this.total%this.rows!=0)totalpage++;return totalpage;}/*** 下一页* @return*/public int getNextPage() {int nextPage=this.page+1;if(this.page>=this.getMaxPage())nextPage=this.getMaxPage();return nextPage;}/*** 上一页* @return*/public int getPreivousPage() {int previousPage=this.page-1;if(previousPage<1)previousPage=1;return previousPage;}@Overridepublic String toString() {return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination+ "]";}
}

2.4.3 编写biz层

package com.Kissship.biz;import com.Kissship.model.Music;
import com.Kissship.utils.PageBean;import java.util.List;public interface MusicBiz {int deleteByPrimaryKey(Integer mid);int insert(Music record);int insertSelective(Music record);Music selectByPrimaryKey(Integer mid);int updateByPrimaryKeySelective(Music record);int updateByPrimaryKey(Music record);List<Music> listPager(Music music, PageBean pageBean);
}

注:

这个方法为查询返回列表方法,包含分页,因为切面类对其进行切面,所以在命名时,必须以Pager结尾。

2.4.4 配置mapper.xml

<select id="selectBycon" resultType="com.Kissship.model.Music" parameterType="com.Kissship.model.Music" >select<include refid="Base_Column_List" />from jay_music<where><if test="mname != null">and mname like concat('%',#{mname},'%')</if></where></select>

2.4.5 编写相应接口类(MusicMapper)

在自动生成的代码下添加以下:

List<Music> selectBycon(Music music);

2.4.6 处理controller层发送到biz的请求(配置spring-mvc.xml)

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--1) 扫描com.Kissship及子子孙孙包下的控制器(扫描范围过大,耗时)--><context:component-scan base-package="com.Kissship"/><!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --><mvc:annotation-driven /><!--3) 创建ViewResolver视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar --><property name="viewClass"value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean><!--4) 单独处理图片、样式、js等资源 --><!-- <mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/js/" mapping="/js/**"/><mvc:resources location="WEB-INF/images/" mapping="/images/**"/>--><mvc:resources location="/static/" mapping="/static/**"/><!-- 处理controller层发送请求到biz,会经过切面的拦截处理--><aop:aspectj-autoproxy/>
</beans>

2.4.7 编写tag助手标签类

PageTag:

package com.Kissship.tag;import com.Kissship.utils.PageBean;import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;public class PageTag extends BodyTagSupport{private PageBean pageBean;// 包含了所有分页相关的元素public PageBean getPageBean() {return pageBean;}public void setPageBean(PageBean pageBean) {this.pageBean = pageBean;}@Overridepublic int doStartTag() throws JspException {
//		没有标签体,要输出内容JspWriter out = pageContext.getOut();try {out.print(toHTML());} catch (IOException e) {e.printStackTrace();}return super.doStartTag();}private String toHTML() {StringBuffer sb = new StringBuffer();
//		隐藏的form表单---这个就是上一次请求下次重新发的奥义所在
//		上一次请求的URLsb.append("<form action='"+pageBean.getUrl()+"' id='pageBeanForm' method='post'>");sb.append("	<input type='hidden' name='page'>");
//		上一次请求的参数Map<String, String[]> paramMap = pageBean.getMap();if(paramMap != null && paramMap.size() > 0) {Set<Entry<String, String[]>> entrySet = paramMap.entrySet();for (Entry<String, String[]> entry : entrySet) {
//				参数名String key = entry.getKey();
//				参数值for (String value : entry.getValue()) {
//					上一次请求的参数,再一次组装成了新的Form表单
//					注意:page参数每次都会提交,我们需要避免if(!"page".equals(key)) {sb.append("	<input type='hidden' name='"+key+"' value='"+value+"' >");}}}}sb.append("</form>");//		分页条sb.append("<ul class='pagination justify-content-center'>");sb.append("	<li class='page-item "+(pageBean.getPage() == 1 ? "disabled" : "")+"'><a class='page-link'");sb.append("	href='javascript:gotoPage(1)'>首页</a></li>");sb.append("	<li class='page-item "+(pageBean.getPage() == 1 ? "disabled" : "")+"'><a class='page-link'");sb.append("	href='javascript:gotoPage("+pageBean.getPreivousPage()+")'>&lt;</a></li>");// less than 小于号
//		sb.append("	<li class='page-item'><a class='page-link' href='#'>1</a></li>");
//		sb.append("	<li class='page-item'><a class='page-link' href='#'>2</a></li>");sb.append("	<li class='page-item active'><a class='page-link' href='#'>"+pageBean.getPage()+"</a></li>");sb.append("	<li class='page-item "+(pageBean.getPage() == pageBean.getMaxPage() ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage("+pageBean.getNextPage()+")'>&gt;</a></li>");sb.append("	<li class='page-item "+(pageBean.getPage() == pageBean.getMaxPage() ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页</a></li>");sb.append("	<li class='page-item go-input'><b>到第</b><input class='page-link'");sb.append("	type='text' id='skipPage' name='' /><b>页</b></li>");sb.append("	<li class='page-item go'><a class='page-link'");sb.append("	href='javascript:skipPage()'>确定</a></li>");sb.append("	<li class='page-item'><b>共"+pageBean.getTotal()+"条</b></li>");sb.append("</ul>");//		分页执行的JS代码sb.append("<script type='text/javascript'>");sb.append("	function gotoPage(page) {");sb.append("		document.getElementById('pageBeanForm').page.value = page;");sb.append("		document.getElementById('pageBeanForm').submit();");sb.append("	}");sb.append("	function skipPage() {");sb.append("		var page = document.getElementById('skipPage').value;");sb.append("		if (!page || isNaN(page) || parseInt(page) < 1 || parseInt(page) > "+pageBean.getMaxPage()+") {");sb.append("			alert('请输入1~"+pageBean.getMaxPage()+"的数字');");sb.append("			return;");sb.append("		}");sb.append("		gotoPage(page);");sb.append("	}");sb.append("</script>");return sb.toString();}
}

2.4.8 引入tld标签库

kissship.tld:

<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>kissship 1.1 core library</description><display-name>kissship core</display-name><tlib-version>1.1</tlib-version><short-name>kissship</short-name><uri>http://jsp.veryedu.cn</uri><tag><name>page</name><tag-class>com.Kissship.tag.PageTag</tag-class><body-content>JSP</body-content><attribute><name>pageBean</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>

2.4.9 编写controller类

MusicController:

package com.Kissship.web;import com.Kissship.biz.MusicBiz;
import com.Kissship.model.Music;
import com.Kissship.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import java.util.List;/*** @author Kissship* @site www.Kissship.com* @company xxx公司* @create 2023-09-08-15:15*/
@Controller
@RequestMapping("/mic")
public class MusicController {@Autowiredprivate MusicBiz musicBiz;// 增@RequestMapping("/add")public String add(Music music, HttpServletRequest Request) {int i = musicBiz.insertSelective(music);return "redirect:list";}// 删@RequestMapping("/del/{bid}")public String del(@PathVariable("bid")Integer bid) {musicBiz.deleteByPrimaryKey(bid);return "redirect:/mic/list";}// 改@RequestMapping("/edit")public String edit(Music music, HttpServletRequest Request) {musicBiz.updateByPrimaryKeySelective(music);return "redirect:list";}// 查@RequestMapping("/list")public String list(Music music, HttpServletRequest Request) {//music是用来接受前台传递后台的参数PageBean pageBean = new PageBean();pageBean.setRequest(Request);List<Music> music1 = musicBiz.listPager(music, pageBean);Request.setAttribute("lst", music1);Request.setAttribute("pageBean", pageBean);//WEB-INF/jsp/mic/list.jspreturn "mic/list";}//数据回显@RequestMapping("/preSave")public String preSave(Music music, Model model) {if (music != null && music.getMid() != null && music.getMid() != 0) {Music m = musicBiz.selectByPrimaryKey(music.getMid());model.addAttribute("c",m);}return "mic/edit";}
}

到此我们的后台代码编写完成了,接下来就是前端代码的编写。 

2.5 前台代码

2.5.1 主页面编写

作用:展示数据进行一系列操作。

list.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.veryedu.cn" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><linkhref="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"rel="stylesheet"><scriptsrc="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script><title>JayChou歌单列表</title><style type="text/css">.page-item input {padding: 0;width: 40px;height: 100%;text-align: center;margin: 0 6px;}.page-item input, .page-item b {line-height: 38px;float: left;font-weight: 400;}.page-item.go-input {margin: 0 10px;}</style>
</head>
<body>
<form class="form-inline"action="${pageContext.request.contextPath }/mic/list" method="post"><div class="form-group mb-2"><input type="text" class="form-control-plaintext" name="mname"placeholder="请输入歌曲名称"><!-- 			<input name="rows" value="20" type="hidden"> --><!-- 不想分页 -->
<%--        <input name="pagination" value="false" type="hidden">--%></div><button type="submit" class="btn btn-primary mb-2">查询</button><a class="btn btn-primary mb-2" href="${pageContext.request.contextPath }/mic/preSave">新增</a>
</form><table class="table table-striped"><thead><tr><th scope="col">歌曲编号</th><th scope="col">歌曲名称</th><th scope="col">歌曲专辑</th><th scope="col">歌曲歌词</th><th scope="col">歌曲图片</th></tr></thead><tbody><c:forEach  var="b" items="${lst }"><tr><td>${b.mid }</td><td>${b.mname }</td><td>${b.mtype }</td><td>${b.minfo }</td><td>${b.mpic }</td><td><a href="${pageContext.request.contextPath }/mic/preSave?mid=${b.mid}">修改</a><a href="${pageContext.request.contextPath }/mic/del/${b.mid}">删除</a></td></tr></c:forEach></tbody>
</table>
<!-- 这一行代码就相当于前面分页需求前端的几十行了 -->
<z:page pageBean="${pageBean }"></z:page>
${pageBean }
</body>
</html>

 2.5.2 修改界面编写

作用:操作数据。

edit.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>编辑歌单界面</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/${empty c ? 'mic/add' : 'mic/edit'}" method="post">歌曲编号:<input type="text" name="mid" value="${c.mid }"><br>歌曲名称:<input type="text" name="mname" value="${c.mname }"><br>歌曲专辑:<input type="text" name="mtype" value="${c.mtype }"><br>歌曲歌词:<input type="text" name="minfo" value="${c.minfo }"><br>歌曲图片:<input type="text" name="mpic" value="${c.mpic }"><br><input type="submit">
</form>
</body>
</html>

三、展示效果

控制台效果:

 主页增删改查展示效果:

四、实战SpringMVC增删改查的收获

  1. 熟悉SpringMVC框架:通过实践,可以更深入地理解SpringMVC框架的工作原理和核心概念,如控制器、视图解析器、数据绑定等。

  2. 掌握请求处理和数据交互:实践中的增删改查操作涉及到请求处理和数据库数据交互,可以加深对请求的处理方式和数据库操作的理解。

  3. 强化编程技能:实战中需要编写具体的代码实现增删改查功能,可以提高编程能力,尤其是对Java和SpringMVC的理解和熟练度。

  4. 学习最佳实践:通过实践,可以学习到SpringMVC增删改查的最佳实践,包括使用合适的设计模式、优化数据库查询性能、错误处理等方面的经验。

  5. 增加项目经验:实战增删改查可以让您在实际项目中积累经验,对项目的整体流程和开发周期有更深入的认识。

  6. 提升自信心:通过实际操作和实践,可以提高对SpringMVC增删改查功能的自信心,为日后更复杂的项目开发打下基础。

请注意,SpringMVC是一个开源框架,通过参与实战项目可以更好地理解和应用它。同时,实践中也会遇到挑战和问题,但通过解决问题和学习,可以不断进步和成长。


最后实战SpringMVC之CRUD就到这里,祝大家在敲代码的路上一路通畅!

感谢大家的观看 !

http://www.ahscrl.com/news/12915.html

相关文章:

  • 招工网站怎么做河北百度seo
  • 天津河东做网站公司谷歌安装器
  • 做网站买计划书公众号推广一个6元
  • 专门做网站开发的公司购买域名后如何建立网站
  • 搭建网站的手机软件公众号如何推广
  • 全面做好政府网站建设管理工作山西百度推广开户
  • 做网站怎样做新闻发布系统
  • 昆明网站建设价格低怎么创建自己的网站平台
  • wordpress 自适应插件网络优化器下载
  • 合肥专业做网站的seo技术软件
  • 个人网站租用服务器百度首页的ip地址
  • seo外贸网站优化法治化营商环境
  • 招代理的网站要怎么做查网址
  • 玉名是什么意思杭州网站优化搜索
  • 做网站一般是什么工作百度电脑端网页版入口
  • 建立主题网站的知识点seo网络推广专员
  • 住房和城乡建设部网站关于污水运行负荷率要求的文件百度推广登录入口官网
  • 唐山正规做网站的公司自己制作网页的网站
  • 周村区建设局网站站长工具大全集
  • 猪八戒网站是做啥的小吃培训机构排名前十
  • 不让在建设门户网站网络营销的发展概述
  • 做网站的数据库的步骤外包网络推广
  • 网站建设最新技术守游网络推广平台登陆
  • 环艺做网站营销推广活动策划书模板
  • 网站 做百度推广有没有效果百度权重
  • 株洲企业网站建设工作室无锡谷歌推广
  • 做的好的旅游网站百度竞价价格
  • 网站域名怎么查成功的软文营销案例
  • 西安seo关键字优化合肥seo服务商
  • 做地暖工程的网站seoul是啥意思