java web/Maven项目结构分析

java web/Maven项目结构:

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

2).src/main/resources:

   2.1)ibatis映射文件xxxMapper.xml
    2.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.jsp
              resourcces/
                   xx.css
                   xxx.js
                   main.js
        index.jsp

   8.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_limit
           where 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或者 ( f u n c t i o n ( ) / / ) 或 者 ‘ (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 | xxx
          UI标签中的表单标签包含很多通用属性:模板相关属性 + 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>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MasterQKK 被注册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值