欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javaweb项目开发案例(java项目开发案例经典)

程序员文章站 2023-11-19 09:38:34
spring.messages.basename=i18n.login这样就相当于把国际化资源文件让springboot配置的resourcebundlemessagesource管理了起来2021新...

spring.messages.basename=i18n.login

这样就相当于把国际化资源文件让springboot配置的resourcebundlemessagesource管理了起来

2021新版idea修改全部默认配置中的文件编码模式,解决properties配置文件乱码问题

javaweb项目开发案例(java项目开发案例经典)

通过以上设置,我们根据浏览器语言的设置切换国际化,下面展示原理:

springmvc的自动配置中有默认的区域信息解析器===>国际化locale(区域信息对象),localeresolver(获取区域信息对象)

javaweb项目开发案例(java项目开发案例经典)

点击链接实现国际化切换

1.编写自己的区域信息解析器,并放到容器中

自定义区域信息解析器:

/*

  • 可以携带区域信息
  • */

public class mylocaleresolver implements localeresolver

{

@override

public locale resolvelocale(httpservletrequest request) {

string l=request.getparameter(“l”);

locale locale=locale.getdefault();//locale.getdefault()获取当前的语言环境—操作系统的语言环境

if(!stringutils.isempty(l))

{

string[] s = l.split(“_”);

locale=new locale(s[0],s[1]);//第一个参数是国家,第二个参数是语言

}

return locale;

}

@override

public void setlocale(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, locale locale) {

}

}

springmvc扩展类: 负责将自定义的组件加入到容器中

//使用webmvcconfigureradapter可以来扩展springmvc的功能

@configuration

public class myconfig extends webmvcconfigureradapter

{

//所有的webmvcconfigureradapter组件都会一起起作用

@bean//将容器注册在容器中

public webmvcconfigureradapter addviewcontrollers()

{

webmvcconfigureradapter adapter=new webmvcconfigureradapter() {

@override

public void addviewcontrollers(viewcontrollerregistry registry) {

registry.addviewcontroller(“/”).setviewname(“index”);

registry.addviewcontroller(“/index.html”).setviewname(“index”);

}

};

return adapter;

}

@bean

//在springmvc扩展类中,将刚才写的区域信息解析器放到容器中

public localeresolver localeresolver()

{

return new mylocaleresolver();

}

}

效果展示:

javaweb项目开发案例(java项目开发案例经典)
javaweb项目开发案例(java项目开发案例经典)

登录模块

===================================================================

springmvc新特性支持的rest风格的注解

@restcontroller注解

@restcontroller等常见注解

@postmapping, @getmapping, @putmapping, @deletemapping四个支持rest风格的注解

模板引擎页面修改后要时时生效==>禁用掉模板引擎的缓存+重新编译

在全局配置文件中禁用掉模板引擎的缓存

#禁用掉模板引擎的缓存,这样页面内容一修改,就可以看到修改后的效果

spring.thymeleaf.cache=false

idea在项目运行期间,不会让我们对页面的修改生效,如果想让我们对页面的修改时时生效,第一步禁用缓存,第二步按住ctrl+f9重新编译当前页面

thymeleaf 内置对象和内置方法

thymeleaf 内置对象和内置方法

转发到某一页面导致的表单重复提交问题

解决表单重复提交问题

登录成功后,要防止表单被重复提交,可以重定向到主页

javaweb项目开发案例(java项目开发案例经典)

拦截器进行登录检查,防止不经过登录直接来到某一页面

springboot已经做好了静态资源的映射

1.自定义登录拦截器,通过获取session中存放的数据,来判断是否已经登录过

public class loginhanlderintercept implements handlerinterceptor

{

@override

public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception {

object user=request.getsession().getattribute(“loginuser”);

if(user==null)

{

//未登陆,返回登陆页面

request.setattribute(“msg”,“没有权限请先登陆”);

request.getrequestdispatcher(“/index.html”).forward(request,response);

return false;

}

else

{

//已登陆,放行请求

return true;

}

}

@override

public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception {

}

@override

public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception {

//登陆后,将之前存储在session里面的登录凭证销毁,无论是否存在凭证,都执行销毁操作

request.getsession().removeattribute(“loginuser”);

}

}

2.如果登录成功,那么往session中存放一个username作为登录凭证

@controller

public class logincontroller

{

@postmapping(“/user/login”)

public string login(@requestparam(“username”)string username,

@requestparam(“password”)string password

, map<string,object> map, httpsession session)

{

if(username.equals(“大忽悠”)&&“123456”.equals(password))

{

session.setattribute(“loginuser”,username);

//登录成功

return “redirect:/main.html”;

}

//登录失败

map.put(“msg”,“用户名或密码错误”);

return “index”;

}

}

3.在springmvc扩展类中将自定义的拦截器进行注册

//使用webmvcconfigureradapter可以来扩展springmvc的功能

@configuration

public class myconfig extends webmvcconfigureradapter

{

//所有的webmvcconfigureradapter组件都会一起起作用

@bean//将容器注册在容器中

public webmvcconfigureradapter addviewcontrollers()

{

webmvcconfigureradapter adapter=new webmvcconfigureradapter() {

@override

public void addviewcontrollers(viewcontrollerregistry registry) {

registry.addviewcontroller(“/”).setviewname(“index”);

registry.addviewcontroller(“/index.html”).setviewname(“index”);

registry.addviewcontroller(“/main.html”).setviewname(“success”);

}

@override

public void addinterceptors(interceptorregistry registry) {

registry.addinterceptor(new loginhanlderintercept()).addpathpatterns(“/**”)//拦截任意多层路径下的所有请求

.excludepathpatterns(“/index.html”,”/”,”/user/login”);//某些请求不进行拦截

}

};

return adapter;

}

@bean

//在springmvc扩展类中,将刚才写的区域信息解析器放到容器中

public localeresolver localeresolver()

{

return new mylocaleresolver();

}

}

小细节:如果已经登录成功了,那么session域中就会存在已经登录的凭证,如果此时回退到登录页面,那么就可以不登录直接访问对应网页,这个的解决方法如下:

使用下面这个解决方法的前提是拦截器只拦截登录页面,而不是所有请求,不然当登录成功后,点击当前页面的任何请求,都会回到登录页面

@override

public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception {

//登陆后,将之前存储在session里面的登录凭证销毁,无论是否存在凭证,都执行销毁操作

request.getsession().removeattribute(“loginuser”);

}

拦截器如果拦截所有请求,静态资源也会被拦截,因此注意排除掉对应的静态资源访问路径

crud—员工列表

javaweb项目开发案例(java项目开发案例经典)
javaweb项目开发案例(java项目开发案例经典)

thymeleaf公共页面元素抽取

javaweb项目开发案例(java项目开发案例经典)

这里模板名就是html页面的名字,即xxx(模板名).html

这里的模板名会使用thymeleaf的前后缀配置规则进行解析

三种引入功能片段的th属性

javaweb项目开发案例(java项目开发案例经典)

具体使用参考下面这篇文章

thymeleaf 模板布局 th:fragment、th:replace、th:insert、th:remove

如果使用了thymeleaf模板引擎,那么controller层的返回值就会由模板引擎自动拼串,因此如果我们还想转发或者重定向到某个请求,就需要加上forward或者redirect前缀

加上forward或者redirect前缀后,springboot也提供了各自的视图解析处理器,底层就是原生的转发和重定向

springmvc中的forward和redirect前缀路径问题:

package com.czl.controller;

@controller

public class hellocontroller {

/**

  • forward:转发到一个页面
  • /hello.jsp:转发当前项目下的hello;
  • 一定加上/,如果不加/就是相对路径。容易出问题;
  • forward:/hello.jsp
  • forward:前缀的转发,不会由我们配置的视图解析器拼串
  • @return

*/

@requestmapping(“handle01”)

public string handle01(){

system.out.println(“handle01…”);

return “forward:/hello.jsp”;

}

@requestmapping(“handle02”)

public string handle02(){

system.out.println(“handle02…”);

return “forward:/handle01”;

}

/**

  • 重定向到hello.jsp页面
  • 有前缀的转发和重定向操作,配置的视图解析器就不会进行拼串;
  • 转发 forward:转发的路径
  • 重定向 redirect:重定向的路径
  • /hello.jsp:代表就是从当前项目下开始;在springmvc中会为路径自动的拼接上项目名
  • 原生的servlet重定向/路径需要加上项目名才能成功,
  • 重定向的url路径是要发给浏览器让浏览器按照该url访问服务器的,而浏
  • 览器解析/ 只到站点,如 localhost:8080/,使用response.sendredirect(“/hello.jsp”),浏览器只会解析为:
  • localhost:8080/hello.jsp
  • response.sendredirect(“/hello.jsp”)//访问不到,要加上项目名 /springmvc_viewresolver_06/hello.jsp
  • @returnrd.include(requesttoexpose, response);

*/

@requestmapping(“handle03”)

public string handle03(){

system.out.println(“handle03…”);

return “redirect:/hello.jsp”;

}

@requestmapping(“handle04”)

public string handle04(){

system.out.println(“handle04…”);

return “redirect:/handle03”;

}

}

sprinboot中的日期格式化问题

springboot底层日期格式化原理:

默认有一个日期格式化器:

![在这里插入图片描述](
https://img-blog.csdnimg.cn/de16e8c47d51400989e3c05bd813b6ae.png?x-oss-process=image/watermark,type_zmfuz3pozw5nagvpdgk,shadow_10,text_

《一线大厂java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/dsmxtbfj1cmn1r2db】 完整内容开源分享

ahr0chm6ly9ibg9nlmnzzg4ubmv0l20wxzuzmtu3mtcz,size_16,color_ffffff,t_70)

默认使用的日期格式是/方式,如果后台接收到前台的日期格式不是\,那么就会报错:

javaweb项目开发案例(java项目开发案例经典)

我们可以在配置文件中进行日期格式修改,替换默认的日期格式:

spring.mvc.date-format=yyyy-mm-dd

thymeleaf 日期格式化处理

${#dates.format(key)}

${#dates.format(key, ‘yyyy-mm-dd hh:mm:ss’)}

格式化传递过来的 date 对象,如果没有指定时间格式,将使用浏览器当前使用的时间格式

thymeleaf 日期格式化处理

jquery中的submit事件来提交表单,也可以阻止表单的提交

javaweb项目开发案例(java项目开发案例经典)