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

一个ip地址上可以做几个网站吗德州网站建设公司

一个ip地址上可以做几个网站吗,德州网站建设公司,seo网络推广教程,wordpress上传中文文件Spring Controller 服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器#xff0c;也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成#xff0c;服务器整体架构如下#xff1a; Server也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成服务器整体架构如下 Server Tomcat 最顶层容器代表整个服务器。 Service服务对应不同的任务。 Connector有多个用来处理连接相关的事情并提供 Socket 到 Request 和 Response 相关转化。 Container只有一个用于封装和管理 Servlet 以及处理具体的 Request 请求。 启动过程 main 方法 实例化 SpringApplication 执行run方法 run方法 配置属性、获取监听器初始化输入参数、配置环境输出banner 创建上下文、预处理上下文、刷新上下文、再刷新上下文context refreshApplicationContext方法通过ServletWebServerFactory接口定义了getwebServer方法通过其创建webServer并返回创建时做了两件重要的事情把Connector对象添加到tomcat中配置引擎【TomcatServletWebServerFactory是接口其中一个实现类】 TomcatwebServer类中规定了Tomcat服务器的启动和关闭方法。 而tomcat的启动主要是实例化两个组件Connector、Container Controller 实现 Controller 类需要使用 RestController 或 Controller 注解标注。 Controller类中所有方法以 String 形式返回 classpath 路径下同名 html 页面。适用于 JSP/thymeleaf 等动态加载页面。 RestController类中所有方法以 Map/List 等形式返回 JSON 数据。适用于前后端分离开发。 P.S. Controller 类中标注 ResponseBody 的方法可以起到和 RestController 类相同的效果。 请求映射 Controller 类中的方法使用 RequestMapping 注解标注就可以将指定 URL 请求映射到方法上处理。 RequestMapping(value /hello, method RequestMethod.GET) // 参数为 URL 路径和请求方式 RequestMapping(/hello) // 默认接收所有请求方式GetMapping(/hello) // 简写形式的 GET 请求 PostMapping(/hello) // 简写形式的 POST 请求// 灵活映射 RequestMapping(/?/hello) // ? 匹配单字符 RequestMapping(/*/hello) // * 匹配任意数量字符 RequestMapping(/**/hello) // ** 匹配任意数量目录 RequestMapping(/{ID}/hello) // {} 自动读取 URL 路径动态参数Copy to clipboardErrorCopied Controller 类也可以通过 RequestMapping 注解标注表示路径下的 URL 请求在该类中寻找方法。 Controller RequestMapping(/speak) public class SpeakController{GetMapping(/hello)public String hello(){ return hello; } }Copy to clipboardErrorCopied GET 请求参数 GET 请求参数直接附着在 URL 中。对于请求 /test?usernamemrjokerpassword123456 Controller 方法有以下几种方式接收 直接获取参数 RequestMapping(/test) public String test(String username, String password){return username password; }Copy to clipboardErrorCopied 通过 HttpServletRequest 类来获取参数 RequestMapping(/test) public String test(HttpServletRequest request){String username request.getParameter(username);String password request.getParameter(password);return username password; }Copy to clipboardErrorCopied 通过自定义对象来获取参数 RequestMapping(/test) public String test(User user){String username user.getUsername();String password user.getPassword();return username password; }Copy to clipboardErrorCopied 通过 RequestParam 注解来获取参数实参值赋给形参。 RequestMapping(/test) public String test(RequestParam(valueusername,required false, defaultValue mrjoker) String s1, RequestParam(password) String s2){return s1 s2; }Copy to clipboardErrorCopied 通过 PathVariable 注解来动态获取参数参数直接附着在 URL 中。 RequestMapping(/test/{username}/{password}) public String test(PathVariable(username) String s1, PathVariable(password) String s2){return s1 s2; }Copy to clipboardErrorCopied 通过 ModelAttribute 注解来获取其他方法返回值作为参数被注释方法会在此 controller 中每个方法执行前被执行。 Controller public class HelloWorldController { ModelAttribute public void populateModel(RequestParam String abc, Model model) { model.addAttribute(attributeName, abc); } RequestMapping(value /helloWorld) public String helloWorld() { return helloWorld; } }Copy to clipboardErrorCopied POST 请求参数 POST 请求请求参数放置在请求体中有以下两种格式 Form Data 格式 请求的 Content-Type 为 application/x-www-form-urlencoded 示例usernamemrjokerpassword123456 Request Payload 格式 请求的 Content-Type 为 application/json 或者 multipart/form-data 示例{username:mrjoker, password:123456} AJAX 提交 POST 请求默认使用 Form Data 格式Spring MVC 会自动解析到对应的 bean 中并获取参数。 // 逐个参数接收 RequestMapping(value/test, methodRequestMethod.POST) private String test(RequestParam(username) String username, RequestParam(password) String password){return username password; }// 解析为整体接收 RequestMapping(value/test, methodRequestMethod.POST) private String test(User user){return user.getUsername() user.getPassword(); }Copy to clipboardErrorCopied Vue 提交 POST 请求默认使用 Request Payload 格式Spring MVC 接收时必须进行处理 前端解决方案 axios 库可以使用 qs 库将 json 对象转化为 Form Data 格式。后端解决方案 Spring Boot 在请求参数上加 RequestBody 注解将请求正文解析到对应的 bean 中获取参数。 RequestBody 可以直接以 String 接收前端传过来的 json 数据也可以用对象自动解析前端传过来的 json 数据。对象里定义 List 属性可用来接收多条 json 数据。 // String 形式接收 RequestMapping(value /test, method RequestMethod.POST) public String test(RequestBody String user) {JSONObject userJson JSON.parseObject(user);String username userJson.getString(username);String password userJson.getString(password);return username password; }// 解析为对象接收 RequestMapping(value /test, method RequestMethod.POST) public String updateClusterIdByClientAndQueue(RequestBody User user) {return user.getUsername() user.getPassword(); }Copy to clipboardErrorCopied 一个请求可以有多个 RequestParam但只能有一个 RequestBody。 URL 内含有参数时两者可以同时使用。 请求转发和重定向 请求转发forward 客户端浏览器向服务器 A 发送一个 URL 请求服务器 A 会向另一台服务器 B 获取资源并将此资源响应给浏览器。浏览器的 URL 地址仍然是 A 。 重定向Redirect 客户端浏览器向服务器 A 发送一个 URL 请求服务器 A 告知浏览器资源在服务器 B浏览器会重新发送请求到服务器 B。浏览器的 URL 地址切换为 B。 // 请求转发 RequestMapping(/test1) public String test1(){String type forward;return forward:/test2?type type; }// 重定向 RequestMapping(/test2) public String test2(){String type redirect;return redirect:/test2?type type; }Copy to clipboardErrorCopied 在拦截器中常通过修改 HttpSevletRequest 对象实现请求转发。 request.getRequestDispatcher(login).forward(request,response);Copy to clipboardErrorCopied Controller 配置 Spring 的 WebMvcConfigurer 接口定义了 Controller 层配置信息默认为空实现。 开发者可以通过实现 WebMvcConfigurer 接口或继承 WebMvcConfigurationSupport 类对以下方法进行重写。 Configuration public class WebMVCConfig implements WebMvcConfigurer {/** 解决跨域问题 **/Overridepublic void addCorsMappings(CorsRegistry registry){};/** 添加拦截器 **/Overridepublic void addInterceptors(InterceptorRegistry registry){};}Copy to clipboardErrorCopied 跨域问题 配置如何处理跨域请求否则返回数据会被浏览器拦截。 Override public void addCorsMappings(CorsRegistry registry) {// 添加映射路径全部registry.addMapping(/**)// 放行哪些原始域.allowedOrigins(*)// 是否发送 Cookie 信息.allowCredentials(true)// 放行哪些原始域(请求方式).allowedMethods(GET,POST, PUT, DELETE)// 放行哪些原始域(头部信息).allowedHeaders(*)// 暴露哪些头部信息.exposedHeaders(Header1, Header2); }Copy to clipboardErrorCopied 局部跨域 CrossOrigin 注解在方法上RequestMapping或者在控制器Controller上使用可以实现局部跨域。 RequestMapping(/hello) ResponseBody CrossOrigin(http://localhost:8080) public String index( ){return Hello World; }Copy to clipboardErrorCopied 使用 HttpServletResponse 对象添加响应头实现局部跨域。 RequestMapping(/hello) ResponseBody public String index(HttpServletResponse response){response.addHeader(Access-Control-Allow-Origin, http://localhost:8080); // 指定端口放行// response.addHeader(Access-Control-Allow-Origin, *); 全部放行return Hello World; }Copy to clipboardErrorCopied 拦截器 过滤器 拦截器(Interceptor) Java Web 中在执行 Controller 方法前后对 Controller 请求进行拦截和处理。依赖于 web 框架在 Spring 配置。在实现上基于 Java 的反射机制。 过滤器(Filter) Java Web 中在 request/response 传入 Servlet 前过滤信息或设置参数。依赖于 servlet 容器在 web.xml 配置。在实现上基于函数回调。 两者常用于修改字符编码、删除无用参数、登录校验等。Spring 框架中优先使用拦截器功能接近、使用更加灵活。 拦截器配置 // 在配置中引入拦截器对象单独编写拦截器类Override public void addInterceptors(InterceptorRegistry registry) {// 导入拦截器对象默认拦截全部InterceptorRegistration addInterceptor registry.addInterceptor(new myInterceptor());// 排除配置addInterceptor.excludePathPatterns(/error,/login,/user/login); addInterceptor.excludePathPatterns(/asserts/**); addInterceptor.excludePathPatterns(/webjars/**);addInterceptor.excludePathPatterns(/public/**);// 拦截配置addInterceptor.addPathPatterns(/**); }Copy to clipboardErrorCopied 拦截器类通过实现 HandlerInterceptor 接口或者继承 HandlerInterceptorAdapter 类。 // 定义拦截器 public class myInterceptor extends HandlerInterceptorAdapter {// Session keypublic final static String SESSION_KEY user;// preHandle 预处理Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 检查 sessionHttpSession session request.getSession();if (session.getAttribute(SESSION_KEY) ! null) return true;// 重定向到登录页面request.setAttribute(message,登录失败请先输入用户名和密码。);request.getRequestDispatcher(login).forward(request,response);return false;}// postHandle 善后处理Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) {System.out.println(INTERCEPTOR POSTHANDLE CALLED);}}Copy to clipboardErrorCopied 过滤器类通过继承 Filter 类实现直接添加注解即可。 Component // 作为组件交给容器处理 ServletComponentScan // 扫描组件 WebFilter(urlPatterns /login/*,filterName loginFilter) // 设定过滤路径和名称 Order(1) // 设定优先级值小会优先执行 public class LoginFilter implements Filter{Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 过滤器前执行System.out.println(before);// 执行内部逻辑filterChain.doFilter(servletRequest,servletResponse);// 过滤器后执行System.out.println(after);}Overridepublic void destroy() {} }Copy to clipboardErrorCopied 调用顺序 Spring Boot配置HTTPS ####生成SSL证书 https://www.cnblogs.com/benwu/articles/4891758.html JDK提供证书管理工具: JDK\bin\keytool.exe Tomcat使用Java提供的密码库通过Java的Keytool工具生成JKS等格式的证书文件。 Apache使用OpenSSL提供的密码库生成PEM、KEY、CRT等格式的证书文件。 cmd命令(JDK\bin目录打开) 密钥库: 保存密钥和对应的证书。【证书只含有公钥】 genkeypair 生成密钥对非对称加密算法 genseckey 生成密钥对称加密算法 创建名为tomcat的密钥对以及自签名的证书放入mykeystore密钥库中不存在则创建 keytool -genkeypair -alias tomcat -keyalg RSA -validity 180 -keypass 123456 -keystore D:\mykeystore.keystore -storetype PKCS12 -storepass alias 证书别名keyalg 加密算法生成密钥对默认RSAkeysize 密钥键长RSA默认2048validity 证书有效期默认90keypass 证书密码keystore 密钥库路径默认创建在用户目录下storetype 密钥库类型默认JKSstorepass 密钥库密码 查看密钥库 keytool -list -v -alias tomcat -keystore D:\mykeystore.keystore -storepass 123456 将生成的证书文件拷贝到项目resources目录下 ####修改全局配置文件 application.properties格式 server.port 8443 server.ssl.key-store classpath:mykeystore.keystore server.ssl.key-store-password 123456 server.ssl.keyStoreType PKCS12 server.ssl.keyAlias tomcatCopy to clipboardErrorCopied 设置SSL后默认使用HTTPS协议。访问localhost:8443会出现证书安全提示强行进入即可。 【未付费注册不被数字认证机构CA认可会被浏览器标记为不安全】 如果将服务器端口号设置成443端口,即https的默认访问端口,那么在进行https访问的时候可以不带端口号直接访问。 修改入口文件 如果访问http://localhost:8443则提示需要TLS。 》》将http连接自动转换为https连接 Configuration public class TestSslApplication {//servlet容器自己写的bean会覆盖自动配置的beanBeanpublic ServletWebServerFactory servletContainer() {TomcatServletWebServerFactory tomcat new TomcatServletWebServerFactory();tomcat.addAdditionalTomcatConnectors(createStandardConnector());return tomcat;}// 新建connecter监听80端口并重定向至8443private Connector createStandardConnector() {Connector connector new Connector(org.apache.coyote.http11.Http11NioProtocol);connector.setScheme(http);connector.setPort(80);connector.setSecure(false);connector.setRedirectPort(8443);return connector;}} Copy to clipboardErrorCopied 重新配置Servlet容器(Tomcat) 自动配置类ServletWebServerFactoryAutoConfiguration会读取bean https://www.jianshu.com/p/017a7f40efff
http://www.hkea.cn/news/14312319/

相关文章:

  • 广告设计软件coreldraw教程石家庄网站seo
  • 站长收录平台中企动力设计的网站
  • 开网店3个月来亏了10万网站排名优化公司哪家好
  • 网站如何注册微信公众平台 类型司法公开网站建设情况汇报
  • 东莞网络推广策略googleseo專業
  • 上海网站建设代码自己做软件的应用
  • 自助建站系统怎么用北京电力交易中心公示
  • 优秀手机网站版式使用wordpress做图站
  • 一般网站用什么技术做的微信平台可以做微网站吗
  • 有什么做酒和水果茶教程的网站大连做网站电话
  • 临沂网站建设公司招聘做网站用什么团建
  • 高端集团网站建设公司wordpress目录页去掉
  • 网站开发获取报价wordpress应用主题出错
  • 兰州网站建设ulezhi餐饮品牌全案策划
  • wordpress 导入模板郑州seo公司哪家好
  • 辽阳企业网站建设费用公众号开发用什么语言
  • 分类信息网站如何优化网站建设营销平台
  • 专业的培训行业网站制作网站好看的图标代码
  • 网站管理和维护企业为什么要审计
  • 做网站需要续费吗如何查询公司的详细信息
  • 上海好的网站建设公司汕头网站建设公司
  • 开源cms建站系统怎么做qq分享网站
  • 我想做个旅游网站怎么做网站制作的公司
  • 读书网站建设策划书摘要美工培训课程线上
  • 企业不做网站最大免费发布平台
  • wordpress建站实例视频中企动力科技股份有限公司重庆分公司
  • 开发网站心得旗袍网站架构
  • 重庆网站策划中国建设银行app官方下载
  • 语文建设投稿网站公司营销策划方案
  • 燕郊的大型网站建设商丘做建设网站的公司