java web/Maven项目结构:

1).src/main/java: 存放java源代码

2).src/main/resources:

   2.1)ibatis映射文件xxxMapper.xml2.2)spring/spring-mvc.xml:spring-mybatis.xml:  mybatis配置+spring事务配置spring-redis.xml :redis数据库配置spring-security-cas.xml: spring security cas认证spring-security.xml:  spring seccurity 表单认证2.3)appConfig.properties: 系统基本配置,包含数据库/redies等配置2.4)log4j.properties: log4j的配置文件2.5)spring-applicationContext.xml:默认名称为applicationContext.xml,为 spring 入口配置文件

3)src/test

4)Maven dependencies

5)JRre system Library

6)Apache Tomcat

7)JUnit

8)src/:

 8.1)main/webapp/:WEB-INF/pages/xx.jspresourcces/xx.cssxxx.jsmain.jsindex.jsp8.2)test

9)target:

10)build.xml:

11)pom.xml:

详解:
*. ibatis映射文件 HourlySchedMapper.xml

  <mapper namespace="HourlySched"><sql  id="queryBasic"><![CDATA[ //SQL  statement ]]><choose><when test="xxxxx">set @xx=xx;</when><otherwise>set @xxx= xxx;</otherwise></choose><![CDATA[ //SQL  statement ]]></sql><select id="retrieveDetail" parameterType="bean class" resultType="bean class"> <include refid="queryBasic"></include> <![CDATA[// SQL statement]]>                  </select></mapper>

该文件对应的控制层HourlySchedMgmtController.java中的retrievemaster方法会调用服务层SchedMgmtService中的retrieveMaster方法,该方法又会调用DAO层的selectList方法List selectList(String statement, Object parameter).例.第一个参数statement为"HourlySched.retrieveMaster", 可以看到HourlySched即为对应的ibatis文件字段的namespace的值,而retrieveMaster即为字段中的id值。

***注:. ibatis中用<![CDATA[ ]]>标记避免sql中与xml规范相冲突的字符对xml映射文件的合法性造成影响. CDATA全名为character data,指不使用XML解析器解析的文本数据其中包含的是指的是不应由xml解析器进行解析的文本数据

. choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。. `: id为queryId的SQL一般是常用的或者是 可被其他SQL复用的部分,其他SQL只需要在需要的地方添加即可复用。
一个更加明白的例子:

    <sql id="Base_Column_List" >id, single_limit, day_limit, month_limit, state, bank_name, bank_code, channel</sql><select id="selectByPrimaryKey" resultMap="***" parameterType="****" >select<include refid="Base_Column_List" />from bank_limitwhere id = #{id,jdbcType=INTEGER}</select>

. SQL操作字段(update/insert/select/delete) 一般还需要parameterType和resultType两个字段,其中parameterType为输入参数元素的类型,resultType为查询结果元素的类型,二者不一定都有,类型一般为bean中定义的类。
. SQL可以包含特殊标记:$ #
$:将传入的数据直接显示生成Sql语句,实际上在动态SQL解析阶段进行了变量替换, KaTeX parse error: Expected 'EOF', got '#' at position 27: … #̲:将传入的值当作字符串,解析为…, 使用#可以很大程度上防止sql注入。(语句的拼接),但是如果使用在order by 中就需要使用 $.


*. applicationContext.xml配置文件分析

spring的入口配置文件:
<context:annotation-config /> :开启spring注解配置

 <context:component-scan base-package="com.vxichina.wfmpx"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan>

:开启组件扫描,把controler下面的 controller去除, 如果不去除会影响事务管理的

注:exclude-filter用于在扫描时将base-package中的特定类型包排除,include-filter用于只对base-package指向的特定类型包进行扫描,一般Controller包会在spring-mvc.xml中进行扫描,其余的在applicationContext.xml中进行扫描,各司其职。
<context:property-placeholder location="classpath:appConfig.properties" />:引入系统基本配置
<import resource="spring/spring-mybatis.xml" /> :mybatis配置——spring事务配置
<import resource="spring/spring-redis.xml" /> :redis数据库配置
<import resource="spring/spring-security.xml" /> : 表单认证



***控制器

提供访问应用程序的行为,有两种方式:(1)服务接口定义(2)注解定义@RequestMapping ,

https://www.cnblogs.com/best/p/5659596.html?utm_source=tuicool&utm_medium=referral

其中:
(1)通过实现接口定义控制器,然后在springmvc-servlet.xml增加一个控制器bean的声明:其中,name是访问路径,class即为自定义控制器全称,其返回的模型视图对象中指定的路径为:“foo/index”。视图index.jsp位于WEB-INF/vews/foo目录下,浏览器请求:localhost:8080/SpringMVCxx/foox, 该方式缺点:一个控制器只能有一个Action,定义方式麻烦,

 下面重点解释(2):

org.springframework.stereotype.Controller注解类型用于声明Spring类的实例BarController是一个控制器,使用时要在类 前面加上注解:

  • @Controller

, Spring还提供了扫描机制来找到应用程序中所有基于注解的控制类,需要在Spring-mvc.xml中配置:<context:component-scan base-package="com.zhangguo.springmvc02" />, 其中base-package用于指定扫描的基础包(缩小扫描范围),注解的方法前面加上:@RequestMapping("/bar"), 该方法返回String类型“foo/index”, 浏览器请求:localhost:8080/SpringMVC02/bar,

注:两种方式BarController和FooController同时指定一个视图foo/index.jsp, 页面的具体呈现结果取决于方法的内部实现,这里视图被复用,控制器和视图之间是弱耦合的。

  • @RequestMapping

: 用于映射请求的url到控制器类或者一个特定的程序/方法 ,用于类上,表示类中所有响应请求的方法都是以改地址作为父路径。Spring提供的注解类位于org.springframework.web.bind.annotation下。可以只注解方法/同时注解类和方法/

@RequestMapping共有8个属性,其中,除了name之外,其余的都是数组类型,可以指定多个值,具体写法如下:
1)@RequestMapping("/action3/{p1}/{p2}") :将 注释方法的参数绑定到URI模板变量
public String action3(@PathVariable int p1, @PathVariable int p2, Model model) {//}
注:@RequestMapping("/foo")和@RequestMapping(path="/foo")相同

2)@RequestMapping(value="/action4/{id:\d{6}}-{name:[a-z]{3}}") : 正则要求id必须为6文数字,name必须为3位字母
public String action4(@PathVariable int id, @PathVariable String name, Model model) {//}

3)@RequestMapping(value="/action5/{name}") : 使用矩阵变量时,需要在springmvc-servlet.xml进行相应的配置
public String action5(Model model, @PathVariable String name, @MatrixVariable String r, @MatrixVariable(required=true) String g,@MatrixVariable(defaultVariable=“99”, required=false) String b) {//}

4)@RequestMapping(value="/action6/*.do"): Ant风格的路径模式,Ant通配符?/*/**/
public String action6(Model model) {}

5)@RequestMapping(value={"", “/page”, "page", “view/*”, "/msg"})*: 凡是满足{}中某一模式的URL请求都会由该方法进行处理
String indexMultipleMapping() {//}

6)@RequestMapping(value="/acton6", method={RequestMethod.POST, RequestMethod.DELETE}): 访问/action6请求的谓词类型必须为POST或者DELETE, 其他请求类型会显示405.
注:所有的请求默认(没有声明method)都是HTTP GET类型的,
7)@Controller

@RequestMapping("/home")
public class IndexController{@RequestMapping(method=RequestMethod.GET)String get() {}@RequestMapping(method=RequestMethod.DELETE)String delete() {}// ...
}

所有处理方法会处理从/home进来的请求,到底调用那个方法取决于请求的类型

8) consumes用于指定处理请求的提交内容类型(即发送到服务器的Content-type)
@RequestMapping(value="/action8", consumes=“text/html”) : 请求的Content-type必须是text/html,否则报错415,

9) produces用于指定响应的Content-type,约束Accept类型
@RequestMapping(value="/action9", produces=“application/json; charset=UTF-8”): 客户端可以接受的类型是application/jso且编码为utf-8,
注:多数浏览器Accept设置为*/*,接受任意类型

10)params用于指定请求中必须有特定参数与值
@RequestMapping(value="/action10", params={“id=215”, “name!=abc”}) :请求/action10路径必须包含id=215且name不等于abc
例,url:localhost:8080/SpringMVC02/home/action10?id=215&name=xyz, ok

11) header指定请求中必须有特定header值
@RequstMapping(value="/action11", headers=“Host=localhost:8078”):
例,url: localhost:8078/SpringMVC02/home/action11

12) name为当前映射制定一个名称,不常用
@RequestMapping(path={"/action12", “/myaction”}, name=“actionTest”)
例:url:localhost:8080/SpringMVC02/home/action12, ok

13)方法级注解,或者@RequestMapping的组合注解*
@GetMapping <=> @RequestMapping(method=RequestMethod.GET)
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping


*.WEB-INF/下面的pages(JSP)和Resources(CSS/JS)

一个JSP页面可以由其他JSP页面拼接形成(子JSP页可以是某个JSP页面的一部分,包括成对标记可以 存在于两个JSP文件,但是要保证拼接后是完整的);

*.0) JSP页面的加载顺序

参考: https://blog.csdn.net/h2604396739/article/details/85176172

  • 优先级:java>js=html;

  • 写在<%%>中的Java代码(服务端运行的代码)优先加载;

  • jsp页面从上至下依次执行(javascript和html是浏览器端运行的代码 ),

  • <script>标签里面的或者是引入的外部JS文件的执行顺序都是其语句出现的顺序,JS的执行过程也是页面装载的一部分;
    window.ready或者(function()//)或者‘(function() { //})或者`(function()//)或者‘(document).ready(function() {// })`是文档DOM结构加载完成(不包含图片)之后执行;

  • window.onload是所有网页内容(包含图片等)加载完成之后才执行,并且该方法只能有一个

*.1) 插入Java代码:

共三种方式:

  • (1)通过引用变量的方式

    <%=xxx%>: xxx可以为表达式或变量
    
  • (2)通过嵌入代码段的方式

     <%// Java代码片段%>
  • (3)<%! 字段或方法声明 %>

    例.

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>  //中文编码
<!DOCTYPE html>
<html>
<head><title>Hello World</title></head>
<body>Hello World!<br/><%System.out.println("Your IP address is " + request.getRemoteAddr());%><p>今天的日期是: <%=(new java.util.Date()).toLocalString()%></p><%! int i=0; %>
</body>
</html>

*.2) 引入CSS文件:

<link rel="stylesheet" type="text/css" href="<%=basePath%>/resources/z_general/t3party/jquery.ui/1.12.1/jquery-ui.min.css"/>

*.3) 引入JS文件:

  <script type="text/javascript" src="<%=basePath%>/resources/z_general/t3partyExtra/vue/2.5.17/vue.min.js"></script>

*.4) 插入java script代码:

        <script>var a = 1;$(function() {$('xxx').fuctName(function() {//});  });var fuctName2 = function(parameters ) {//}</script>

*.5)JSP页面常用标签:

         参照: https://blog.csdn.net/xybelieve1990/article/details/48680075
  • *. EL(Expression Language)表达式:

        语法结构:${} 运算符:[] 、 .
    
  • *. jstl(Java server page standard tag library)表达式:

       <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>提供一般用头/条件/迭代/url标签: out/set/remove/catch | if/choose/when/otherwise/ | forEach/forTokens | import/url/redirect<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>使用那个taglib的标记时,加上相应的前缀:如,<c:forEacch></c:forEach>
    
  • *.struts-tags表达式:

         <%@ taglib prefix="s" uri="/struts-tags"%>
    
  • *.Ognl(struts)表达式

         包括:UI标签、非UI标签、ajax标签:xx  | if/else if/ else/append/generator/Iterator/merge/sort/Subset/ + action/bean/date/debug/i18n/include/param/push/set/text/url/property | xxxUI标签中的表单标签包含很多通用属性:模板相关属性 + Javascript相关属性(onclick/ondbclick/onfocus/onchange....) + 通用属性
    

*.6) 注意JSP和HTML页面的区别

  • 一个JS文件

  • 一个CSS文件的定义参照:基础总结-CSS


*.pom.xml

 `<properties>xxx</properties>`:字段定义框架的版本`<dependencies><dependency>xxx</dependency><dependencies>`:字段定义各个框架的描述,可从Maven官网搜索和复制其中,spring-context/spring-webmvc分别为Spring框架核心库和MVC, javax.servlet-api为Servlet核心包,jsp-api为JSP应用程序接口,注意scope字段的设置```<build></build>

java web/Maven项目结构分析相关推荐

  1. IntelliJ IDEA 创建 hello world Java web Maven项目从头到尾都有图有真相2017版本

    IntelliJ IDEA使用教程 (总目录篇) 学Java的大部分吧都是要整Java web开发项目的,那么最好用的编辑器估计就是这个 IntelliJ IDEA,然后现在maven管理项目是很流行 ...

  2. 使用IDEA2017创建java web +maven项目

    1.首先,提前准备的东西:我使用的是IDEA2017,tomcat7,jdk1.:请将这些软件安装完成,环境变量配置完成,如何配置以及安装我就不复述了,百度上一堆一堆的,比我知道的详细多了. 2.下面 ...

  3. java web学习项目20套源码完整版

    java web学习项目20套源码完整版 自己收集的各行各业的都有,这一套源码吃遍所有作业项目! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servlet) 3.OA办公自动化 ...

  4. Java web小项目_个人主页(2)—— 边缘加速原理与实现

    摘自:Java web小项目_个人主页(2)-- 边缘加速原理与实现 作者:丶PURSUING 发布时间: 2021-03-27 14:44:40 网址:https://blog.csdn.net/w ...

  5. Java web小项目_个人主页(1)—— 云环境搭建与项目部署

    摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...

  6. 分享java web 期末项目实验源码20套,BBS论坛,ERP管理系统,OA自动化等等

    分享java web 期末项目实验源码20套,BBS论坛,ERP管理系统,OA自动化等等 我自己也从里面学习到了很多东西! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servl ...

  7. Java Web入门项目之“网络交友”的设计与实现

    前言:这个小项目是我刚学习JSP时,参考"JSP程序设计"这本书写的.这里之所以说参考这本书而不是照着这本书写,主要是因为我自己完成的时候删掉了不少繁琐的写法(比如:文件上传):同 ...

  8. java web银行项目

    java web银行项目 一.项目简介 ​ 本项目是基于idea,后台实现的技术:jsp,servlet,前端开发技术:javascript.css.bootstrap本项目主要实现一个模拟ATM机存 ...

  9. 【暑假学习笔记】之——用Intellij idea新建一个java web+Servlet项目(有实例)——idea中快速重写父类的方法

    Intellij idea中快速重写父类方法 在写java文件时,有时候需要重写父类方法,但在idea中创建java文件时并不会像eclipse一样可以选择父类,但是重写父类方法其实只需要这样做: 鼠 ...

  10. java/web/springboot项目使用WebSocket消息推送

    java/web/springboot项目使用WebSocket消息推送 最近项目中,有消息推送的广播和在线咨询的功能,以前也没搞过啊,有些小伙伴估计也是,那肯定要赶紧学习起来啊~ 不说废话,今天就告 ...

最新文章

  1. Nginx ssl、rewrite配置
  2. Delphi制作图像特殊显示效果
  3. c语言线性表顺序存储实验小结,数据结构学习笔记-线性表顺序存储(C语言实现)...
  4. 【运营】“顶级运营”最强速成攻略!目前国内不超过200人!
  5. 导出全部记录到excel
  6. 别说了,叫爸爸吧! | 今日最佳
  7. 飞鸽传书从天齐庙南门出来
  8. phpcmsV9 关键词keywords删除、替换与修改
  9. 取消对 null 指针“l”的引用。_彻底理解链表中为何使用二级指针或者一级指针的引用...
  10. [Go] 函数/方法 的 变参
  11. 纯css3特效实现的文字亮光
  12. Linux与.Net Core(一) Centos 系统制作教程
  13. 动态规划 之 完全背包
  14. ceph rbd mysql_ceph rbd操作
  15. c语言开发ios应用程序,马上着手开发iOS应用程序:三、应用开发基础
  16. hbuilder版本更新失败_HBuilderX版本升级问题引发的血案(持续更新中)
  17. Kubernetes在宜信落地实践
  18. java中 一个等于号和两个等于号三个等号的区别?
  19. repo forall -c命令
  20. matlab hello world,hello world

热门文章

  1. 【2018】面试复习大纲
  2. Spring AOP高级——源码实现(2)Spring AOP中通知器(Advisor)与切面(Aspect)
  3. C语言中extern关键字详解
  4. 类数组变量定义与初始化
  5. jquery 几个实用的小方法
  6. freebsd下fcgi程序例子
  7. C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)
  8. mybatis 主从表关联查询封装返回结果
  9. Linux下CGDB使用教程(转载)
  10. 每天一道剑指offer-对称的二叉树